root/tags/lgt291/library/monitor.lgt

Revision 2, 1.4 KB (checked in by pmoura, 7 years ago)

Initial revision

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1
2:- category(monitor,
3    implements(monitorp)).
4
5
6    :- info([
7        version is 1.0,
8        authors is 'Paulo Moura',
9        date is 2000/7/24,
10        comment is 'Monitor predicates.']).
11
12
13    :- private(spy_point_/4).
14    :- dynamic(spy_point_/4).
15
16    :- mode(spy_point_(?event, ?object, ?callable, ?object), zero_or_more).
17
18    :- info(spy_point_/4, [
19        comment is 'Stores current spy points.',
20        argnames is ['Event', 'Object', 'Message', 'Sender']]).
21
22
23    monitor_activated :-
24        self(Self),
25        once(current_event(_, _, _, _, Self)).
26
27
28    activate_monitor :-
29        self(Self),
30        abolish_events(before, _, _, _, Self),
31        abolish_events(after, _, _, _, Self),
32        forall(
33            ::spy_point_(Event, Object, Message, Sender),
34            define_events(Event, Object, Message, Sender, Self)).
35
36
37    suspend_monitor :-
38        self(Self),
39        abolish_events(before, _, _, _, Self),
40        abolish_events(after, _, _, _, Self).
41
42
43    reset_monitor :-
44        self(Self),
45        abolish_events(before, _, _, _, Self),
46        abolish_events(after, _, _, _, Self).
47        ::retractall(spy_point_(_, _, _, _)).
48
49
50    spy_point(Event, Object, Message, Sender) :-
51        ::spy_point_(Event, Object, Message, Sender).
52
53
54    set_spy_point(Event, Object, Message, Sender) :-
55        ::retractall(spy_point_(Event, Object, Message, Sender)),
56        once((var(Event); Event = before; Event = after)),
57        ::assertz(spy_point_(Event, Object, Message, Sender)).
58
59
60    del_spy_points(Event, Object, Message, Sender) :-
61        ::retractall(spy_point_(Event, Object, Message, Sender)).
62
63
64:- end_category.
Note: See TracBrowser for help on using the browser.