ATLAS Offline Software
Loading...
Searching...
No Matches
IOVPayloadContainerCnv_p1.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
9#include "CoralBase/Date.h"
10#include "CoralBase/TimeStamp.h"
11
14
15
16void
18 IOVPayloadContainer* transObj, MsgStream &log)
19{
20
21 if (log.level() <= MSG::DEBUG) {
22 log << MSG::DEBUG << "IOVPayloadContainerCnv_p1::persToTrans - entering "
23 << endmsg;
24 }
25
26 for( auto & offset : m_objIndexOffset ) {
27 offset = 1; // this is just the initial value before first use
28 }
29
30 IOVPayloadContainer::payloadVec& payloadVec = transObj->m_payloadVec;
31
32 // Make sure transient container is empty - may be reused
33 payloadVec.clear();
34
35 // fill map from type name to int
36 if (m_attributeTypes.size() == 0)fillAttributeTypeMap();
37
38 // Check which version we have:
39 // 1) earlier version took the attr spec from first attribute list
40 // 2) more recent versions "correctly" checks ALL attribute lists for attr spec -
41 // attribute list spec may be extended as payloads get merged together
42 // Use a non-empty m_attrType vector to detect the earlier version
43 bool isEarlyVersion = persObj->m_attrType.size() > 0;
44
45 // Loop over persistent attribute list collections
46 payloadVec.reserve(persObj->m_payloadVec.size());
48 persObj->m_payloadVec)
49 {
51
52 // Add to transient payload container
53 payloadVec.push_back(transColl);
54
55 // Loop over attribute lists
56 typedef std::vector<IOVPayloadContainer_p1::CondAttrListEntry_p1>::const_iterator attrListIt_t;
57
58 attrListIt_t itattrList = persColl.m_attrLists.begin();
59 attrListIt_t lastAttrList = persColl.m_attrLists.end();
60 for (; itattrList != lastAttrList; ++itattrList) {
61
62 const IOVPayloadContainer_p1::CondAttrListEntry_p1& entry = (*itattrList);
63
64 coral::AttributeList attrList;
65 // Add in attributes
66
67 unsigned int inameOld = 0;
68 for (unsigned int iattr = entry.m_firstIndex;
69 iattr < entry.m_lastIndex; ++iattr, ++inameOld) {
70
71 // Check that we have the correct number of attributes
72 if (iattr >= persObj->m_attrIndexes.size()) {
73 log << MSG::ERROR
74 << "IOVPayloadContainerCnv_p1::persToTrans attribute index bigger than array size "
75 << iattr << " " << persObj->m_attrIndexes.size() << " last index "
76 << entry.m_lastIndex
77 << endmsg;
78 return;
79 }
80
81 if (!isEarlyVersion) {
82 // version with name index saved in AttrListIndexes
83
84 // Get indexes to type/value
85 const AttrListIndexes& indexes = persObj->m_attrIndexes[iattr];
86 // Get attribute name and type name
87 unsigned int iname = indexes.nameIndex();
88 unsigned int itype = indexes.typeIndex();
89 const std::string& name = persObj->m_attrName[iname];
90 const std::string& typeName = m_attributeTypes[itype];
91 // Extend attribute list with new type/name
92 attrList.extend(name, typeName);
93 fillAttributeData(persObj, indexes, name, attrList, log);
94 }
95 else {
96 // Earlier version - did not allow for attr spec
97 // to vary across the collection of attribute
98 // lists
99 bool indexesOK = true;
100 if (inameOld >= persObj->m_attrName.size() ||
101 inameOld >= persObj->m_attrType.size()) {
102 log << MSG::WARNING << "IOVPayloadContainerCnv_p1::persToTrans name index bigger than name/type size. index "
103 << inameOld << " name size " << persObj->m_attrName.size()
104 << " attr size " << persObj->m_attrType.size()
105 << " last index " << entry.m_lastIndex
106 << " Most likely unfilled attribute list. Skipping to the next attrlist entry."
107 << endmsg;
108 indexesOK = false;
109
110 }
111
112 // Get indexes to type/value
113 const AttrListIndexes& indexes = persObj->m_attrIndexes[iattr];
114 // Get attribute name and type name
115 if (indexesOK) {
116 const std::string& name = persObj->m_attrName[inameOld];
117 unsigned int itype = persObj->m_attrType[inameOld];
118 const std::string& typeName = m_attributeTypes[itype];
119 // Extend attribute list with new type/name
120 attrList.extend(name, typeName);
121 fillAttributeData(persObj, indexes, name, attrList, log);
122 }
123 else {
124 // Error, print out info
125 std::string typeName;
126 unsigned int itype = indexes.typeIndex();
127 typedef std::map<std::string, unsigned int>::const_iterator it_type;
128 it_type typeIt = m_attributeTypeMap.begin();
129 it_type endType = m_attributeTypeMap.end();
130 for (; typeIt != endType; ++typeIt) {
131 if (itype == typeIt->second) {
132 typeName = typeIt->first;
133 break;
134 }
135 }
136 std::string name = "unknown";
137 attrList.extend(name, typeName);
138 fillAttributeData(persObj, indexes, name, attrList, log);
139 }
140 }
141 }
142
143
144// std::ostringstream attrStr;
145// attrList.toOutputStream(attrStr);
146// log << MSG::DEBUG << "IOVPayloadContainerCnv_p1::persToTrans - 3 "
147// << "start/stop " << entry.m_range.m_start << " "
148// << entry.m_range.m_stop << " attrList " << attrStr.str()
149// << endmsg;
150// log << MSG::DEBUG << "IOVPayloadContainerCnv_p1::persToTrans - 3 "
151// << "attrList size " << attrList.size()
152// << endmsg;
153// for (unsigned int i = 0; i < attrList.size(); ++i) {
154// log << MSG::DEBUG << attrList[i].specification().name() << " "
155// << attrList[i].specification().typeName() << " "
156// << endmsg;
157// }
158
159
160 // Add in AttributeList
161 transColl->add(entry.m_channelNumber, attrList);
162
163 bool hasIOV = !(entry.m_range.m_start == 0 && entry.m_range.m_stop == 0);
164
165 // Add in IOV
166 if (hasIOV) {
167 if (persColl.m_hasRunLumiBlockTime) {
168 // run/lumiblock
169 IOVTime start;
170 IOVTime stop;
171 start.setRETime(entry.m_range.m_start);
172 stop.setRETime(entry.m_range.m_stop);
173 transColl->add(entry.m_channelNumber, IOVRange(start, stop));
174 }
175 else {
176 // time stamp
177 IOVTime start;
178 IOVTime stop;
179 start.setTimestamp(entry.m_range.m_start);
180 stop.setTimestamp(entry.m_range.m_stop);
181 transColl->add(entry.m_channelNumber, IOVRange(start, stop));
182 }
183 }
184
185 // Add in name
186 if (entry.m_name.size()) {
187 transColl->add(entry.m_channelNumber, entry.m_name);
188 }
189 }
190
191 // Set start if needed:
192
193 // Set stop which may be smaller than the min of all channels
194 IOVTime start;
195 IOVTime stop;
196 bool setStart = (persColl.m_start != static_cast<uint64_t>(-1));
197 if (persColl.m_hasRunLumiBlockTime) {
198 // run/lumiblock
199 if (setStart) start.setRETime ( persColl.m_start );
200 stop.setRETime ( persColl.m_stop );
201 }
202 else {
203 // time stamp
204 if (setStart) start.setTimestamp( persColl.m_start );
205 stop.setTimestamp( persColl.m_stop );
206 }
207 if (setStart) transColl->addNewStart(start);
208 transColl->addNewStop(stop);
209 }
210}
211
212void
214 IOVPayloadContainer_p1* persObj, MsgStream &log)
215{
216
217 if (log.level() <= MSG::DEBUG) {
218 log << MSG::DEBUG << "IOVPayloadContainerCnv_p1::transToPers "
219 << endmsg;
220 }
221
222
223 // fill map from type name to int
224 if (m_attributeTypes.size() == 0)fillAttributeTypeMap();
225
226 // Create attribute list specification
227 fillPersAttrSpec(transObj, persObj, log);
228
229 // Nothing to do if specification was not filled
230 if (!persObj->m_attrName.size()) {
231 if (log.level() <= MSG::DEBUG) {
232 log << MSG::DEBUG << "IOVPayloadContainerCnv_p1::transToPers - empty attr list spec "
233 << endmsg;
234 }
235 return;
236 }
237
238 // Now fill pers object
239 persObj->m_payloadVec.resize(transObj->size());
240
241 // Loop over transient CondAttrListCollection
242 unsigned int ipcoll = 0;
244 IOVPayloadContainer::const_iterator last = transObj->end();
245 for (; it != last; ++it, ++ipcoll) {
246 const CondAttrListCollection* tColl = *it;
248 persObj->m_payloadVec[ipcoll];
249 pColl.m_attrLists.resize(tColl->size());
250
251 // minimal IOVRange
252 bool isRunLumiBlock = tColl->minRange().start().isRunEvent();
253 if (isRunLumiBlock) {
254 // run/lumiblock
255 pColl.m_hasRunLumiBlockTime = true;
256 // Save start and stop which may be form an IOV smaller than the min of all channels
257 pColl.m_start = tColl->minRange().start().re_time();
258 pColl.m_stop = tColl->minRange().stop().re_time();
259 }
260 else {
261 // time stamp
262 pColl.m_hasRunLumiBlockTime = false;
263 // Save start and stop which may be form an IOV smaller than the min of all channels
264 pColl.m_start = tColl->minRange().start().timestamp();
265 pColl.m_stop = tColl->minRange().stop().timestamp();
266 }
267
268 // Loop over transient AttributeLists
271 unsigned int ientry = 0;
272 for (; itAttr != lastAttr; ++itAttr, ++ientry) {
274
275 unsigned int chan = (*itAttr).first;
276 entry.m_channelNumber = chan;
277 entry.m_firstIndex = persObj->m_attrIndexes.size();
278 // make sure last index is set in case of error
279 entry.m_lastIndex = persObj->m_attrIndexes.size();
280 entry.m_range.m_start = 0;
281 entry.m_range.m_stop = 0;
282
283 // Look for IOV per channel
285 if (iovIt != tColl->iov_end()) {
286 // this channel has an IOV of its own
287 if (isRunLumiBlock) {
288 entry.m_range.m_start = iovIt->second.start().re_time();
289 entry.m_range.m_stop = iovIt->second.stop().re_time();
290 }
291 else {
292 entry.m_range.m_start = iovIt->second.start().timestamp();
293 entry.m_range.m_stop = iovIt->second.stop().timestamp();
294 }
295 }
296
297 // Add in name
298 std::string name = tColl->chanName(chan);
299 if (name.size()) {
300 entry.m_name = std::move(name);
301 }
302
303 // Add in each attribute value and save indexes
304
305 const coral::AttributeList& attrList = (*itAttr).second;
306
307 coral::AttributeList::const_iterator itAttr = attrList.begin();
308 coral::AttributeList::const_iterator itLast = attrList.end();
309 for (; itAttr != itLast; ++itAttr) {
310
311 std::string typeName = itAttr->specification().typeName();
312 std::map<std::string, unsigned int>::const_iterator attIt =
313 m_attributeTypeMap.find(typeName);
314 if (attIt == m_attributeTypeMap.end()) {
315 log << MSG::ERROR << "IOVPayloadContainerCnv_p1::transToPers - cannot find attibute type in map - name "
316 << typeName << endmsg;
317 return;
318 }
319 unsigned int itype = attIt->second;
320
321 std::string name = itAttr->specification().name();
322 attIt = m_attrNameMap.find(name);
323 if (attIt == m_attrNameMap.end()) {
324 log << MSG::ERROR << "IOVPayloadContainerCnv_p1::transToPers - cannot find attibute name in map - name "
325 << name << endmsg;
326 return;
327 }
328 unsigned int iname = attIt->second;
329
330 // fill persistent object with attribute data:
331 // name, type, attribute list, persObj
332 fillAttributeData(iname, itype,(*itAttr), persObj, log);
333 }
334
335 // Now save the last index into the index vector
336 entry.m_lastIndex = persObj->m_attrIndexes.size();
337 }
338 }
339}
340
341void
343 IOVPayloadContainer_p1* persObj,
344 MsgStream &log)
345{
346
347 if (log.level() <= MSG::DEBUG) {
348 log << MSG::DEBUG << "IOVPayloadContainerCnv_p1::fillPersAttrSpec IOVPayloadContainer size "
349 << transObj->size() << endmsg;
350 }
351
352 // Clear name list from previous conversion
353 m_attrNameMap.clear();
354
355 // Loop over all attribute lists and collect all possible
356 // names - note that some attribute lists may have more names
357 // (elements) than others, so we loop over all attribute lists
358 // for a complete set
359 std::set<std::string> names;
360 IOVPayloadContainer::const_iterator itPayload = transObj->begin();
361 IOVPayloadContainer::const_iterator itPayloadEnd = transObj->end();
362 // Only if there is at least one attribute list
363 for (; itPayload != itPayloadEnd; ++itPayload) {
364
365 const CondAttrListCollection* coll = *itPayload;
368 for (; itColl != itCollEnd; ++itColl) {
369 const coral::AttributeList& attrList = itColl->second;
370 // iterate over attribute list and save types
371 coral::AttributeList::const_iterator it = attrList.begin();
372 coral::AttributeList::const_iterator last = attrList.end();
373 for (; it != last; ++it) {
374 const coral::Attribute& attr = *it;
375 std::string name = attr.specification().name();
376 std::string typeName = attr.specification().typeName();
377
378 // Fill map of names for future lookup for conversion
379 names.insert(std::move(name));
380 }
381 }
382
383 }
384
385 // Fill map for conversion toPers, and pers lookup table to be
386 // saved for readback
387 unsigned int iname = 0;
388 persObj->m_attrName.reserve(names.size());
389 std::set<std::string>::iterator itName = names.begin();
390 std::set<std::string>::iterator itNameEnd = names.end();
391 for (; itName != itNameEnd; ++itName) {
392 // Save the attr name
393 persObj->m_attrName.push_back(*itName);
394 m_attrNameMap.insert(attrNameMapValue_t(*itName, iname));
395 ++iname;
396 }
397
398 if (log.level() <= MSG::DEBUG) {
399 log << MSG::DEBUG << "IOVPayloadContainerCnv_p1::fillPersAttrSpec number of attribute names "
400 << names.size() << endmsg;
401 }
402}
403
404
405void
407{
408 // fill type name to number map
427
428 // vector of types
429 m_attributeTypes.push_back("bool");
430 m_attributeTypes.push_back("char");
431 m_attributeTypes.push_back("unsigned char");
432 m_attributeTypes.push_back("short");
433 m_attributeTypes.push_back("unsigned short");
434 m_attributeTypes.push_back("int");
435 m_attributeTypes.push_back("unsigned int");
436 m_attributeTypes.push_back("long");
437 m_attributeTypes.push_back("unsigned long");
438 m_attributeTypes.push_back("long long");
439 m_attributeTypes.push_back("unsigned long long");
440 m_attributeTypes.push_back("float");
441 m_attributeTypes.push_back("double");
442 m_attributeTypes.push_back("long double");
443 m_attributeTypes.push_back("string");
444 m_attributeTypes.push_back("blob");
445 m_attributeTypes.push_back("date");
446 m_attributeTypes.push_back("time stamp");
447
448}
449
450void
452 unsigned int attrType,
453 const coral::Attribute& attr,
454 IOVPayloadContainer_p1* persObj,
455 MsgStream & log)
456{
457 // Fill persistent object with attribute data - must use switch
458 // for all possible types
459 switch (attrType) {
461 persObj->m_attrIndexes.push_back(
462 AttrListIndexes(attrName, IOVPayloadContainer_p1::ATTR_BOOL, persObj->m_bool.size()));
463 persObj->m_bool.push_back(attr.data<bool>());
464 break;
466 persObj->m_attrIndexes.push_back(
467 AttrListIndexes(attrName, IOVPayloadContainer_p1::ATTR_CHAR, persObj->m_char.size()));
468 persObj->m_char.push_back(attr.data<char>());
469 break;
471 persObj->m_attrIndexes.push_back(
473 persObj->m_unsignedChar.size()));
474 persObj->m_unsignedChar.push_back(attr.data<unsigned char>());
475 break;
477 persObj->m_attrIndexes.push_back(
479 persObj->m_short.push_back(attr.data<short>());
480 break;
482 persObj->m_attrIndexes.push_back(
484 persObj->m_unsignedShort.size()));
485 persObj->m_unsignedShort.push_back(attr.data<unsigned short>());
486 break;
488 persObj->m_attrIndexes.push_back(
489 AttrListIndexes(attrName, IOVPayloadContainer_p1::ATTR_INT, persObj->m_int.size()));
490 persObj->m_int.push_back(attr.data<int>());
491 break;
493 persObj->m_attrIndexes.push_back(
495 persObj->m_unsignedInt.size()));
496 persObj->m_unsignedInt.push_back(attr.data<unsigned int>());
497 break;
499 persObj->m_attrIndexes.push_back(
500 AttrListIndexes(attrName, IOVPayloadContainer_p1::ATTR_LONG, persObj->m_long.size()));
501 persObj->m_long.push_back(attr.data<long>());
502 break;
504 persObj->m_attrIndexes.push_back(
506 persObj->m_unsignedLong.size()));
507 persObj->m_unsignedLong.push_back(attr.data<unsigned long>());
508 break;
510 persObj->m_attrIndexes.push_back(
512 persObj->m_longLong.push_back(attr.data<long long>());
513 break;
515 persObj->m_attrIndexes.push_back(
517 persObj->m_unsignedLongLong.size()));
518 persObj->m_unsignedLongLong.push_back(attr.data<unsigned long long>());
519 break;
521 persObj->m_attrIndexes.push_back(
523 persObj->m_float.push_back(attr.data<float>());
524 break;
526 persObj->m_attrIndexes.push_back(
528 persObj->m_double.push_back(attr.data<double>());
529 break;
531// persObj->m_attrIndexes.push_back(
532// AttrListIndexes(attrName, IOVPayloadContainer_p1::ATTR_LONG_DOUBLE, persObj->m_longDouble.size()));
533// persObj->m_longDouble.push_back(attr.data<long double>());
534 break;
536 persObj->m_attrIndexes.push_back(
538 persObj->m_string.push_back(attr.data<std::string>());
539 break;
541 log << MSG::ERROR
542 << "IOVPayloadContainerCnv_p1::fillAttributeData - cannot currently treat BLOB type "
543 << endmsg;
544 return;
546 persObj->m_attrIndexes.push_back(
547 AttrListIndexes(attrName, IOVPayloadContainer_p1::ATTR_DATE, persObj->m_date.size()));
548 persObj->m_date.push_back(coral::TimeStamp(attr.data<coral::Date>().time()).total_nanoseconds() );
549 break;
551 persObj->m_attrIndexes.push_back(
553 persObj->m_timeStamp.size()));
554 persObj->m_timeStamp.push_back( attr.data<coral::TimeStamp>().total_nanoseconds() );
555 break;
556 };
557}
558
559
560void
562 const AttrListIndexes& index,
563 const std::string& name,
564 coral::AttributeList& attrList,
565 MsgStream & log)
566{
567 /*
568 this offset calculation solves the problem reported in
569 ATR-22116 trying to get past the limitation introduced by
570 AttrListIndexes::m_objIndex being of type short, which doesn't
571 cover the full length of the type-wise data vectors
572
573 It is assumed that when reading the persistent object entries,
574 the objIndex starts at 0, and increases by 1 each read for a given type.
575
576 One must also not call fillAttributeData multiple times for the
577 same (AttrListIndexes index), nor call them out of order
578
579 * There is one offset per type, initialized to 1
580 * In the first read of a type the offset is set to 0
581 * In all later reads the offset is not changed unless the objIndex equals 0
582 - if objIndex is fixed to be unsigned int, then objIndex should never be 0 in later reads
583 - if objIndex is unsigned short, then objIndex==0 only when it runs into the 65536 boundary
584 and the offset then gets increased by this amount
585
586 So this will work also when objIndex is integer
587 */
588
589 unsigned int objIndex = index.objIndex();
590 unsigned int itype = index.typeIndex();
591 if (itype >= std::size(m_objIndexOffset)) {
592 std::abort();
593 }
594 unsigned int & offset = m_objIndexOffset[itype];
595 if(offset == 1) {
596 offset = 0;
597 } else {
598 if(objIndex == 0) {
599 offset += 65536;
600 }
601 }
602
603 // Fill persistent object with attribute data - must use switch
604 // for all possible types
605 switch (index.typeIndex()) {
607 attrList[name].setValue(persObj->m_bool[objIndex + offset]);
608 break;
610 attrList[name].setValue(persObj->m_char[objIndex + offset]);
611 break;
613 attrList[name].setValue(persObj->m_unsignedChar[objIndex + offset]);
614 break;
616 attrList[name].setValue(persObj->m_short[objIndex + offset]);
617 break;
619 attrList[name].setValue(persObj->m_unsignedShort[objIndex + offset]);
620 break;
622 attrList[name].setValue(persObj->m_int[objIndex + offset]);
623 break;
625 attrList[name].setValue(persObj->m_unsignedInt[objIndex + offset]);
626 break;
628 attrList[name].setValue(persObj->m_long[objIndex + offset]);
629 break;
631 attrList[name].setValue(persObj->m_unsignedLong[objIndex + offset]);
632 break;
634 attrList[name].setValue(persObj->m_longLong[objIndex + offset]);
635 break;
637 attrList[name].setValue(persObj->m_unsignedLongLong[objIndex + offset]);
638 break;
640 attrList[name].setValue(persObj->m_float[objIndex + offset]);
641 break;
643 attrList[name].setValue(persObj->m_double[objIndex + offset]);
644 break;
646// attrList[name].setValue(persObj->m_longDouble[objIndex + offset]);
647 break;
649 attrList[name].setValue(persObj->m_string[objIndex + offset]);
650 break;
652 log << MSG::ERROR
653 << "IOVPayloadContainerCnv_p1::fillAttributeData - cannot currently treat BLOB type "
654 << endmsg;
655 return;
657 {
658 coral::TimeStamp::ValueType ns( persObj->m_date[objIndex + offset] );
659 attrList[name].setValue( coral::Date(coral::TimeStamp(ns).time()) );
660 break;
661 }
663 {
664 coral::TimeStamp::ValueType ns =
665 coral::TimeStamp::ValueType( persObj->m_timeStamp[objIndex + offset] );
666 attrList[name].setValue( coral::TimeStamp(ns) );
667 break;
668 }
669 };
670}
671
672
#define endmsg
This file defines the class for a collection of AttributeLists where each one is associated with a ch...
This class is a container for the payload of conditions data.
This class is the persistent version of a container for the payload of conditions data.
Indexes to attribute name, type name and object value for the persistent storage of an attribute list...
unsigned short nameIndex() const
Index into attribute name vector.
unsigned short typeIndex() const
Index into the type name vector.
This class is a collection of AttributeLists where each one is associated with a channel number.
const_iterator end() const
void addNewStart(const IOVTime &start)
Add new start time to minRange - make sure that start is >= to new start.
bool add(ChanNum chanNum, const AttributeList &attributeList)
Adding in chan/attrList pairs.
const_iterator begin() const
Access to Chan/AttributeList pairs via iterators.
iov_const_iterator iov_end() const
void addNewStop(const IOVTime &stop)
Add new stop time to minRange - make sure that stop is <= to new stop.
const std::string & chanName(ChanNum chanNum) const
find name for particular channel
const IOVRange & minRange() const
Current minimal IOVRange.
size_type size() const
number of Chan/AttributeList pairs
iov_const_iterator chanIOVPair(ChanNum chanNum) const
Access to Chan/IOV pairs via channel number: returns map iterator.
ChanAttrListMap::const_iterator const_iterator
ChanIOVMap::const_iterator iov_const_iterator
std::vector< std::string > m_attributeTypes
std::map< std::string, unsignedint >::value_type attrNameMapValue_t
virtual void persToTrans(const IOVPayloadContainer_p1 *persObj, IOVPayloadContainer *transObj, MsgStream &log)
std::map< std::string, unsigned int > m_attrNameMap
void fillAttributeData(unsigned int attrName, unsigned int attrType, const coral::Attribute &attr, IOVPayloadContainer_p1 *persObj, MsgStream &log)
unsigned int m_objIndexOffset[IOVPayloadContainer_p1::ATTR_TIME_STAMP+1]
void fillPersAttrSpec(const IOVPayloadContainer *transObj, IOVPayloadContainer_p1 *persObj, MsgStream &log)
std::map< std::string, unsigned int > m_attributeTypeMap
virtual void transToPers(const IOVPayloadContainer *transObj, IOVPayloadContainer_p1 *persObj, MsgStream &log)
std::vector< CondAttrListCollection_p1 > m_payloadVec
std::vector< unsigned char > m_unsignedChar
std::vector< double > m_double
std::vector< unsigned short > m_unsignedShort
std::vector< long long > m_longLong
std::vector< unsigned int > m_unsignedInt
std::vector< std::string > m_attrName
std::vector< unsigned long long > m_unsignedLongLong
std::vector< unsigned int > m_attrType
std::vector< std::string > m_string
std::vector< unsigned long long > m_date
std::vector< unsigned long > m_unsignedLong
std::vector< AttrListIndexes > m_attrIndexes
std::vector< unsigned long long > m_timeStamp
This class is a container for the payload of conditions data.
size_type size() const
size of payload vector
payloadVec::const_iterator const_iterator
const_iterator begin() const
Begin of payload vector.
const_iterator end() const
End of payload vector.
std::vector< CondAttrListCollection * > payloadVec
Validity Range object.
Definition IOVRange.h:30
const IOVTime & stop() const
Definition IOVRange.h:39
const IOVTime & start() const
Definition IOVRange.h:38
Basic time unit for IOVSvc.
Definition IOVTime.h:33
uint64_t timestamp() const noexcept
Definition IOVTime.h:108
uint64_t re_time() const noexcept
Definition IOVTime.h:107
bool isRunEvent() const noexcept
Definition IOVTime.h:113
Definition index.py:1