00001 #ifndef BASE_EVENT_H 00002 #define BASE_EVENT_H 00003 00004 00005 #include "base/SubEvent.h" 00006 00007 #include <map> 00008 #include <string> 00009 00010 namespace base { 00011 00016 typedef std::map<std::string, base::SubEvent*> EventsMap; 00017 00018 class Event { 00019 protected: 00020 EventsMap fMap; 00021 00022 GlobalTime_t fTriggerTm; 00023 00024 public: 00025 Event() : fMap(), fTriggerTm(0.) {} 00026 00027 virtual ~Event() 00028 { 00029 DestroyEvents(); 00030 } 00031 00032 void SetTriggerTime(GlobalTime_t tm) { fTriggerTm = tm; } 00033 00034 GlobalTime_t GetTriggerTime() const { return fTriggerTm; } 00035 00036 void DestroyEvents() 00037 { 00038 for (EventsMap::iterator iter = fMap.begin(); iter != fMap.end(); iter++) 00039 delete iter->second; 00040 fMap.clear(); 00041 } 00042 00043 void ResetEvents() 00044 { 00045 for (EventsMap::iterator iter = fMap.begin(); iter != fMap.end(); iter++) 00046 if (iter->second) 00047 iter->second->Reset(); 00048 00049 fTriggerTm = 0; 00050 } 00051 00052 void AddSubEvent(const std::string& name, base::SubEvent* ev) 00053 { 00054 EventsMap::iterator iter = fMap.find(name); 00055 if (iter != fMap.end()) delete iter->second; 00056 fMap[name] = ev; 00057 } 00058 00059 base::SubEvent* GetSubEvent(const std::string& name) const 00060 { 00061 EventsMap::const_iterator iter = fMap.find(name); 00062 return (iter != fMap.end()) ? iter->second : 0; 00063 } 00064 00065 }; 00066 00067 } 00068 00069 00070 00071 #endif