00001 // $Id: FragmentStore.h,v 1.10 2011/03/30 15:16:48 mommsen Exp $ 00003 00004 #ifndef EventFilter_StorageManager_FragmentStore_h 00005 #define EventFilter_StorageManager_FragmentStore_h 00006 00007 #include <map> 00008 00009 #include "IOPool/Streamer/interface/HLTInfo.h" 00010 00011 #include "EventFilter/StorageManager/interface/I2OChain.h" 00012 #include "EventFilter/StorageManager/interface/Utils.h" 00013 00014 00015 namespace stor { 00016 00027 class FragmentStore 00028 { 00029 public: 00030 00031 explicit FragmentStore(size_t maxMemoryUsageMB); 00032 00039 const bool addFragment(I2OChain&); 00040 00041 00046 void addToStaleEventTimes(const utils::Duration_t); 00047 00048 00053 void resetStaleEventTimes(); 00054 00055 00062 const bool getStaleEvent(I2OChain&, utils::Duration_t timeout); 00063 00064 00068 inline void clear() 00069 { store_.clear(); memoryUsed_ = 0; } 00070 00071 00075 inline bool empty() const 00076 { return store_.empty(); } 00077 00078 00082 inline bool full() const 00083 { return (memoryUsed_ >= maxMemoryUsage_); } 00084 00085 00089 inline unsigned int size() const 00090 { return store_.size(); } 00091 00092 00096 inline size_t memoryUsed() const 00097 { return memoryUsed_; } 00098 00099 00100 private: 00101 00102 //Prevent copying of the FragmentStore 00103 FragmentStore(FragmentStore const&); 00104 FragmentStore& operator=(FragmentStore const&); 00105 00106 typedef std::map<FragKey, I2OChain> fragmentMap; 00107 fragmentMap store_; 00108 00109 size_t memoryUsed_; 00110 const size_t maxMemoryUsage_; 00111 }; 00112 00113 } // namespace stor 00114 00115 #endif // EventFilter_StorageManager_FragmentStore_h 00116 00117