00001 // $Id: FragmentStore.h,v 1.11 2011/08/31 20:11:59 wmtan Exp $ 00003 00004 #ifndef EventFilter_StorageManager_FragmentStore_h 00005 #define EventFilter_StorageManager_FragmentStore_h 00006 00007 #include <map> 00008 00009 #include "EventFilter/StorageManager/interface/FragKey.h" 00010 #include "EventFilter/StorageManager/interface/I2OChain.h" 00011 #include "EventFilter/StorageManager/interface/Utils.h" 00012 00013 00014 namespace stor { 00015 00026 class FragmentStore 00027 { 00028 public: 00029 00030 explicit FragmentStore(size_t maxMemoryUsageMB); 00031 00038 const bool addFragment(I2OChain&); 00039 00040 00045 void addToStaleEventTimes(const utils::Duration_t); 00046 00047 00052 void resetStaleEventTimes(); 00053 00054 00061 const bool getStaleEvent(I2OChain&, utils::Duration_t timeout); 00062 00063 00067 inline void clear() 00068 { store_.clear(); memoryUsed_ = 0; } 00069 00070 00074 inline bool empty() const 00075 { return store_.empty(); } 00076 00077 00081 inline bool full() const 00082 { return (memoryUsed_ >= maxMemoryUsage_); } 00083 00084 00088 inline unsigned int size() const 00089 { return store_.size(); } 00090 00091 00095 inline size_t memoryUsed() const 00096 { return memoryUsed_; } 00097 00098 00099 private: 00100 00101 //Prevent copying of the FragmentStore 00102 FragmentStore(FragmentStore const&); 00103 FragmentStore& operator=(FragmentStore const&); 00104 00105 typedef std::map<FragKey, I2OChain> fragmentMap; 00106 fragmentMap store_; 00107 00108 size_t memoryUsed_; 00109 const size_t maxMemoryUsage_; 00110 }; 00111 00112 } // namespace stor 00113 00114 #endif // EventFilter_StorageManager_FragmentStore_h 00115 00116