00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef SST_CLOCKEVENT_H
00014 #define SST_CLOCKEVENT_H
00015
00016 #include <deque>
00017
00018 #include <sst/core/event.h>
00019 #include <sst/core/clockHandler.h>
00020
00021 #define _CLE_DBG( fmt, args...)__DBG( DBG_CLOCKEVENT, ClockEvent, fmt, ## args )
00022
00023 namespace SST {
00024
00025 class TimeConverter;
00026
00027 class ClockEvent : public Event
00028 {
00029 public:
00030
00031 typedef enum { DEFAULT, PRE, POST } Which_t;
00032 ClockEvent( TimeConverter* period );
00033
00034 bool HandlerRegister( Which_t which, ClockHandler_t* handler );
00035 bool HandlerUnregister( Which_t which, ClockHandler_t* handler,
00036 bool& empty );
00037
00038 EventHandler< ClockEvent, bool, Event* >* getFunctor() {
00039 return functor;
00040 }
00041
00042 private:
00043
00044 typedef std::deque<ClockHandler_t*> HandlerMap_t;
00045
00046 EventHandler< ClockEvent, bool, Event* >* functor;
00047
00048 Cycle_t currentCycle;
00049 TimeConverter* period;
00050 HandlerMap_t handlerMap[3];
00051
00052 bool handler( Event* e );
00053
00054 friend class boost::serialization::access;
00055 template<class Archive>
00056 void serialize(Archive & ar, const unsigned int version )
00057 {
00058 boost::serialization::base_object<Event>(*this);
00059 ar & BOOST_SERIALIZATION_NVP( currentCycle );
00060 ar & BOOST_SERIALIZATION_NVP( period );
00061 ar & BOOST_SERIALIZATION_NVP( handlerMap );
00062 ar & BOOST_SERIALIZATION_NVP( functor );
00063 }
00064
00065 template<class Archive>
00066 friend void
00067 save_construct_data(Archive & ar,
00068 const ClockEvent * t,
00069 const unsigned int file_version)
00070 {
00071 TimeConverter* period = t->period;
00072 ar << BOOST_SERIALIZATION_NVP( period );
00073 }
00074
00075 template<class Archive>
00076 friend void
00077 load_construct_data(Archive & ar,
00078 ClockEvent * t,
00079 const unsigned int file_version)
00080 {
00081 TimeConverter* period;
00082 ar >> BOOST_SERIALIZATION_NVP( period );
00083 ::new(t)ClockEvent( period );
00084 }
00085 };
00086
00087 }
00088
00089 #endif // SST_CLOCKEVENT_H