ATLAS Offline Software
Loading...
Searching...
No Matches
DataHeaderCnv_p4.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
10
13
14#include <cstdio>
15#include <sstream>
16#include <algorithm>
17
19
20//______________________________________________________________________________
22 DataHeaderElement* trans,
23 const std::vector<std::string>& map) {
24 std::vector<unsigned int>::const_iterator intIter = pers->m_clids.begin();
25 const std::vector<unsigned int>::const_iterator intLast = pers->m_clids.end();
26 trans->m_pClid = *intIter; ++intIter;
27 trans->m_clids.assign (intIter, intLast);
28 std::vector<std::string>::const_iterator strIter = pers->m_alias.begin();
29 trans->m_key = *strIter; ++strIter;
30 trans->m_alias.assign (strIter, pers->m_alias.end());
31 if (!std::ranges::is_sorted (trans->m_alias)) {
32 // Should really be sorted, but just in case...
33 std::ranges::sort (trans->m_alias);
34 auto ret = std::ranges::unique (trans->m_alias);
35 trans->m_alias.erase (ret.begin(), ret.end());
36 }
37 trans->m_hashes.clear();
38 trans->m_hashes.reserve(pers->m_hashes.size());
39 for (std::vector<uint64_t>::const_iterator iter = pers->m_hashes.begin(),
40 last = pers->m_hashes.end(); iter != last; ++iter) {
41 trans->m_hashes.push_back((unsigned int)(*iter));
42 }
43// Translate PoolToken
44 std::string tokenStr;
45 if (map.empty()) {
46 tokenStr = pers->m_token;
47 } else {
48 unsigned int tokenSize = 129 + pers->m_token.size();
49 if (pers->m_prefixIdx > 0) {
50 tokenSize += map[pers->m_prefixIdx].size();
51 }
52 if (pers->m_keyPos > 0) {
53 tokenSize += trans->m_key.size();
54 }
55 tokenStr.reserve(tokenSize);
56// Append DbGuid
57 tokenStr = "[DB=";
58 tokenStr.append(map[pers->m_dbGuidIdx]);
59// Still optimize
60 tokenStr.append("][CNT=");
61 std::string cntName;
62 if (pers->m_prefixIdx > 0) {
63 tokenStr.append(map[pers->m_prefixIdx]);
64 }
65// insert key
66 if (pers->m_keyPos > 0) {
67 tokenStr.append(pers->m_token.substr(0, pers->m_keyPos - 1));
68 tokenStr.append(trans->m_key);
69 tokenStr.append(pers->m_token.substr(pers->m_keyPos - 1));
70 } else {
71 tokenStr.append(pers->m_token);
72 }
73// Append ClassId
74 tokenStr.append("][CLID=");
75 tokenStr.append(map[pers->m_classIdIdx]);
76// Add Technology and Offsets
77 const unsigned int length = 40;
78 char text[length];
79 snprintf(text, length, "][TECH=%08X][OID=%08X-%08X]", pers->m_technology, pers->m_oid1, pers->m_oid2);
80 tokenStr.append(text);
81 }
82 trans->m_token.fromString(tokenStr);
83}
84//______________________________________________________________________________
86 DataHeaderElement_p4* /*pers*/,
87 std::vector<std::string>& /*map*/) {
88// Moved to next _p version
89}
90//______________________________________________________________________________
91//______________________________________________________________________________
93//______________________________________________________________________________
95 trans->m_inputDataHeader.resize(pers->m_provSize);
96 std::vector<DataHeaderElement>::iterator it = trans->m_inputDataHeader.begin();
97 std::vector<DataHeaderElement_p4>::const_iterator pit = pers->m_dataHeader.begin();
98 for (unsigned int i = 0U; i != pers->m_provSize; ++i, ++it, ++pit) {
99 m_elemCnv.persToTrans(&(*pit), &(*it), pers->m_guidMap);
100 }
101 trans->m_dataHeader.resize(pers->m_dataHeader.size() - pers->m_provSize);
102 it = trans->m_dataHeader.begin();
103 for (std::vector<DataHeaderElement_p4>::const_iterator last = pers->m_dataHeader.end();
104 pit != last; ++it, ++pit) {
105 m_elemCnv.persToTrans(&(*pit), &(*it), pers->m_guidMap);
106 }
107}
108//______________________________________________________________________________
109void DataHeaderCnv_p4::transToPers(const DataHeader* /*trans*/, DataHeader_p4* /*pers*/) {
110// Moved to next _p version
111}
112//______________________________________________________________________________
114 const std::string& /*key*/,
115 const std::string& /*token*/) {
116// Moved to next _p version
117}
This file contains the class definition for the DataHeaderCnv_p4 and DataHeaderElementCnv_p4 classes.
This file contains the class definition for the DataHeader and DataHeaderElement classes.
double length(const pvec &v)
DataHeaderElementCnv_p4 m_elemCnv
void insertDHRef(DataHeader_p4 *pers, const std::string &key, const std::string &token)
void transToPers(const DataHeader *trans, DataHeader_p4 *pers)
void persToTrans(const DataHeader_p4 *pers, DataHeader *trans)
void transToPers(const DataHeaderElement *trans, DataHeaderElement_p4 *pers, std::vector< std::string > &map)
void persToTrans(const DataHeaderElement_p4 *pers, DataHeaderElement *trans, const std::vector< std::string > &map)
This class provides a persistent representation for the DataHeaderElement class.
std::vector< std::string > m_alias
unsigned short m_prefixIdx
std::vector< unsigned int > m_clids
unsigned short m_classIdIdx
std::vector< uint64_t > m_hashes
unsigned short m_keyPos
unsigned int m_technology
unsigned short m_dbGuidIdx
This class provides a persistent form for the TransientAddress.
Definition DataHeader.h:37
CLID m_pClid
primary ClassID.
Definition DataHeader.h:105
std::string m_key
string with StoreGate key.
Definition DataHeader.h:109
std::vector< std::string > m_alias
vector of StoreGate alias string.
Definition DataHeader.h:111
std::vector< CLID > m_clids
vector of unsigned long to store ClassID's for symlinked container.
Definition DataHeader.h:107
std::vector< sgkey_t > m_hashes
hash table for ElementLink host container keys.
Definition DataHeader.h:115
Token m_token
Transient address token.
Definition DataHeader.h:113
This class provides a persistent representation for the DataHeader class.
std::vector< std::string > m_guidMap
std::vector< DataHeaderElement_p4 > m_dataHeader
unsigned int m_provSize
This class provides the layout for summary information stored for data written to POOL.
Definition DataHeader.h:123
std::vector< DataHeaderElement > m_inputDataHeader
vector with DataHeaderElement to upstream DataHeader ("Provenance").
Definition DataHeader.h:211
std::vector< DataHeaderElement > m_dataHeader
vector with DataHeaderElement to "DataObject".
Definition DataHeader.h:209
Token & fromString(const std::string_view from)
Build from the string representation of a token.
Definition Token.cxx:147
STL class.