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 #include "CSCDQM_Cache.h"
00020
00021 namespace cscdqm {
00022
00029 const bool Cache::get(const HistoDef& histo, MonitorObject*& mo) {
00030
00031 if (typeid(histo) == EMUHistoDefT) {
00032 return getEMU(histo.getId(), mo);
00033 } else
00034 if (typeid(histo) == FEDHistoDefT) {
00035 return getFED(histo.getId(), histo.getFEDId(), mo);
00036 } else
00037 if (typeid(histo) == DDUHistoDefT) {
00038 return getDDU(histo.getId(), histo.getDDUId(), mo);
00039 } else
00040 if (typeid(histo) == CSCHistoDefT) {
00041 return getCSC(histo.getId(), histo.getCrateId(), histo.getDMBId(), histo.getAddId(), mo);
00042 } else
00043 if (typeid(histo) == ParHistoDefT) {
00044 return getPar(histo.getId(), mo);
00045 }
00046
00047 return false;
00048 }
00049
00056 const bool Cache::getEMU(const HistoId& id, MonitorObject*& mo) {
00057 if (data[id]) {
00058 mo = data[id];
00059 return true;
00060 }
00061 return false;
00062 }
00063
00071 const bool Cache::getFED(const HistoId& id, const HwId& fedId, MonitorObject*& mo) {
00072
00074 if (fedPointerValue != fedId) {
00075 fedPointer = fedData.find(fedId);
00076 if (fedPointer == fedData.end()) {
00077 fedPointerValue = 0;
00078 return false;
00079 }
00080 fedPointerValue = fedId;
00081 }
00082
00084 if (fedPointer->second[id]) {
00085 mo = fedPointer->second[id];
00086 return true;
00087 }
00088 return false;
00089
00090 }
00091
00092
00100 const bool Cache::getDDU(const HistoId& id, const HwId& dduId, MonitorObject*& mo) {
00101
00103 if (dduPointerValue != dduId) {
00104 dduPointer = dduData.find(dduId);
00105 if (dduPointer == dduData.end()) {
00106 dduPointerValue = 0;
00107 return false;
00108 }
00109 dduPointerValue = dduId;
00110 }
00111
00113 if (dduPointer->second[id]) {
00114 mo = dduPointer->second[id];
00115 return true;
00116 }
00117 return false;
00118
00119 }
00120
00129 const bool Cache::getCSC(const HistoId& id, const HwId& crateId, const HwId& dmbId, const HwId& addId, MonitorObject*& mo) {
00130
00132 if (cscPointer == cscData.end() || cscPointer->crateId != crateId || cscPointer->dmbId != dmbId) {
00133 cscPointer = cscData.find(boost::make_tuple(crateId, dmbId));
00134 }
00135
00137 if (cscPointer != cscData.end()) {
00138 CSCHistoMapType::const_iterator hit = cscPointer->mos.find(boost::make_tuple(id, addId));
00139 if (hit != cscPointer->mos.end()) {
00140 mo = const_cast<MonitorObject*>(hit->mo);
00141 return true;
00142 }
00143 }
00144 return false;
00145 }
00146
00153 const bool Cache::getPar(const HistoId& id, MonitorObject*& mo) {
00154 if (data[id]) {
00155 mo = data[id];
00156 return true;
00157 }
00158 return false;
00159 }
00160
00167 void Cache::put(const HistoDef& histo, MonitorObject* mo) {
00168
00169 HistoId id = histo.getId();
00170
00172 if (typeid(histo) == EMUHistoDefT) {
00173 data[id] = mo;
00174 } else
00175
00177 if (typeid(histo) == FEDHistoDefT) {
00178
00179 HwId fedId = histo.getFEDId();
00180
00181 if (fedPointerValue != fedId) {
00182 fedPointer = fedData.find(fedId);
00183 }
00184
00185 if (fedPointer == fedData.end()) {
00186 MonitorObject** mos = new MonitorObject*[h::namesSize];
00187 for (unsigned int i = 0; i < h::namesSize; i++) mos[i] = 0;
00188 fedPointer = fedData.insert(fedData.end(), std::make_pair(fedId, mos));
00189 }
00190
00191 fedPointer->second[id] = mo;
00192 fedPointerValue = fedId;
00193
00194 } else
00195
00197 if (typeid(histo) == DDUHistoDefT) {
00198
00199 HwId dduId = histo.getDDUId();
00200
00201 if (dduPointerValue != dduId) {
00202 dduPointer = dduData.find(dduId);
00203 }
00204
00205 if (dduPointer == dduData.end()) {
00206 MonitorObject** mos = new MonitorObject*[h::namesSize];
00207 for (unsigned int i = 0; i < h::namesSize; i++) mos[i] = 0;
00208 dduPointer = dduData.insert(dduData.end(), std::make_pair(dduId, mos));
00209 }
00210
00211 dduPointer->second[id] = mo;
00212 dduPointerValue = dduId;
00213
00214 } else
00215
00217 if (typeid(histo) == CSCHistoDefT) {
00218
00219 HwId crateId = histo.getCrateId();
00220 HwId dmbId = histo.getDMBId();
00221 HwId addId = histo.getAddId();
00222
00223 CSCHistoKeyType histoKey(id, addId, mo);
00224
00225 if (cscPointer == cscData.end() || cscPointer->crateId != crateId || cscPointer->dmbId != dmbId) {
00226 cscPointer = cscData.find(boost::make_tuple(crateId, dmbId));
00227 }
00228
00229 if (cscPointer == cscData.end()) {
00230 CSCKeyType cscKey(crateId, dmbId);
00231 cscPointer = cscData.insert(cscData.end(), cscKey);
00232 }
00233 CSCHistoMapType* mos = const_cast<CSCHistoMapType*>(&cscPointer->mos);
00234 mos->insert(histoKey);
00235
00236 } else
00237
00239 if (typeid(histo) == ParHistoDefT) {
00240 data[id] = mo;
00241 }
00242
00243
00245 if (mo) {
00246 lookupData.insert(lookupData.end(), LookupKeyType(histo, mo));
00247 }
00248
00249 }
00250
00258 const bool Cache::nextBookedCSC(unsigned int& n, unsigned int& crateId, unsigned int& dmbId) const {
00259 if (n < cscData.size()) {
00260 CSCMapType::const_iterator iter = cscData.begin();
00261 for (unsigned int i = n; i > 0; i--) iter++;
00262 crateId = iter->crateId;
00263 dmbId = iter->dmbId;
00264 n++;
00265 return true;
00266 }
00267 return false;
00268 }
00269
00276 const bool Cache::nextBookedFED(unsigned int& n, unsigned int& fedId) const {
00277 if (n < fedData.size()) {
00278 FEDMapType::const_iterator iter = fedData.begin();
00279 for (unsigned int i = n; i > 0; i--) iter++;
00280 fedId = iter->first;
00281 n++;
00282 return true;
00283 }
00284 return false;
00285 }
00286
00287
00294 const bool Cache::nextBookedDDU(unsigned int& n, unsigned int& dduId) const {
00295 if (n < dduData.size()) {
00296 DDUMapType::const_iterator iter = dduData.begin();
00297 for (unsigned int i = n; i > 0; i--) iter++;
00298 dduId = iter->first;
00299 n++;
00300 return true;
00301 }
00302 return false;
00303 }
00304
00311 const bool Cache::isBookedCSC(const HwId& crateId, const HwId& dmbId) const {
00312 CSCMapType::const_iterator it = cscData.find(boost::make_tuple(crateId, dmbId));
00313 if (it != cscData.end()) {
00314 return true;
00315 }
00316 return false;
00317 }
00318
00324 const bool Cache::isBookedFED(const HwId& fedId) const {
00325 FEDMapType::const_iterator iter = fedData.find(fedId);
00326 return (iter != fedData.end());
00327 }
00328
00334 const bool Cache::isBookedDDU(const HwId& dduId) const {
00335 DDUMapType::const_iterator iter = dduData.find(dduId);
00336 return (iter != dduData.end());
00337 }
00338
00339 }