|
@@ -43,6 +43,14 @@ class Dynamics
|
|
|
typedef pdevs::Simulator < Time, Dyn, Parameters > Simulator;
|
|
|
|
|
|
public:
|
|
|
+ struct Observable
|
|
|
+ {
|
|
|
+ unsigned int index;
|
|
|
+ std::string name;
|
|
|
+ };
|
|
|
+
|
|
|
+ typedef std::map < unsigned int, std::string > Observables;
|
|
|
+
|
|
|
Dynamics(const std::string& name,
|
|
|
const Context < Time, Dyn, Parameters >& context) :
|
|
|
_name(name), _simulator(context.simulator())
|
|
@@ -94,6 +102,26 @@ public:
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ void observable(Observable observable)
|
|
|
+ {
|
|
|
+ _observables[observable.index] = observable.name;
|
|
|
+ }
|
|
|
+
|
|
|
+ void observables(std::initializer_list < Observable > list)
|
|
|
+ {
|
|
|
+ for (typename std::initializer_list < Observable >::iterator it =
|
|
|
+ list.begin(); it != list.end(); ++it) {
|
|
|
+ _observables[it->index] = it->name;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ virtual std::string observable_name(unsigned int observable_index) const
|
|
|
+ {
|
|
|
+ assert(_observables.find(observable_index) != _observables.end());
|
|
|
+
|
|
|
+ return _observables.find(observable_index)->second;
|
|
|
+ }
|
|
|
+
|
|
|
void output_port(common::Port p)
|
|
|
{
|
|
|
_simulator->add_out_port(p);
|
|
@@ -110,6 +138,7 @@ public:
|
|
|
private:
|
|
|
std::string _name;
|
|
|
Simulator* _simulator;
|
|
|
+ Observables _observables;
|
|
|
};
|
|
|
|
|
|
} } // namespace artis pdevs
|