00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef CSCDQM_Cache_H
00020 #define CSCDQM_Cache_H
00021
00022 #include <map>
00023 #include <boost/multi_index_container.hpp>
00024 #include <boost/multi_index/member.hpp>
00025 #include <boost/multi_index/composite_key.hpp>
00026 #include <boost/multi_index/ordered_index.hpp>
00027 #include "boost/tuple/tuple.hpp"
00028
00029 #include <boost/shared_ptr.hpp>
00030
00031 #include "DQM/CSCMonitorModule/interface/CSCDQM_Logger.h"
00032 #include "DQM/CSCMonitorModule/interface/CSCDQM_HistoDef.h"
00033 #include "DQM/CSCMonitorModule/interface/CSCDQM_MonitorObject.h"
00034 #include "DQM/CSCMonitorModule/interface/CSCDQM_Utility.h"
00035
00036 namespace cscdqm {
00037
00038 typedef struct CSCHistoKeyType {
00039 HistoId id;
00040 HwId addId;
00041 const MonitorObject* mo;
00042 CSCHistoKeyType(const HistoId& id_, const HwId& addId_, const MonitorObject* mo_) : id(id_), addId(addId_), mo(mo_) { }
00043 };
00044
00045 typedef boost::multi_index_container<
00046 CSCHistoKeyType,
00047 boost::multi_index::indexed_by<
00048 boost::multi_index::ordered_unique<
00049 boost::multi_index::composite_key<
00050 CSCHistoKeyType,
00051 boost::multi_index::member<CSCHistoKeyType, HistoId, &CSCHistoKeyType::id>,
00052 boost::multi_index::member<CSCHistoKeyType, HwId, &CSCHistoKeyType::addId>
00053 >
00054 >
00055 >
00056 > CSCHistoMapType;
00057
00058 typedef struct CSCKeyType {
00059 HwId crateId;
00060 HwId dmbId;
00061 CSCHistoMapType mos;
00062 CSCKeyType(const HwId& crateId_, const HwId& dmbId_) : crateId(crateId_), dmbId(dmbId_) { }
00063 };
00064
00065 typedef boost::multi_index_container<
00066 CSCKeyType,
00067 boost::multi_index::indexed_by<
00068 boost::multi_index::ordered_unique<
00069 boost::multi_index::composite_key<
00070 CSCKeyType,
00071 boost::multi_index::member<CSCKeyType, HwId, &CSCKeyType::crateId>,
00072 boost::multi_index::member<CSCKeyType, HwId, &CSCKeyType::dmbId>
00073 >
00074 >
00075 >
00076 > CSCMapType;
00077
00078 typedef std::map<HwId, MonitorObject**> DDUMapType;
00079
00084 class Cache {
00085
00086 private:
00087
00088 MonitorObject* data[h::namesSize];
00089
00090 DDUMapType dduData;
00091 DDUMapType::const_iterator dduPointer;
00092 HwId dduPointerValue;
00093
00094 CSCMapType cscData;
00095 CSCMapType::const_iterator cscPointer;
00096
00097 public:
00098
00099 Cache() {
00100 for (unsigned int i = 0; i < h::namesSize; i++) data[i] = 0;
00101 dduPointer = dduData.end();
00102 dduPointerValue = 0;
00103 cscPointer = cscData.end();
00104 }
00105
00106 ~Cache() {
00107 DDUMapType::iterator it;
00108 while (dduData.size() > 0) {
00109 it = dduData.begin();
00110 if (it->second) delete [] it->second;
00111 dduData.erase(it);
00112 }
00113 }
00114
00115 const bool get(const HistoDef& histo, MonitorObject*& mo);
00116 const bool getEMU(const HistoId& id, MonitorObject*& mo);
00117 const bool getDDU(const HistoId& id, const HwId& dduId, MonitorObject*& mo);
00118 const bool getCSC(const HistoId& id, const HwId& crateId, const HwId& dmbId, const HwId& addId, MonitorObject*& mo);
00119 const bool getPar(const HistoId& id, MonitorObject*& mo);
00120 void put(const HistoDef& histo, MonitorObject* mo);
00121
00122 const bool nextBookedDDU(unsigned int& n, unsigned int& dduId) const;
00123 const bool nextBookedCSC(unsigned int& n, unsigned int& crateId, unsigned int& dmbId) const;
00124 const bool isBookedCSC(const HwId& crateId, const HwId& dmbId) const;
00125 const bool isBookedDDU(const HwId& dduId) const;
00126
00127 };
00128
00129 }
00130
00131 #endif