blob: 845d689e03f3a255ac70e043760dca3f9fc48409 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
/*
* DNN - Data News Network
*
* by Stephane Chatty
*
* Copyright 1993-1994
* Centre d'Etudes de la Navigation Aerienne (CENA)
*
* Reactions.
*
* $Id$
* $CurLog$
*/
#include "Reaction.h"
#include "Trigger.h"
/*?class DnnBaseReaction
The class \typ{DnnBaseReaction} is the base class for event handling.
A reaction implements a behaviour (through the virtual function \fun{Manage}),
and can be associated to one or more triggers, generally located in a sensor.
?*/
/*?
Create a reaction.
?*/
DnnBaseReaction :: DnnBaseReaction ()
: Triggers (),
Grabbed ()
{
}
/*?nodoc?*/
DnnBaseReaction :: ~DnnBaseReaction ()
{
CcuListIterOf <DnnTrigger> ti = Grabbed;
while (++ti)
(*ti)->Release (*this);
ti = Triggers;
while (++ti)
(*ti)->Unsubscribe (*this);
}
/*?nextdoc?*/
void
DnnBaseReaction :: SubscribeTo (DnnTrigger& t)
{
Triggers.Append (&t);
t.Subscribe (*this);
}
/*?
Tell that a reaction should (resp. should no more) be activated when the trigger \var{t}
causes the emission of an event.
?*/
void
DnnBaseReaction :: UnsubscribeTo (DnnTrigger& t)
{
Triggers.Remove (&t);
t.Unsubscribe (*this);
}
/*?nextdoc?*/
void
DnnBaseReaction :: Grab (DnnTrigger& t)
{
Grabbed.Append (&t);
t.Grab (*this);
}
/*?
Tell that a reaction should (resp. should no more) be the only one
activated when the trigger \var{t} causes the emission of an event.
?*/
void
DnnBaseReaction :: Release (DnnTrigger& t)
{
Grabbed.Remove (&t);
t.Release (*this);
}
/*?
This virtual function is called when an event is emitted because of a trigger to which
this reaction was attached. It should be redefined in derived classes to implement
behaviours.
?*/
void
DnnBaseReaction :: Manage (DnnEvent&)
{
}
/*?class DnnReaction
The class \typ{DnnReaction} is a ready-to-use derived class of \typ{DnnBaseReaction}.
In this class, the function \fun{Manage} is redefined to call a function passed when creating
the reaction.
?*/
/*?
Build a reaction that will call \var{f} to handle events.
\fun{f} has to take a \typ{DnnEvent\&} parameter and return \typ{void}.
?*/
DnnReaction :: DnnReaction (DnnHandlingFunction f)
: DnnBaseReaction (),
Handler (f)
{
}
/*?nodoc?*/
DnnReaction :: ~DnnReaction ()
{
}
/*?nodoc?*/
void
DnnReaction :: Manage (DnnEvent& ev)
{
(*Handler) (ev);
}
|