65 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			65 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- category(monitor,
							 | 
						||
| 
								 | 
							
									implements(monitorp)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									:- info([
							 | 
						||
| 
								 | 
							
										version is 1.0,
							 | 
						||
| 
								 | 
							
										authors is 'Paulo Moura',
							 | 
						||
| 
								 | 
							
										date is 2000/7/24,
							 | 
						||
| 
								 | 
							
										comment is 'Monitor predicates.']).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									:- private(spy_point_/4).
							 | 
						||
| 
								 | 
							
									:- dynamic(spy_point_/4).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									:- mode(spy_point_(?event, ?object, ?callable, ?object), zero_or_more).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									:- info(spy_point_/4, [
							 | 
						||
| 
								 | 
							
										comment is 'Stores current spy points.',
							 | 
						||
| 
								 | 
							
										argnames is ['Event', 'Object', 'Message', 'Sender']]).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									monitor_activated :-
							 | 
						||
| 
								 | 
							
										self(Self),
							 | 
						||
| 
								 | 
							
										once(current_event(_, _, _, _, Self)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									activate_monitor :-
							 | 
						||
| 
								 | 
							
										self(Self),
							 | 
						||
| 
								 | 
							
										abolish_events(before, _, _, _, Self),
							 | 
						||
| 
								 | 
							
										abolish_events(after, _, _, _, Self),
							 | 
						||
| 
								 | 
							
										forall(
							 | 
						||
| 
								 | 
							
											::spy_point_(Event, Object, Message, Sender),
							 | 
						||
| 
								 | 
							
											define_events(Event, Object, Message, Sender, Self)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									suspend_monitor :-
							 | 
						||
| 
								 | 
							
										self(Self),
							 | 
						||
| 
								 | 
							
										abolish_events(before, _, _, _, Self),
							 | 
						||
| 
								 | 
							
										abolish_events(after, _, _, _, Self).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									reset_monitor :-
							 | 
						||
| 
								 | 
							
										self(Self),
							 | 
						||
| 
								 | 
							
										abolish_events(before, _, _, _, Self),
							 | 
						||
| 
								 | 
							
										abolish_events(after, _, _, _, Self).
							 | 
						||
| 
								 | 
							
										::retractall(spy_point_(_, _, _, _)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									spy_point(Event, Object, Message, Sender) :-
							 | 
						||
| 
								 | 
							
										::spy_point_(Event, Object, Message, Sender).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									set_spy_point(Event, Object, Message, Sender) :-
							 | 
						||
| 
								 | 
							
										::retractall(spy_point_(Event, Object, Message, Sender)),
							 | 
						||
| 
								 | 
							
										once((var(Event); Event = before; Event = after)),
							 | 
						||
| 
								 | 
							
										::assertz(spy_point_(Event, Object, Message, Sender)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									del_spy_points(Event, Object, Message, Sender) :-
							 | 
						||
| 
								 | 
							
										::retractall(spy_point_(Event, Object, Message, Sender)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- end_category.
							 |