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. |