Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Public Member Functions | List of all members
DataHeaderElementCnv_p5 Class Reference

This class provides the converter to customize the saving of DataHeaderElement_p5. More...

#include <DataHeaderCnv_p5.h>

Collaboration diagram for DataHeaderElementCnv_p5:

Public Member Functions

 DataHeaderElementCnv_p5 ()
 
 ~DataHeaderElementCnv_p5 ()
 
void persToTrans (const DataHeaderElement_p5 &pers, DataHeaderElement &trans, const DataHeaderForm_p5 &form, unsigned int entry) const
 
void transToPers (const DataHeaderElement &trans, DataHeaderElement_p5 &pers, DataHeaderForm_p5 &form, unsigned int entry) const
 

Detailed Description

This class provides the converter to customize the saving of DataHeaderElement_p5.

Definition at line 24 of file DataHeaderCnv_p5.h.

Constructor & Destructor Documentation

◆ DataHeaderElementCnv_p5()

DataHeaderElementCnv_p5::DataHeaderElementCnv_p5 ( )

Definition at line 15 of file DataHeaderCnv_p5.cxx.

15 {}

◆ ~DataHeaderElementCnv_p5()

DataHeaderElementCnv_p5::~DataHeaderElementCnv_p5 ( )

Definition at line 16 of file DataHeaderCnv_p5.cxx.

16 {}

Member Function Documentation

◆ persToTrans()

void DataHeaderElementCnv_p5::persToTrans ( const DataHeaderElement_p5 pers,
DataHeaderElement trans,
const DataHeaderForm_p5 form,
unsigned int  entry 
) const

Definition at line 19 of file DataHeaderCnv_p5.cxx.

23 {
24  Token& token = trans.m_token;
25  std::vector<unsigned int>::const_iterator intIter = form.params(entry).begin();
26  unsigned int keyIdx = 0U, aliasNum = 0U, clidNum = 0U;
27 // Translate PoolToken
28  if ((*intIter&0x0000FFFF) == 0) {
29  ++intIter;
30  keyIdx = *intIter; ++intIter;
31  aliasNum = *intIter; ++intIter;
32  clidNum = *intIter; ++intIter;
33  token.fromString(pers.m_token);
34  } else {
35  const unsigned int keyPos = (unsigned short)(*intIter>>16),
36  version = (unsigned short)(*intIter&0x0000FFFF); ++intIter;
37  const unsigned int guidIdx = (unsigned short)(*intIter>>16),
38  classIdx = (unsigned short)(*intIter&0x0000FFFF); ++intIter;
39  const unsigned int prefixIdx = (unsigned short)(*intIter>>16),
40  typeIdx = (unsigned short)(*intIter&0x0000FFFF); ++intIter;
41 // Add Technology and Offsets
42  unsigned int tech = 514;
43  if (version&0x00000001U) {
44  tech = *intIter; ++intIter;
45  }
46  unsigned int oid1 = *intIter; ++intIter;
47  if (version&0x00000010U) {
48  keyIdx = *intIter; ++intIter;
49  aliasNum = *intIter; ++intIter;
50  clidNum = *intIter; ++intIter;
51  } else {
52  keyIdx = (*intIter>>16), aliasNum = ((*intIter&0x0000FFFF)>>8), clidNum = (*intIter&0x000000FF); ++intIter;
53  }
54 // Append DbGuid
55  Guid guid(form.map()[guidIdx]);
56  token.setDb(guid);
57 // Container name, may be optimized
58  std::string cntName;
59  if (prefixIdx > 0) {
60  cntName += form.map()[prefixIdx];
61  if (typeIdx > 0) {
62  cntName += form.map()[typeIdx];
63  }
64  }
65 // Insert key
66  if (keyPos > 0) {
67  cntName += pers.m_token.substr(0, keyPos - 1) + form.map()[keyIdx] + pers.m_token.substr(keyPos - 1);
68  } else {
69  cntName += pers.m_token;
70  }
71  //token.setCont(cntName);
72 // Append ClassId
73  Guid clid(form.map()[classIdx]);
74  token.setClassID(clid);
75  token.setTechnology(tech);
76  token.setOid(Token::OID_t(oid1, pers.m_oid2));
77  }
78  unsigned int aliasCur = 0U;
79  trans.m_key = form.map()[keyIdx];
80  trans.m_alias.clear();
81  for (std::set<std::string>::const_iterator lastAlias = trans.m_alias.begin();
82  aliasCur < aliasNum; ++aliasCur) {
83  lastAlias = trans.m_alias.insert(lastAlias, form.map()[keyIdx + aliasCur + 1]);
84  }
85  trans.m_pClid = *intIter; ++intIter;
86  const std::vector<unsigned int>::const_iterator intLast = form.params(entry).end();
87  if (intIter+clidNum > intLast) {
88  clidNum = intLast - intIter;
89  }
90  trans.m_clids.assign (intIter, intIter+clidNum);
91  intIter += clidNum;
92  trans.m_hashes.clear();
93  for (; intIter != intLast; ++intIter) {
94  trans.m_hashes.push_back(*intIter);
95  }
96 }

◆ transToPers()

void DataHeaderElementCnv_p5::transToPers ( const DataHeaderElement trans,
DataHeaderElement_p5 pers,
DataHeaderForm_p5 form,
unsigned int  entry 
) const

Definition at line 98 of file DataHeaderCnv_p5.cxx.

101  {
102  unsigned int tech = 0U, oid1 = 0U;
103  unsigned short guidIdx = 0U, classIdx = 0U, prefixIdx = 0U, typeIdx = 0U, keyPos = 0U;
104 // Translate PoolToken
105  if (trans.getToken() != 0) {
106 // Database GUID
107  const std::string guid = trans.getToken()->dbID().toString();
108  for (std::vector<std::string>::const_iterator iter = form.map().begin(), last = form.map().end();
109  iter != last; ++iter, ++guidIdx) {
110  if (*iter == guid) break;
111  }
112  if (guidIdx == form.map().size()) {
113  form.insertMap(guid);
114  }
115 // Class GUID
116  const std::string clid = trans.getToken()->classID().toString();
117  for (std::vector<std::string>::const_iterator iter = form.map().begin(), last = form.map().end();
118  iter != last; ++iter, ++classIdx) {
119  if (*iter == clid) break;
120  }
121  if (classIdx == form.map().size()) {
122  form.insertMap(clid);
123  }
124 // Container name, can be optimized
125  pers.m_token = trans.getToken()->contID();
126 // Get Prefix
127  std::string::size_type delim = pers.m_token.find_first_of("_/(");
128  if (delim != std::string::npos) {
129  const std::string persComp1 = pers.m_token.substr(0, delim + 1);
130  for (std::vector<std::string>::const_iterator iter = form.map().begin(), last = form.map().end();
131  iter != last; ++iter, ++prefixIdx) {
132  if (*iter == persComp1) break;
133  }
134  if (prefixIdx == form.map().size()) {
135  form.insertMap(persComp1);
136  }
137  pers.m_token = pers.m_token.substr(delim + 1);
138 // Get TypeName
139 // Check whether Key only is used for placement
140  if (!pers.m_token.starts_with( trans.m_key)) {
141  std::string::size_type delim = pers.m_token.find_first_of("/()");
142  if (delim != std::string::npos) {
143  const std::string persComp2 = pers.m_token.substr(0, delim + 1);
144  for (std::vector<std::string>::const_iterator iter = form.map().begin(), last = form.map().end();
145  iter != last; ++iter, ++typeIdx) {
146  if (*iter == persComp2) break;
147  }
148  if (typeIdx == form.map().size()) {
149  form.insertMap(persComp2);
150  }
151  pers.m_token = pers.m_token.substr(delim + 1);
152  } else if (pers.m_token == "DataHeader") {
153  for (std::vector<std::string>::const_iterator iter = form.map().begin(), last = form.map().end();
154  iter != last; ++iter, ++typeIdx) {
155  if (*iter == "DataHeader") break;
156  }
157  if (typeIdx == form.map().size()) {
158  form.insertMap("DataHeader");
159  }
160  pers.m_token.clear();
161  }
162  }
163  }
164  delim = pers.m_token.rfind(trans.m_key);
165  if (delim != std::string::npos) {
166  keyPos = delim + 1;
167  pers.m_token = pers.m_token.substr(0, delim) + pers.m_token.substr(delim + trans.m_key.size());
168  }
169  tech = trans.getToken()->technology();
170  oid1 = trans.getToken()->oid().first;
171  pers.m_oid2 = trans.getToken()->oid().second;
172  }
173  unsigned int version = 0x0000FFFFU;
174  if (tech == 514) {
175  version = version&0x0000FFFEU;
176  }
177  unsigned int keyIdx = form.map().size(), aliasNum = trans.m_alias.size(), clidNum = trans.m_clids.size();
178  if (keyIdx < 0x00010000U && aliasNum < 0x00000100U && clidNum < 0x00000100U) {
179  version = version&0x0000FFEFU;
180  }
181  form.insertParam((unsigned int)(keyPos) * 0x00010000U + version, entry);
182  form.insertParam((unsigned int)(guidIdx) * 0x00010000U + (unsigned int)(classIdx), entry);
183  form.insertParam((unsigned int)(prefixIdx) * 0x00010000U + (unsigned int)(typeIdx), entry);
184  if (version&0x00000001U) {
185  form.insertParam(tech, entry);
186  }
187  form.insertParam(oid1, entry);
188  if (version&0x00000010U) {
189  form.insertParam(keyIdx, entry);
190  form.insertParam(aliasNum, entry);
191  form.insertParam(clidNum, entry);
192  } else {
193  form.insertParam(keyIdx * 0x00010000U + aliasNum * 0x00000100U + clidNum, entry);
194  }
195  form.insertMap(trans.m_key);
196  for (std::set<std::string>::const_iterator iter = trans.m_alias.begin(),
197  last = trans.m_alias.end(); iter != last; ++iter) {
198  form.insertMap(*iter);
199  }
200  form.insertParam(trans.m_pClid, entry);
201  for (CLID clid : trans.m_clids) {
202  form.insertParam(clid, entry);
203  }
204  for (std::vector<SG::sgkey_t>::const_iterator iter = trans.m_hashes.begin(),
205  last = trans.m_hashes.end(); iter != last; ++iter) {
206  form.insertParam(SG::sgkeyShort (*iter), entry);
207  }
208 }

The documentation for this class was generated from the following files:
DataHeaderElement_p5::m_token
std::string m_token
Definition: DataHeader_p5.h:35
DataHeaderElement::m_key
std::string m_key
string with StoreGate key.
Definition: DataHeader.h:112
Token::contID
const std::string & contID() const
Access container identifier.
Definition: Token.h:69
DataHeaderElement::m_token
Token m_token
Transient address token.
Definition: DataHeader.h:116
xAOD::short
short
Definition: Vertex_v1.cxx:165
DataHeaderElement::m_pClid
CLID m_pClid
primary ClassID.
Definition: DataHeader.h:108
Token::dbID
const Guid & dbID() const
Access database identifier.
Definition: Token.h:64
Guid::toString
const std::string toString() const
Automatic conversion to string representation.
Definition: Guid.cxx:58
DataHeaderForm_p5::map
const std::vector< std::string > & map() const
Definition: DataHeader_p5.cxx:45
Token::classID
const Guid & classID() const
Access database identifier.
Definition: Token.h:73
Token
This class provides a token that identifies in a unique way objects on the persistent storage.
Definition: Token.h:21
DataHeaderForm_p5::params
const std::vector< unsigned int > & params(unsigned int entry) const
Definition: DataHeader_p5.cxx:53
Token::OID_t
Definition: Token.h:24
Token::fromString
Token & fromString(const std::string &from)
Build from the string representation of a token.
Definition: Token.cxx:148
Token::setClassID
Token & setClassID(const Guid &cl_id)
Access database identifier.
Definition: Token.h:75
Token::technology
int technology() const
Access technology type.
Definition: Token.h:77
DataHeaderElement::m_alias
std::set< std::string > m_alias
set of StoreGate alias string.
Definition: DataHeader.h:114
SG::sgkeyShort
constexpr uint32_t sgkeyShort(const sgkey_t k)
Convert a sgkey to the 32-bit form used for older data.
Definition: CxxUtils/CxxUtils/sgkey_t.h:85
Token::setDb
Token & setDb(const Guid &db)
Set database name.
Definition: Token.h:66
DataHeaderElement_p5::m_oid2
long long int m_oid2
Definition: DataHeader_p5.h:36
Token::setTechnology
Token & setTechnology(int t)
Set technology type.
Definition: Token.h:79
CLID
uint32_t CLID
The Class ID type.
Definition: Event/xAOD/xAODCore/xAODCore/ClassID_traits.h:47
DataHeaderForm_p5::insertMap
void insertMap(const std::string &element)
Definition: DataHeader_p5.cxx:49
pool_uuid.guid
guid
Definition: pool_uuid.py:112
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
Token::setOid
Token & setOid(const OID_t &oid)
Set object identifier.
Definition: Token.h:85
DataHeaderElement::m_hashes
std::vector< sgkey_t > m_hashes
hash table for ElementLink host container keys.
Definition: DataHeader.h:118
DataHeaderElement::m_clids
std::vector< CLID > m_clids
vector of unsigned long to store ClassID's for symlinked container.
Definition: DataHeader.h:110
get_generator_info.version
version
Definition: get_generator_info.py:33
Guid
This class provides a encapsulation of a GUID/UUID/CLSID/IID data structure (128 bit number).
Definition: Guid.h:20
DataHeaderForm_p5::insertParam
void insertParam(unsigned int param, unsigned int entry)
Definition: DataHeader_p5.cxx:57
Token::oid
const OID_t & oid() const
Access object identifier.
Definition: Token.h:81
DataHeaderElement::getToken
const Token * getToken() const
Definition: DataHeader.cxx:124