26       for ( 
int i = 0, 
m = n.
length() - 1; i < 
m; ++i )
    27         if ( !isalnum( n[i] ) ) n[i] = 
'_';
    29       TBranch* b                     = t ? t->GetBranch( n.
c_str() ) : 0;
    30       if ( !b ) b                    = t ? t->GetBranch( branch_name.
c_str() ) : 0;
    31       if ( b ) b->SetAutoDelete( kFALSE );
    37       TBranch*        b     = 
getBranch( section, cnt + 
"#R" );
    40         b->SetAddress( &prefs );
    41         int nb = b->GetEntry( entry );
    47             pair<const RootRef*, const ContainerSection*> ls = 
c->
getMergeSection( cnt, entry );
    49               if ( ls.first->dbase >= 0 ) {
    53                   msg << 
"Refs: LS [" << entry << 
"] -> " << ls.first->dbase << 
"," << ls.first->container << 
","    54                       << ls.first->link << 
"," << ls.first->entry << 
endmsg;
    56                 for ( 
size_t j = 0, 
n = refs.
refs.
size(); j < 
n; ++j ) {
    59                     int db = r.
dbase + ls.first->dbase;
    63                       if ( r.
link ) r.
link += ls.first->link;
    65                       auto          k  = ms.
find( rc );
    66                       if ( k != ms.
end() ) {
    67                         const auto& cs = ( *k ).second;
    68                         r.
entry        = ( ls.first->entry >= 0 && ls.first->entry < (int)cs.size() )
    69                                       ? cs[ls.first->entry].start + r.
entry    72                           msg << 
"Add link [" << r.
entry << 
"," << ls.first->entry << 
"," << ls.first->container << 
","    77                             << 
" Invalid link to " << rc << 
endmsg;
    85                                [&]( 
int& i ) { i += ls.first->link; } );
    99       char* q = strchr( p, 
'=' );
   108     template <
class C, 
class F>
   112       TBranch* b = t->GetBranch( nam );
   114         TLeaf* 
l = b->GetLeaf( nam );
   117           b->SetAddress( text );
   119           for ( Long64_t i = 0, 
n = b->GetEntries(); i < 
n; ++i ) {
   120             if ( b->GetEntry( i ) > 0 ) {
   121               char* p = (
char*)l->GetValuePointer();
   122               msgSvc() << 
"Add Value[" << b->GetName() << 
"]:" << p << 
endmsg;
   123               ( this->*pmf )( v, p );
   135     bool get( 
const string& dsc, pair<string, ContainerSection>& e )
   137       if ( dsc != 
"[END-OF-SECTION]" ) {
   138         size_t id1 = dsc.find( 
"[CNT=" );
   139         size_t id2 = dsc.find( 
"[START=" );
   140         size_t id3 = dsc.find( 
"[LEN=" );
   141         if ( id1 != string::npos && id2 != string::npos && id3 != string::npos ) {
   142           string cnt            = dsc.substr( id1 + 5, id2 - 1 - 5 );
   143           int    section_start  = 
std::stoi( dsc.substr( id2 + 7, id3 - id2 - 8 ) );
   144           int    section_length = 
std::stoi( dsc.substr( id3 + 5, dsc.find( 
"]", id3 + 5 ) - id3 - 5 ) );
   159       pair<string, ContainerSection> e;
   167       for ( 
const auto& i : tmp ) {
   169           msg << 
"Added Merge Section:" << e.first << 
endmsg;
   170           ms[e.first].push_back( e.second );
   171           if ( e.first == 
"Links" )
   172             r.
link = e.second.start;
   173           else if ( e.first == 
"Containers" )
   175           else if ( e.first == 
"Databases" )
   176             r.
dbase = e.second.start;
   177           else if ( e.first == 
"Params" )
   178             r.
svc = e.second.start;
   179         } 
else if ( i == 
"[END-OF-SECTION]" ) {
   193       TTree*     t = (TTree*)
c->
file()->Get( 
"Sections" );
   211     string getParam( 
const pair<string, string>& p ) { 
return p.first + 
"=" + p.second; }
   213     template <
class C, 
class F>
   217       string               val, typ = nam;
   219       TDirectory::TContext ctxt( 
c->
file() );
   220       TBranch*             b = 
refs()->GetBranch( nam );
   221       if ( !b ) b            = 
refs()->Branch( nam, 0, ( typ + 
"/C" ).c_str() );
   223         for ( i = b->GetEntries(), n = Long64_t( v.size() ); i < 
n; ++i ) {
   224           val = ( this->*pmf )( v[
size_t( i )] );
   225           b->SetAddress( (
char*)val.c_str() );
 Definition of the MsgStream class used to transmit messages. 
const MergeSections & mergeSections() const 
Access merged data section inventory. 
const std::string & fid() const 
Access file id. 
TFile * file() const 
Direct access to TFile structure. 
const std::string & getDb(int which) const 
Access database/file name from saved index. 
TTree * getSection(const std::string §, bool create=false)
Access TTree section from section name. The section is created if required. 
bool isActive() const 
Accessor: is MsgStream active. 
std::vector< RootRef > refs
The references corresponding to the next layer of items in the data store. 
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. 
Persistent reference object. 
This class is used for returning status codes from appropriate routines. 
std::pair< const RootRef *, const ContainerSection * > getMergeSection(const std::string &container, int entry) const 
Access link section for single container and entry. 
const std::string & getCont(int which) const 
Access container name from saved index. 
std::vector< int > links
The links of the link manager. 
Concrete implementation of the IDataConnection interface to access ROOT files. 
Helper functions to set/get the application return code. 
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.