1 #include "RootCnv/PoolClasses.h"
40 TBranch* b1 = t->GetBranch(
"Links");
41 TBranch* b2 = t->GetBranch(
"Refs");
46 b1->SetAutoDelete(kFALSE);
47 b2->SetAutoDelete(kFALSE);
49 b2->SetAddress(&pmgr);
50 int nb1 = b1->GetEvent(entry);
51 int nb2 = b2->GetEvent(entry);
52 if ( nb1>1 && nb2>1 ) {
54 refs.
refs.resize(ref_size);
56 for(
size_t j = 0; j < ref_size; ++j) {
57 const pair<int, int>& oid = mgr.
references()[j]->m_oid;
58 string loc = mgr.
links()[j].substr(1);
61 r = m_poolLinks[oid.first];
64 msg <<
"Add leaf:" << oid.first <<
"->" << loc <<
" from " <<
c->
getDb(r.
dbase)
67 <<
" CLID:" << hex << r.
clid
68 <<
" Typ:" << hex << int(r.
svc)
69 <<
" Ent:" << dec << r.
entry << endl;
75 msg <<
"Add Link:" << lnk->
path() << endl;
76 refs.
links.push_back(link_id);
81 msg <<
MSG::ERROR <<
"Failed to access POOL Ref/Link branches:" << cnt
92 return (TBranch*)t->GetListOfBranches()->At(0);
95 t = (TTree*)
c->
file()->Get(tname.c_str());
97 TBranch* b = (TBranch*)t->GetListOfBranches()->At(0);
103 << branch_name <<
" [" << tname <<
"]" <<
endmsg;
119 TTree* t = (TTree*)
c->
file()->Get(
"##Params");
121 TBranch* b = t->GetBranch(
"db_string");
123 for(i=0,b->SetAddress(text); i < b->GetEntries(); ++
i) {
125 char* id1 = strstr(text,
"[NAME=");
126 char* id2 = strstr(text,
"[VALUE=");
130 char* id11 = strstr(id1,
"]");
131 char* id22 = strstr(id2,
"]");
132 if ( id11 && id22 ) {
135 params().emplace_back(id1,id2);
136 msgSvc() <<
"Param:" << id1 <<
"=" << id2 <<
"." <<
endmsg;
142 t = (TTree*)
c->
file()->Get(
"##Links");
144 b = t->GetBranch(
"db_string");
146 m_poolLinks.resize((
size_t)b->GetEntries()+2);
147 for(i=0,b->SetAddress(text); i < b->GetEntries(); ++
i) {
149 std::string db, container;
150 int clid = 1, technology = 0, ipar[2] = {-1,-1};
151 for(
char* p1 = (
char*)text; p1; p1 = ::strchr(++p1,
'[')) {
152 char* p2 = ::strchr(p1,
'=');
153 char* p3 = ::strchr(p1,
']');
155 if ( ::strncmp(
"[DB=", p1, 4) == 0 ) {
159 else if ( ::strncmp(
"[CNT=", p1, 5) == 0 ) {
163 else if ( ::strncmp(
"[OID=", p1, 5) == 0 ) {
165 ::sscanf(p1+5,
"%08X,%08X",(
unsigned int*)&ipar[0],(
unsigned int*)&ipar[1]);
167 else if ( ::strncmp(
"[CLID=", p1, 6) == 0 ) {
169 ::sscanf(p1+6,
"%08X",(
unsigned int*)&clid);
171 else if ( ::strncmp(
"[TECH=", p1, 6) == 0 ) {
173 ::sscanf(p1+6,
"%08X",(
unsigned int*)&technology);
182 c->
makeRef(
"",clid,technology,db,container,-1,m_poolLinks[i+2]);
184 msgSvc() <<
"Add link[" << i <<
"]:" << db << container <<
" [" << r.
dbase <<
"," << r.
container <<
"] "
185 <<
" tech:" << hex << setw(8) << r.
svc <<
" CLID:" << setw(8) << r.
clid << dec <<
endmsg;
const std::string & path() const
Access to path of object.
Definition of the MsgStream class used to transmit messages.
TFile * file() const
Direct access to TFile structure.
const std::string & getDb(int which) const
Access database/file name from saved index.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
auto begin(reverse_wrapper< T > &w)
std::vector< pool::Token * > & references()
Access to token array.
const std::string & getLink(int which) const
Access link name from saved index.
std::vector< int > links
The links of the link manager.
Persistent reference object containing all leafs and links corresponding to a Gaudi DataObject...
int dbase
Data members to define object location in the persistent world.
std::vector< std::string > & links()
Access to link array.
Persistent reference object.
auto end(reverse_wrapper< T > &w)
Description: PoolDbLinkManager class implementation definition.
This class is used for returning status codes from appropriate routines.
void makeRef(IRegistry *pA, RootRef &ref)
Create reference object from registry entry.
Link * link(long id)
Retrieve symbolic link identified by ID.
const std::string & getCont(int which) const
Access container name from saved index.
int makeLink(const std::string &p)
Convert path string to path index.
Embedded class defining a symbolic link Note: No copy constructor; bitwise copy (done by the compiler...
Concrete implementation of the IDataConnection interface to access ROOT files.
std::vector< RootRef > refs
The references corresponding to the next layer of items in the data store.
A LinkManager is the object aggregated into a DataObject, which is responsible for the handling of no...
Helper functions to set/get the application return code.
long size() const
Retrieve number of link present.