• Main Page
  • Classes
  • Files
  • File List

EvSimEngine.h

00001 #ifndef EVSIMENGINE_H_
00002 #define EVSIMENGINE_H_
00003 
00004 #include "EvSimNetwork.h"
00005 #include "globals.h"
00006 #include "EvSimObjectPool.h"
00007 #include "EvSimObject.h"
00008 #include "PropagatedUpdateList.h"
00009 #include "ProjectedEventsHeapBuffer.h"
00010 #include "ScheduledEventsQueue.h"
00011 #include "RoutingDelayMap.h"
00012 #include "RandomEngine.h"
00013 #include "SimContext.h"
00014 
00015 
00017 class EvSimEngine {
00018 
00019 public:
00020         EvSimEngine(EvSimNetwork &net, EvSimObjectPool &obj_pool, RoutingDelayMap &delay_map,
00021                         EventTargetGroupPool &etg_pool, UpdateLinksMap &upd_links_map) :
00022                                 obj_pool(obj_pool), delay_map(delay_map), etg_pool(etg_pool),
00023                                 upd_list(etg_pool, upd_links_map, obj_pool)
00024         {
00025                 sim_context = SimContext(&net, this, &proj_events_buf);
00026                 sim_random_eng.seed(net.sim_params.rnd_seed);
00027         };
00028 
00029         virtual ~EvSimEngine();
00030 
00031         void scheduleEvent( global_out_port_id_t port_id, Time t);
00032 
00033         void init();
00034 
00035         void reset();
00036 
00037         void simulate(Time t);
00038 
00039         void advance(Time t);
00040 
00041         void setRNDSeed(unsigned seed) {
00042                 sim_random_eng.seed(seed);
00043         }
00044 
00045         void registerProjectedOutputPorts(EvSimObject *obj);
00046 
00047         void deliverScheduledEvent(event_target_group_id_t etg, Time time);
00048 
00049 protected:
00050 
00051         friend class EvSimNetwork;
00052 
00053         typedef enum { evProjected, evScheduled }  EventType;
00054 
00055         Time last_event_time;
00056         Time curr_sim_clock;
00057 
00058         EvSimObjectPool &obj_pool;
00059 
00060         ProjectedEventsHeapBuffer proj_events_buf;
00061 
00062         ScheduledEventsQueue scheduled_events_queue;
00063 
00064         RoutingDelayMap & delay_map;
00065 
00066         EventTargetGroupPool & etg_pool;
00067 
00068         PropagatedUpdateList upd_list;
00069 
00070         SimContext sim_context;
00071 
00072         void processEmittedEvent(global_out_port_id_t out_port_id, Time time);
00073 
00074         MersenneTwister19937 sim_random_eng;
00075 };
00076 
00077 inline void EvSimEngine::scheduleEvent( global_out_port_id_t port_id, Time t)
00078 {
00079         processEmittedEvent(port_id, t);
00080 }
00081 
00082 
00083 extern RandomEngine * global_sim_random_eng;
00084 
00085 #endif /* EVSIMENGINE_H_ */

Generated on Wed Sep 18 2013 11:25:40 for NEVESIM by  doxygen 1.7.1