Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef CSCDQM_Cache_H
00021 #define CSCDQM_Cache_H
00022
00023 #include <map>
00024 #include <boost/multi_index_container.hpp>
00025 #include <boost/multi_index/member.hpp>
00026 #include <boost/multi_index/composite_key.hpp>
00027 #include <boost/multi_index/ordered_index.hpp>
00028 #include "boost/tuple/tuple.hpp"
00029
00030 #include <boost/shared_ptr.hpp>
00031
00032 #include "DQM/CSCMonitorModule/interface/CSCDQM_Logger.h"
00033 #include "DQM/CSCMonitorModule/interface/CSCDQM_HistoDef.h"
00034 #include "DQM/CSCMonitorModule/interface/CSCDQM_MonitorObject.h"
00035 #include "DQM/CSCMonitorModule/interface/CSCDQM_Utility.h"
00036
00037 namespace cscdqm {
00038
00040 struct CSCHistoKeyType {
00041 HistoId id;
00042 HwId addId;
00043 const MonitorObject* mo;
00044 CSCHistoKeyType(const HistoId& id_, const HwId& addId_, const MonitorObject* mo_) : id(id_), addId(addId_), mo(mo_) { }
00045 };
00046
00048 typedef boost::multi_index_container<
00049 CSCHistoKeyType,
00050 boost::multi_index::indexed_by<
00051 boost::multi_index::ordered_unique<
00052 boost::multi_index::composite_key<
00053 CSCHistoKeyType,
00054 boost::multi_index::member<CSCHistoKeyType, HistoId, &CSCHistoKeyType::id>,
00055 boost::multi_index::member<CSCHistoKeyType, HwId, &CSCHistoKeyType::addId>
00056 >
00057 >
00058 >
00059 > CSCHistoMapType;
00060
00062 struct CSCKeyType {
00063 HwId crateId;
00064 HwId dmbId;
00065 CSCHistoMapType mos;
00066 CSCKeyType(const HwId& crateId_, const HwId& dmbId_) : crateId(crateId_), dmbId(dmbId_) { }
00067 };
00068
00070 typedef boost::multi_index_container<
00071 CSCKeyType,
00072 boost::multi_index::indexed_by<
00073 boost::multi_index::ordered_unique<
00074 boost::multi_index::composite_key<
00075 CSCKeyType,
00076 boost::multi_index::member<CSCKeyType, HwId, &CSCKeyType::crateId>,
00077 boost::multi_index::member<CSCKeyType, HwId, &CSCKeyType::dmbId>
00078 >
00079 >
00080 >
00081 > CSCMapType;
00082
00084 typedef std::map<HwId, MonitorObject**> DDUMapType;
00085
00087 struct LookupKeyType {
00088 HistoDef histo;
00089 std::string path;
00090 MonitorObject* mo;
00091 LookupKeyType(const HistoDef& histo_, MonitorObject*& mo_) : histo(histo_), mo(mo_) {
00092 path = histo.getPath();
00093 }
00094 };
00095
00097 typedef boost::multi_index_container<
00098 LookupKeyType,
00099 boost::multi_index::indexed_by<
00100 boost::multi_index::ordered_unique<boost::multi_index::member<LookupKeyType, HistoDef, &LookupKeyType::histo> >,
00101 boost::multi_index::ordered_non_unique<boost::multi_index::member<LookupKeyType, std::string, &LookupKeyType::path> >
00102 >
00103 > LookupMapType;
00104
00109 class Cache {
00110
00111 private:
00112
00114 MonitorObject* data[h::namesSize];
00115
00117 DDUMapType dduData;
00119 DDUMapType::const_iterator dduPointer;
00121 HwId dduPointerValue;
00122
00124 CSCMapType cscData;
00126 CSCMapType::const_iterator cscPointer;
00127
00129 LookupMapType lookupData;
00130
00131 public:
00132
00134 Cache() {
00135
00137 for (unsigned int i = 0; i < h::namesSize; i++) data[i] = 0;
00138
00140 dduPointer = dduData.end();
00141 dduPointerValue = 0;
00142 cscPointer = cscData.end();
00143 }
00144
00146 ~Cache() {
00148 while (dduData.begin() != dduData.end()) {
00149 if (dduData.begin()->second) {
00150 delete [] dduData.begin()->second;
00151 }
00152 dduData.erase(dduData.begin());
00153 }
00154 }
00155
00158 const bool get(const HistoDef& histo, MonitorObject*& mo);
00159 const bool getEMU(const HistoId& id, MonitorObject*& mo);
00160 const bool getDDU(const HistoId& id, const HwId& dduId, MonitorObject*& mo);
00161 const bool getCSC(const HistoId& id, const HwId& crateId, const HwId& dmbId, const HwId& addId, MonitorObject*& mo);
00162 const bool getPar(const HistoId& id, MonitorObject*& mo);
00163 void put(const HistoDef& histo, MonitorObject* mo);
00164
00167 const bool nextBookedDDU(unsigned int& n, unsigned int& dduId) const;
00168 const bool nextBookedCSC(unsigned int& n, unsigned int& crateId, unsigned int& dmbId) const;
00169 const bool isBookedCSC(const HwId& crateId, const HwId& dmbId) const;
00170 const bool isBookedDDU(const HwId& dduId) const;
00171
00172 };
00173
00174 }
00175
00176 #endif