IT++ Logo
events.h
Go to the documentation of this file.
1
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
47namespace itpp
48{
49
51
52
53// typedef long double Ttype; //!< 128-bit floating point time
54typedef double Ttype;
55// typedef long unsigned int Ttype; //!< 64-bit unsigned integer time
56
57class Event_Queue;
58class Base_Event;
59class Base_Signal;
60
69{
70public:
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;
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
92protected:
94 virtual void exec(void) = 0;
100 bool active;
102 unsigned long long int id;
104 static unsigned long long int global_id;
105};
106
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
127{
128public:
129 friend class Base_Signal;
130
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();
146protected:
147 //static void cancel_all(Base_Signal *s);
148private:
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
163template <class ObjectType>
164class Event : public Base_Event
165{
166public:
172
174 virtual ~Event() {}
175
177 virtual void exec(void) {(*po.*pm)(); }
178
179private:
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
189template <class ObjectType, class DataType> class Data_Event : public Base_Event
190{
191public:
200
202 virtual ~Data_Event() {}
203
205 virtual void exec(void) {
206 (*po.*pm)(u);
207 }
208
209private:
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
General array class.
Definition array.h:105
Base Event Class.
Definition events.h:69
bool active
ADD DOCUMENTATION HERE.
Definition events.h:100
Ttype delta_t
ADD DOCUMENTATION HERE.
Definition events.h:96
void cancel()
Cancel an event.
Definition events.h:90
virtual ~Base_Event()
Destructor.
Definition events.h:87
Base_Event(const Ttype delta_time)
Schedule an event at time delta_time from now.
Definition events.h:78
static unsigned long long int global_id
ADD DOCUMENTATION HERE.
Definition events.h:104
virtual void exec(void)=0
ADD DOCUMENTATION HERE.
Ttype expire_t
ADD DOCUMENTATION HERE.
Definition events.h:98
unsigned long long int id
ADD DOCUMENTATION HERE.
Definition events.h:102
An Event class that executes a function with some data as input when the event expires.
Definition events.h:190
virtual void exec(void)
Execute (call) the assigned function with user data.
Definition events.h:205
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
virtual ~Data_Event()
Destructor.
Definition events.h:202
Event Queue class.
Definition events.h:127
~Event_Queue()
Destructor.
Definition events.h:134
static void start()
Start executing events.
Definition events.cpp:67
Event_Queue()
Constructor.
Definition events.h:132
static void add(Base_Event *e)
Add event to Queue.
Definition events.cpp:45
static void stop()
Stop execution of events.
Definition events.cpp:73
static Ttype now()
Return current time.
Definition events.h:139
static void clear()
Remove all events.
Definition events.cpp:78
An Event class that executes a function when the event expires.
Definition events.h:165
virtual ~Event()
Destructor.
Definition events.h:174
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
virtual void exec(void)
Execute (call) the assigned function.
Definition events.h:177
#define it_assert(t, s)
Abort if t is not true.
Definition itassert.h:94
Error handling functions - header file.
itpp namespace
Definition itmex.h:37
double Ttype
64-bit floating point time
Definition events.h:54
Compare to events, Returns true if expire time of event1 is larger than the expire time of event2.
Definition events.h:108
bool operator()(Base_Event *event1, Base_Event *event2)
ADD DOCUMENTATION HERE.
Definition events.h:110

Generated on Tue Mar 26 2024 19:08:31 for IT++ by Doxygen 1.9.8