IT++
4.3.1
Toggle main menu visibility
itpp
protocol
events.h
Go to the documentation of this file.
1
28
29
#ifndef EVENTS_H
30
#define EVENTS_H
31
32
#include <
itpp/base/itassert.h
>
33
34
#if (defined(_MSC_VER) && defined(ITPP_SHARED_LIB) && !(defined(itpp_EXPORTS) || defined(itpp_debug_EXPORTS)))
35
36
#ifndef ITPP_PROTOCOL_EXCLUDED
37
#define ITPP_PROTOCOL_EXCLUDED
38
#pragma message( "PROTOCOL definitions are not available for MSVC shared builds" )
39
#endif
40
41
#else
42
43
44
#include <queue>
45
#include <deque>
46
47
namespace
itpp
48
{
49
51
52
53
// typedef long double Ttype; //!< 128-bit floating point time
54
typedef
double
Ttype
;
55
// typedef long unsigned int Ttype; //!< 64-bit unsigned integer time
56
57
class
Event_Queue
;
58
class
Base_Event
;
59
class
Base_Signal;
60
68
class
Base_Event
69
{
70
public
:
71
friend
class
Base_Signal;
72
73
friend
class
Event_Queue;
74
75
friend
struct
Compare_Base_Event_Times;
76
78
Base_Event
(
const
Ttype
delta_time) {
// The event will occur in 'delta_time' time units from now!
79
it_assert
(delta_time >= 0,
"Only causal simulations are possible"
);
80
active
=
true
;
81
delta_t
= delta_time;
82
expire_t
= 0;
// Will be set correctly upon calling Event_Queue::add().
83
id
=
global_id
++;
84
}
85
87
virtual
~Base_Event
() {}
88
90
void
cancel
() {
active
=
false
; }
91
92
protected
:
94
virtual
void
exec
(
void
) = 0;
96
Ttype
delta_t
;
98
Ttype
expire_t
;
100
bool
active
;
102
unsigned
long
long
int
id
;
104
static
unsigned
long
long
int
global_id
;
105
};
106
108
struct
Compare_Base_Event_Times
{
110
bool
operator()
(
Base_Event
*event1,
Base_Event
*event2) {
111
if
(event1->
expire_t
== event2->
expire_t
)
// Equal expire times.
112
return
(event1->
id
> event2->
id
);
// Base comparison on the event id.
113
else
114
return
(event1->
expire_t
> event2->
expire_t
);
// Different expire times. Regular comparison.
115
}
116
};
117
126
class
Event_Queue
127
{
128
public
:
129
friend
class
Base_Signal;
130
132
Event_Queue
() {}
134
~Event_Queue
() {}
135
137
static
void
add
(
Base_Event
*e);
139
static
Ttype
now
() {
return
t;}
141
static
void
start
();
143
static
void
stop
();
145
static
void
clear
();
146
protected
:
147
//static void cancel_all(Base_Signal *s);
148
private
:
149
typedef
std::deque<Base_Event*, std::allocator< Base_Event* > >::iterator Base_Event_Iterator;
150
static
void
_run();
151
static
bool
keep_running;
152
static
Ttype
t;
// Current time.
153
static
std::priority_queue <
Base_Event
*,
154
std::deque<Base_Event*, std::allocator<Base_Event*> >,
155
Compare_Base_Event_Times
> event_queue;
// Queue for the Events.
156
};
157
163
template
<
class
ObjectType>
164
class
Event
:
public
Base_Event
165
{
166
public
:
168
Event
(ObjectType *object_pointer,
void
(ObjectType::*object_function_pointer)(),
const
Ttype
delta_time) :
Base_Event
(delta_time) {
169
po = object_pointer;
170
pm = object_function_pointer;
171
}
172
174
virtual
~Event
() {}
175
177
virtual
void
exec
(
void
) {(*po.*pm)(); }
178
179
private
:
180
void (ObjectType::*pm)();
// Pointer to class member function to be executed on event expire.
181
ObjectType *po;
// Pointer to object who's member function is to be executed on event expire.
182
};
183
189
template
<
class
ObjectType,
class
DataType>
class
Data_Event
:
public
Base_Event
190
{
191
public
:
193
Data_Event
(ObjectType *object_pointer,
194
void
(ObjectType::*object_function_pointer)(DataType data),
195
DataType data,
const
Ttype
delta_time) :
Base_Event
(delta_time) {
196
po = object_pointer;
197
pm = object_function_pointer;
198
u = data;
199
}
200
202
virtual
~Data_Event
() {}
203
205
virtual
void
exec
(
void
) {
206
(*po.*pm)(u);
207
}
208
209
private
:
210
void (ObjectType::*pm)(DataType data);
// Pointer to class member function to be executed on event expire.
211
ObjectType* po;
// Pointer to object who's member function is to be executed on event expire.
212
DataType u;
// User data.
213
};
214
216
217
}
// namespace itpp
218
219
#endif
220
221
#endif
// #ifndef EVENTS_H
itpp::Base_Event
Base Event Class.
Definition
events.h:69
itpp::Base_Event::active
bool active
ADD DOCUMENTATION HERE.
Definition
events.h:100
itpp::Base_Event::delta_t
Ttype delta_t
ADD DOCUMENTATION HERE.
Definition
events.h:96
itpp::Base_Event::cancel
void cancel()
Cancel an event.
Definition
events.h:90
itpp::Base_Event::~Base_Event
virtual ~Base_Event()
Destructor.
Definition
events.h:87
itpp::Base_Event::Base_Event
Base_Event(const Ttype delta_time)
Schedule an event at time delta_time from now.
Definition
events.h:78
itpp::Base_Event::global_id
static unsigned long long int global_id
ADD DOCUMENTATION HERE.
Definition
events.h:104
itpp::Base_Event::exec
virtual void exec(void)=0
ADD DOCUMENTATION HERE.
itpp::Base_Event::expire_t
Ttype expire_t
ADD DOCUMENTATION HERE.
Definition
events.h:98
itpp::Base_Event::id
unsigned long long int id
ADD DOCUMENTATION HERE.
Definition
events.h:102
itpp::Data_Event::exec
virtual void exec(void)
Execute (call) the assigned function with user data.
Definition
events.h:205
itpp::Data_Event::Data_Event
Data_Event(ObjectType *object_pointer, void(ObjectType::*object_function_pointer)(DataType data), DataType data, const Ttype delta_time)
Construct an Event to expire delta_time from now by calling the function (*object_pointer....
Definition
events.h:193
itpp::Data_Event::~Data_Event
virtual ~Data_Event()
Destructor.
Definition
events.h:202
itpp::Event_Queue
Event Queue class.
Definition
events.h:127
itpp::Event_Queue::~Event_Queue
~Event_Queue()
Destructor.
Definition
events.h:134
itpp::Event_Queue::start
static void start()
Start executing events.
Definition
events.cpp:67
itpp::Event_Queue::Event_Queue
Event_Queue()
Constructor.
Definition
events.h:132
itpp::Event_Queue::add
static void add(Base_Event *e)
Add event to Queue.
Definition
events.cpp:45
itpp::Event_Queue::stop
static void stop()
Stop execution of events.
Definition
events.cpp:73
itpp::Event_Queue::now
static Ttype now()
Return current time.
Definition
events.h:139
itpp::Event_Queue::clear
static void clear()
Remove all events.
Definition
events.cpp:78
itpp::Event::~Event
virtual ~Event()
Destructor.
Definition
events.h:174
itpp::Event::Event
Event(ObjectType *object_pointer, void(ObjectType::*object_function_pointer)(), const Ttype delta_time)
Construct an Event to expire delta_time from now by calling the function (*object_pointer....
Definition
events.h:168
itpp::Event::exec
virtual void exec(void)
Execute (call) the assigned function.
Definition
events.h:177
it_assert
#define it_assert(t, s)
Abort if t is not true.
Definition
itassert.h:94
itassert.h
Error handling functions - header file.
itpp
itpp namespace
Definition
itmex.h:37
itpp::Ttype
double Ttype
64-bit floating point time
Definition
events.h:54
itpp::Compare_Base_Event_Times
Compare to events, Returns true if expire time of event1 is larger than the expire time of event2.
Definition
events.h:108
itpp::Compare_Base_Event_Times::operator()
bool operator()(Base_Event *event1, Base_Event *event2)
ADD DOCUMENTATION HERE.
Definition
events.h:110
Generated by
1.17.0