CMS 3D CMS Logo

CSCDQM_Cache.h

Go to the documentation of this file.
00001 /*
00002  * =====================================================================================
00003  *
00004  *       Filename:  CSCDQM_Cache.h
00005  *
00006  *    Description:  Efficiently manages lists of MonitorObject 's 
00007  *
00008  *        Version:  1.0
00009  *        Created:  11/27/2008 10:05:00 AM
00010  *       Revision:  none
00011  *       Compiler:  gcc
00012  *
00013  *         Author:  Valdas Rapsevicius (VR), valdas.rapsevicius@cern.ch
00014  *        Company:  CERN, CH
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

Generated on Tue Jun 9 17:32:32 2009 for CMSSW by  doxygen 1.5.4