00001 #ifndef EvSimNetwork_H_
00002 #define EvSimNetwork_H_
00003
00004 #include "EvSimObject.h"
00005 #include "RoutingDelayMap.h"
00006 #include "EventTargetGroupPool.h"
00007 #include "UpdateLinksMap.h"
00008 #include "EvSimObjectPool.h"
00009 #include "SimParameters.h"
00010
00011
00012 #include <string>
00013 using std::string;
00014
00015 class EvSimEngine;
00016
00034
00035
00038 class EvSimNetwork {
00039
00040 public:
00041 EvSimNetwork(SimParameters sim_params = SimParameters());
00042
00043 virtual ~EvSimNetwork();
00044
00046
00050 EvSimObject::ID create(const EvSimObjectFactory & obj_factory);
00051
00053 EvSimObject::ID add(EvSimObject * obj);
00054
00056 EvSimObject::IDVector create(const EvSimObjectFactory & obj_factory, unsigned n);
00057
00065 void connect(EvSimObject::ID src, port_id_t src_port, EvSimObject::ID dest, port_id_t dest_port, Time delay = 0);
00066
00068 void causalUpdateLink(EvSimObject::ID src, EvSimObject::ID dest, update_id_t update_id = 0);
00069
00070 void mount(EvSimObject::ID obj_id, EvSimObject::ID mountpoint);
00071
00072 EvSimObject::ID mount(const EvSimObjectFactory &obj_factory, EvSimObject::ID mountpoint);
00073
00074 EvSimObject::ID record(EvSimObject::ID id, const string &var_name);
00075 EvSimObject::ID record(EvSimObject::ID id, const string &var_name, EvSimObject::ID clock_id);
00076
00077 EvSimObject::ID record(EvSimObject::ID id, port_id_t port_id = 0);
00078
00079 EvSimObject::IDVector record(EvSimObject::IDVector id_vec, const string &var_name);
00080 EvSimObject::IDVector record(EvSimObject::IDVector id_vec, const string &var_name, EvSimObject::ID clock_id);
00081
00082 EvSimObject::IDVector record(EvSimObject::IDVector id_vec, port_id_t port_id = 0);
00083
00084 void setParams(SimParameters sim_params);
00085
00086 EvSimObject * getObject(EvSimObject::ID oid) const;
00087
00088 Time getCurrentSimTime();
00089
00090 void advance(Time sim_time);
00091
00092 void simulate(Time sim_time);
00093
00094 void init();
00095
00096 void reset();
00097
00098
00099 void setVariables(EvSimObject::IDVector id_vec, const string &var_name, const std::vector<double> &values );
00100
00101 std::vector<double> getVariables(EvSimObject::IDVector id_vec, const string &var_name ) const;
00102
00103 void connect(EvSimObject::IDVector src, port_id_t src_port, EvSimObject::IDVector dest, port_id_t dest_port, Time delay = 0);
00104
00105 protected:
00106 friend class EvSimEngine;
00107
00108 void registerOutPorts(EvSimObject *obj);
00109
00110 EvSimEngine *simengine;
00111
00112 UpdateLinksMap upd_links_map;
00113
00114 EvSimObjectPool obj_pool;
00115
00116 RoutingDelayMap delay_map;
00117
00118 EventTargetGroupPool etg_pool;
00119
00120 EvSimObject::ID default_sim_clock_id;
00121
00122 SimParameters sim_params;
00123
00124 bool isInitialized;
00125 bool isReset;
00126 };
00127
00128
00129 #endif