adevs
Main Page
Namespaces
Classes
Files
File List
include
adevs_abstract_simulator.h
1
31
#ifndef __adevs_abstract_simulator_h_
32
#define __adevs_abstract_simulator_h_
33
#include "adevs_models.h"
34
#include "adevs_event_listener.h"
35
#include "adevs_bag.h"
36
37
namespace
adevs
38
{
39
45
template
<
class
X,
class
T =
double
>
class
AbstractSimulator
46
{
47
public
:
48
AbstractSimulator
(){}
53
void
addEventListener
(
EventListener<X,T>
* l)
54
{
55
listeners.insert(l);
56
}
58
void
removeEventListener
(
EventListener<X,T>
* l)
59
{
60
listeners.erase(l);
61
}
63
virtual
T
nextEventTime
() = 0;
65
virtual
void
execUntil
(T tend) = 0;
67
virtual
~AbstractSimulator
(){}
69
void
notify_output_listeners
(
Devs<X,T>
* model,
const
X& value, T t);
71
void
notify_state_listeners
(
Atomic<X,T>
* model, T t);
72
private
:
74
Bag<EventListener<X,T>
*> listeners;
75
76
};
77
78
template
<
class
X,
class
T>
79
void
AbstractSimulator<X,T>::notify_output_listeners
(
Devs<X,T>
* model,
const
X& value, T t)
80
{
81
Event<X,T>
event(model,value);
82
typename
Bag<EventListener<X,T>
*>::iterator iter;
83
for
(iter = listeners.
begin
(); iter != listeners.
end
(); iter++)
84
{
85
(*iter)->outputEvent(event,t);
86
}
87
}
88
89
template
<
class
X,
class
T>
90
void
AbstractSimulator<X,T>::notify_state_listeners
(
Atomic<X,T>
* model, T t)
91
{
92
typename
Bag<EventListener<X,T>
*>::iterator iter;
93
for
(iter = listeners.
begin
(); iter != listeners.
end
(); iter++)
94
{
95
(*iter)->stateChange(model,t);
96
}
97
}
98
99
}
// end of namespace
100
101
#endif
Generated by
1.8.3.1