|
inlib
1.2.0
|


Public Member Functions | |
| virtual void * | cast (const std::string &a_class) const |
| virtual bool | stream (buffer &a_buffer) |
| virtual bool | read_leaves (buffer &a_buffer) |
| virtual bool | find_entry (uint32 a_entry, uint32 &a_nbytes) |
| branch (ifile &a_file, ifac &a_fac) | |
| virtual | ~branch () |
| uint32 | entry_number () const |
| const std::string & | name () const |
| const std::string & | title () const |
| const std::vector< base_leaf * > & | leaves () const |
| const std::vector< branch * > & | branches () const |
| bool | show (std::ostream &a_out, uint32 a_entry) |
Static Public Member Functions | |
| static const std::string & | s_class () |
Protected Member Functions | |
| branch (const branch &a_from) | |
| branch & | operator= (const branch &) |
| basket * | get_basket (seek a_pos, uint32 a_len) |
| void | _clear () |
| void | _dump_first_last () |
Static Protected Member Functions | |
| static std::string | sout (const std::string &a_string) |
Protected Attributes | |
| ifile & | m_file |
| std::ostream & | m_out |
| ifac & | m_fac |
| std::vector< std::pair< uint32, uint32 > > | m_first_last |
| std::map< uint32, std::pair < basket *, bool > > | m_baskets |
| ObjArray< basket > | m_streamed_baskets |
| basket * | m__read_basket |
| std::string | m_name |
| std::string | m_title |
| bool | fAutoDelete |
| ObjArray< branch > | m_branches |
| ObjArray< base_leaf > | m_leaves |
| uint32 | fEntryOffsetLen |
| uint32 | m_write_basket |
| uint32 | m_entry_number |
| uint32 | m_read_basket |
| int * | fBasketBytes |
| Current basket number when reading. | |
| int * | fBasketEntry |
| seek * | fBasketSeek |
Definition at line 704 of file branch.
:m_file(a_file) ,m_out(a_file.out()) ,m_fac(a_fac) ,m_streamed_baskets(true) ,m__read_basket(0) //,m_bits(0) ,m_name("") ,m_title("") ,fAutoDelete(false) ,m_branches(true) ,m_leaves(true) ,fEntryOffsetLen(0) ,m_write_basket(0) ,m_entry_number(0) ,m_read_basket(0) ,fBasketBytes(0) ,fBasketEntry(0) ,fBasketSeek(0) { #ifdef INLIB_MEM mem::increment(s_class().c_str()); #endif }
| virtual inlib::rroot::branch::~branch | ( | ) | [inline, virtual] |
| inlib::rroot::branch::branch | ( | const branch & | a_from | ) | [inline, protected] |
Definition at line 739 of file branch.
: iro(a_from) ,m_file(a_from.m_file),m_out(a_from.m_out),m_fac(a_from.m_fac) ,m_streamed_baskets(false),m__read_basket(0) ,m_branches(false),m_leaves(false){}
| void inlib::rroot::branch::_clear | ( | ) | [inline, protected] |
Definition at line 843 of file branch.
{
delete [] fBasketEntry;
delete [] fBasketBytes;
delete [] fBasketSeek;
fBasketEntry = 0;
fBasketBytes = 0;
fBasketSeek = 0;
{std::map<uint32, std::pair<basket*,bool> >::iterator it;
for(it=m_baskets.begin();it!=m_baskets.end();++it) {
if((*it).second.second) delete (*it).second.first;
}
m_baskets.clear();}
m_branches.cleanup();
m_leaves.cleanup();
m_streamed_baskets.cleanup();
}
| void inlib::rroot::branch::_dump_first_last | ( | ) | [inline, protected] |
Definition at line 862 of file branch.
{
m_out << "inlib::rroot::branch::_dump_first_last :"
<< " first_last " << m_first_last.size()
<< std::endl;
std::vector< std::pair<uint32,uint32> >::const_iterator it;
for(it=m_first_last.begin();it!=m_first_last.end();++it) {
uint32 first = (*it).first;
uint32 last = (*it).second;
m_out << "inlib::rroot::branch::stream :"
<< " first " << first
<< " last " << last
<< std::endl;
}
}
| const std::vector<branch*>& inlib::rroot::branch::branches | ( | ) | const [inline] |
Definition at line 750 of file branch.
{return m_branches;}
| virtual void* inlib::rroot::branch::cast | ( | const std::string & | a_class | ) | const [inline, virtual] |
Implements inlib::rroot::iro.
Reimplemented in inlib::rroot::branch_element.
Definition at line 28 of file branch.
{
if(void* p = inlib::cmp_cast<branch>(this,a_class)) {return p;}
else return 0;
}
| uint32 inlib::rroot::branch::entry_number | ( | ) | const [inline] |
Definition at line 746 of file branch.
{return m_entry_number;}
| virtual bool inlib::rroot::branch::find_entry | ( | uint32 | a_entry, |
| uint32 & | a_nbytes | ||
| ) | [inline, virtual] |
Reimplemented in inlib::rroot::branch_element.
Definition at line 498 of file branch.
{
// Read all leaves of entry and return total number of bytes :
// The input argument entry is the entry serial number in the current tree.
a_nbytes = 0;
//if(_test_bit(kDoNotProcess())) return true;
//if(fReadEntry == (int)a_entry) return true;
if(a_entry>=m_entry_number) {
//m_out << "inlib::rroot::branch::find_entry :"
// << " for branch " << sout(m_name) << " :"
// << " a_entry not within [0," << m_entry_number << "[."
// << std::endl;
//return false;
return true; //CERN-ROOT does not consider it is an error.
}
if(!m_entry_number || m_first_last.empty() ) { //GB
m_out << "inlib::rroot::branch::find_entry :"
<< " nothing to read."
<< std::endl;
return false; //nothing to read.
}
if(m_read_basket>=m_first_last.size()) {
m_out << "inlib::rroot::branch::find_entry :"
<< " bad m_first_last access."
<< std::endl;
return false;
}
uint32 first = m_first_last[m_read_basket].first;
uint32 last = m_first_last[m_read_basket].second;
// Are we still in the same ReadBasket?
if((a_entry<first)||(a_entry>last)) {
m__read_basket = 0;
uint32 old_read_basket = m_read_basket;
//look first in the next basket window :
bool found = false;
if((m_read_basket+1)<m_first_last.size()) {
first = m_first_last[m_read_basket+1].first;
last = m_first_last[m_read_basket+1].second;
if((a_entry>=first)&&(a_entry<=last)) {
m_read_basket++;
found = true;
}
}
if(!found) {
uint32 count = 0;
std::vector< std::pair<uint32,uint32> >::const_iterator it;
for(it=m_first_last.begin();it!=m_first_last.end();++it,count++) {
first = (*it).first;
last = (*it).second;
if((a_entry>=first)&&(a_entry<=last)) {
m_read_basket = count;
found = true;
break;
}
}
}
if(!found) { //something weird in fBasketEntry.
m_out << "inlib::rroot::branch::find_entry :"
<< " fancy fBasketEntry."
<< std::endl;
return false;
} else {
// if found, erase m_baskets[old_read_basket] to avoid
// having all data in memory !
std::map<uint32, std::pair<rroot::basket*,bool> >::iterator it =
m_baskets.find(old_read_basket);
if(it!=m_baskets.end()) {
if((*it).second.second) {
basket* bsk = (*it).second.first;
m_baskets.erase(it);
delete bsk;
//::printf("debug : erase basket %d\n",old_read_basket);
}
}
}
}
if(!m__read_basket) {
rroot::basket* bsk = 0;
std::map<uint32, std::pair<basket*,bool> >::iterator it =
m_baskets.find(m_read_basket);
if(it!=m_baskets.end()) {
bsk = (*it).second.first;
} else {
if(m_read_basket>=m_write_basket) {
m_out << "inlib::rroot::branch::find_entry :"
<< " basket lacking !"
<< " wanting index " << m_read_basket
<< ". fBasketSeek entries " << m_write_basket
<< std::endl;
return false;
}
if(!fBasketSeek[m_read_basket]) {
m_out << "inlib::rroot::branch::find_entry :"
<< " fBasketSeek is null for index " << m_read_basket
<< std::endl;
return false;
}
if(!fBasketBytes[m_read_basket]) {
m_out << "inlib::rroot::branch::find_entry :"
<< " fBasketBytes is null for index " << m_read_basket
<< std::endl;
return false;
}
bsk = get_basket(fBasketSeek[m_read_basket],
fBasketBytes[m_read_basket]);
if(!bsk) {
m_out << "inlib::rroot::branch::find_entry :"
<< " can't read basket " << m_read_basket
<< " at file pos " << fBasketSeek[m_read_basket]
<< " and size " << fBasketBytes[m_read_basket]
<< std::endl;
return false;
}
//m_out << "inlib::rroot::branch::find_entry :"
// << " got basket " << m_read_basket
// << " of size " << fBasketBytes[m_read_basket]
// << std::endl;
m_baskets[m_read_basket] = std::pair<basket*,bool>(bsk,true);
}
m__read_basket = bsk;
}
// Set entry offset in buffer and read data from all leaves
//buf->resetMap();
uint32 bufbegin;
{int* entry_offset = m__read_basket->entry_offset();
if(entry_offset) {
uint32 index = a_entry-first;
if(index>=m__read_basket->nev()) {
m_out << "inlib::rroot::branch::find_entry :"
<< " can't access entry offset " << index
<< ". nev " << m__read_basket->nev()
<< std::endl;
return false;
}
bufbegin = entry_offset[index];
//::printf("debug : xxx++ %u : %u\n",index,bufbegin);
} else {
bufbegin = m__read_basket->key_length() +
(a_entry-first)*m__read_basket->nev_buf_size();
}}
{int* displacement = m__read_basket->displacement();
if(displacement) {
m_out << "inlib::rroot::branch::find_entry :"
<< " not null displacement. Not yet handled."
<< std::endl;
//buf->setDisplacement(displacement[a_entry-first]);
} else {
//buf->setDisplacement();
}}
/*
if(bufbegin>=m__read_basket->buf_size()) {
m_out << "inlib::rroot::branch::find_entry :"
<< " bad buffer access for entry " << a_entry
<< ". bufbegin " << bufbegin
<< ", buf_size " << basket->buf_size()
<< ", (entry-first) " << (a_entry-first)
<< std::endl;
{int* entry_offset = m__read_basket->entry_offset();
if(entry_offset) {
uint32 nev = m__read_basket->nev();
::printf("debug : eoff : num %d\n",nev);
for(uint32 i=0;i<nev;i++){
::printf("debug : eoff %d : %d\n",i,entry_offset[i]);
}
}}
return false;
}
*/
rroot::buffer buffer(m_out,m_file.byte_swap(),
m__read_basket->buf_size(),m__read_basket->buf(),0,false);
buffer.set_offset(bufbegin);
if(!read_leaves(buffer)) {
m_out << "inlib::rroot::branch::find_entry :"
<< " can't read leaves for entry " << a_entry
<< ". read_basket was " << m_read_basket
<< ", first " << first
<< ", last " << last
<< "."
<< std::endl;
return false;
}
//fReadEntry = a_entry;
a_nbytes = buffer.length() - bufbegin;
return true;
}
Definition at line 782 of file branch.
{
//if(fBranch.tree().memoryFull(fBufferSize)) fBranch.dropBaskets();
if(!a_len) return 0;
rroot::basket* basket =
new rroot::basket(m_file,a_pos,a_len); //basket is a key.
if(!basket->read_file()) {
m_out << "inlib::rroot::branch::get_basket :"
<< " read_file() failed."
<< std::endl;
delete basket;
return 0;
}
{rroot::buffer buffer(m_out,m_file.byte_swap(),
a_len,basket->buf(),0,false);
if(!basket->stream(buffer)) {
m_out << "inlib::rroot::branch::get_basket :"
<< " basket stream failed."
<< std::endl;
delete basket;
return 0;
}}
unsigned int sz;
char* buf = basket->get_object_buffer(sz); //basket owns buf.
if(!buf) {
m_out << "inlib::rroot::branch::get_basket :"
<< " get_object_buffer() failed."
<< std::endl;
delete basket;
return 0;
}
if(basket->seek_key()!=a_pos) { //consistency check.
m_out << "inlib::rroot::branch::get_basket :"
<< " seek anomaly."
<< " a_pos " << a_pos
<< " seek_key() " << basket->seek_key()
<< std::endl;
delete basket;
return 0;
}
//if(basket->nbytes()!=a_len) { //consistency check.
// m_out << "inlib::rroot::branch::get_basket :"
// << " WARNING : length anomaly."
// << " a_len " << a_len
// << " nbytes() " << basket->nbytes()
// << std::endl;
//}
if(fEntryOffsetLen) {
if(!basket->read_offset_tables()) {
m_out << "inlib::rroot::branch::get_basket :"
<< " read_offset_tables failed."
<< std::endl;
delete basket;
return 0;
}}
return basket;
}
| const std::vector<base_leaf*>& inlib::rroot::branch::leaves | ( | ) | const [inline] |
| const std::string& inlib::rroot::branch::name | ( | ) | const [inline] |
| virtual bool inlib::rroot::branch::read_leaves | ( | buffer & | a_buffer | ) | [inline, virtual] |
Reimplemented in inlib::rroot::branch_element.
| static const std::string& inlib::rroot::branch::s_class | ( | ) | [inline, static] |
Reimplemented in inlib::rroot::branch_element.
Definition at line 23 of file branch.
{
static const std::string s_v("inlib::rroot::branch");
return s_v;
}
| bool inlib::rroot::branch::show | ( | std::ostream & | a_out, |
| uint32 | a_entry | ||
| ) | [inline] |
Definition at line 752 of file branch.
{
// Print values of all active leaves for entry :
// if entry==-1, print current entry (default)
uint32 n;
if(!find_entry(a_entry,n)) return false;
std::vector<base_leaf*>::const_iterator it;
for(it=m_leaves.begin();it!=m_leaves.end();++it) {
base_leaf* bl = *it;
uint32 num = bl->num_elem();
num = inlib::mn<uint32>(num,10);
if(!num) continue;
{std::string s;
uint32 len = bl->name().size()+128;
inlib::sprintf(s,len," %-15s = ",bl->name().c_str());
a_out << s;}
for(uint32 i=0;i<num;i++) {
if(i) a_out << ", ";
bl->print_value(a_out,i);
}
a_out << std::endl;
}
return true;
}
| static std::string inlib::rroot::branch::sout | ( | const std::string & | a_string | ) | [inline, static, protected] |
| virtual bool inlib::rroot::branch::stream | ( | buffer & | a_buffer | ) | [inline, virtual] |
Implements inlib::rroot::iro.
Reimplemented in inlib::rroot::branch_element.
Definition at line 32 of file branch.
{
_clear();
int fCompress;
int fBasketSize;
int fNleaves;
uint64 m_entries;
uint64 m_tot_bytes;
uint64 m_zip_bytes;
int fSplitLevel;
uint32 fMaxBaskets;
int fOffset;
unsigned int s,c;
//FIXME gROOT->SetReadingObject(kTRUE);
short v;
if(!a_buffer.read_version(v,s,c)) return false;
//::printf("debug : branch::stream : version %d count %d\n",v,c);
if (v > 5) {
//TBranch::Class()->ReadBuffer(b, this, v, s, c);
//gBranch = branchSave;
//fDirectory = gDirectory;
//fNleaves = m_leaves.GetEntriesFast();
//if (fFileName.Length() != 0) fDirectory = 0;
//gROOT->SetReadingObject(kFALSE);
//return;
}
//====process old versions before automatic schema evolution
{uint32 old = a_buffer.length();
uint32 id;
uint32 m_bits;
if(!Object_stream(a_buffer,id,m_bits)) return false;
a_buffer.set_offset(old);}
if(!Named_stream(a_buffer,m_name,m_title)) return false;
//::printf("debug : branch::stream %s %s\n",
// m_name.c_str(),m_title.c_str());
if(v<=5) {
if(!a_buffer.read(fCompress)) return false;
if(!a_buffer.read(fBasketSize)) return false;
if(!a_buffer.read(fEntryOffsetLen)) return false;
if(!a_buffer.read(fMaxBaskets)) return false;
if(!a_buffer.read(m_write_basket)) return false;
if(!a_buffer.read(m_entry_number)) return false;
{double v;
if(!a_buffer.read(v)) return false;
m_entries = uint64(v);}
{double v;
if(!a_buffer.read(v)) return false;
m_tot_bytes = uint64(v);}
{double v;
if(!a_buffer.read(v)) return false;
m_zip_bytes = uint64(v);}
if(!a_buffer.read(fOffset)) return false;
} else if(v<=6) {
if(!a_buffer.read(fCompress)) return false;
if(!a_buffer.read(fBasketSize)) return false;
if(!a_buffer.read(fEntryOffsetLen)) return false;
if(!a_buffer.read(m_write_basket)) return false;
if(!a_buffer.read(m_entry_number)) return false;
if(!a_buffer.read(fOffset)) return false;
if(!a_buffer.read(fMaxBaskets)) return false;
{double v;
if(!a_buffer.read(v)) return false;
m_entries = uint64(v);}
{double v;
if(!a_buffer.read(v)) return false;
m_tot_bytes = uint64(v);}
{double v;
if(!a_buffer.read(v)) return false;
m_zip_bytes = uint64(v);}
} else if(v<=7) {
if(!a_buffer.read(fCompress)) return false;
if(!a_buffer.read(fBasketSize)) return false;
if(!a_buffer.read(fEntryOffsetLen)) return false;
if(!a_buffer.read(m_write_basket)) return false;
if(!a_buffer.read(m_entry_number)) return false;
if(!a_buffer.read(fOffset)) return false;
if(!a_buffer.read(fMaxBaskets)) return false;
if(!a_buffer.read(fSplitLevel)) return false;
{double v;
if(!a_buffer.read(v)) return false;
m_entries = uint64(v);}
{double v;
if(!a_buffer.read(v)) return false;
m_tot_bytes = uint64(v);}
{double v;
if(!a_buffer.read(v)) return false;
m_zip_bytes = uint64(v);}
} else if(v<=9) {
if(!AttFill_stream(a_buffer)) return false;
if(!a_buffer.read(fCompress)) return false;
if(!a_buffer.read(fBasketSize)) return false;
if(!a_buffer.read(fEntryOffsetLen)) return false;
if(!a_buffer.read(m_write_basket)) return false;
if(!a_buffer.read(m_entry_number)) return false;
if(!a_buffer.read(fOffset)) return false;
if(!a_buffer.read(fMaxBaskets)) return false;
if(!a_buffer.read(fSplitLevel)) return false;
{double v;
if(!a_buffer.read(v)) return false;
m_entries = uint64(v);}
{double v;
if(!a_buffer.read(v)) return false;
m_tot_bytes = uint64(v);}
{double v;
if(!a_buffer.read(v)) return false;
m_zip_bytes = uint64(v);}
} else if(v<=10) {
if(!AttFill_stream(a_buffer)) return false;
if(!a_buffer.read(fCompress)) return false;
if(!a_buffer.read(fBasketSize)) return false;
if(!a_buffer.read(fEntryOffsetLen)) return false;
if(!a_buffer.read(m_write_basket)) return false;
{uint64 v;
if(!a_buffer.read(v)) return false;
m_entry_number = uint32(v);}
if(!a_buffer.read(fOffset)) return false;
if(!a_buffer.read(fMaxBaskets)) return false;
if(!a_buffer.read(fSplitLevel)) return false;
{uint64 v;
if(!a_buffer.read(v)) return false;
m_entries = v;}
{uint64 v;
if(!a_buffer.read(v)) return false;
m_tot_bytes = v;}
{uint64 v;
if(!a_buffer.read(v)) return false;
m_zip_bytes = v;}
} else { //v>=11
if(!AttFill_stream(a_buffer)) return false;
if(!a_buffer.read(fCompress)) return false;
if(!a_buffer.read(fBasketSize)) return false;
if(!a_buffer.read(fEntryOffsetLen)) return false;
if(!a_buffer.read(m_write_basket)) return false;
{uint64 v;
if(!a_buffer.read(v)) return false;
m_entry_number = uint32(v);}
if(!a_buffer.read(fOffset)) return false;
if(!a_buffer.read(fMaxBaskets)) return false;
if(!a_buffer.read(fSplitLevel)) return false;
{uint64 v;
if(!a_buffer.read(v)) return false;
m_entries = v;}
{uint64 v;
if(!a_buffer.read(v)) return false;} //fFirstEntry
{uint64 v;
if(!a_buffer.read(v)) return false;
m_tot_bytes = v;}
{uint64 v;
if(!a_buffer.read(v)) return false;
m_zip_bytes = v;}
}
//::printf("debug : branch::stream : %s : fSplitLevel %d\n",m_name.c_str(),fSplitLevel);
//TObjArray
//::printf("debug : branch::stream : branches : begin\n");
{ifac::args args;
if(!m_branches.stream(a_buffer,m_fac,args)) {
m_out << "inlib::rroot::branch::stream :"
<< " can't read branches."
<< std::endl;
return false;
}}
//::printf("debug : branch::stream : branches : end %d\n",
// m_branches.size());
/* We see that with LHCb files.
if(m_entry_number!=m_entries) {
m_out << "inlib::rroot::branch::stream :"
<< " for branch " << sout(m_name) << " :"
<< " WARNING : m_entry_number!=m_entries."
<< " m_entry_number " << m_entry_number
<< " m_entries " << m_entries
<< std::endl;
//return false;
}
*/
//TObjArray
//::printf("debug : branch::stream : leaves : begin\n");
{ifac::args args;
args[ifac::arg_branch()] = this;
if(!m_leaves.stream(a_buffer,m_fac,args)) {
m_out << "inlib::rroot::branch::stream :"
<< " can't read leaves."
<< std::endl;
return false;
}}
//::printf("debug : branch::stream : leaves : end\n");
//TObjArray
//IMPORTANT : accept_null=true
//::printf("debug : branch::stream : streamed_baskets : begin\n");
{ifac::args args;
if(!m_streamed_baskets.stream(a_buffer,m_fac,args,true)) {
m_out << "inlib::rroot::branch::stream :"
<< " can't read baskets."
<< std::endl;
return false;
}}
//::printf("debug : branch::stream : streamed_baskets : end\n");
fNleaves = m_leaves.size();
if(fMaxBaskets<=0) {
m_out << "inlib::rroot::branch::stream :"
<< " fMaxBaskets null."
<< std::endl;
return false;
}
fBasketEntry = new int[fMaxBaskets];
fBasketBytes = new int[fMaxBaskets];
fBasketSeek = new seek[fMaxBaskets];
{for(uint32 i=0;i<fMaxBaskets;i++) {
fBasketEntry[i] = 0;
fBasketBytes[i] = 0;
fBasketSeek[i] = 0;
}}
if(v<6) {
{uint32 n;
if(!a_buffer.read_array<int>(fMaxBaskets,fBasketEntry,n)) {
_clear();
return false;
}}
if(v<=4) {
for (uint32 i=0;i<fMaxBaskets;i++) fBasketBytes[i] = 0;
} else {
uint32 n;
if(!a_buffer.read_array<int>(fMaxBaskets,fBasketBytes,n)) {
_clear();
return false;
}
}
if(v<2) {
//GB : comment.
//for(int i=0;i<m_write_basket;i++) {
// fBasketSeek[i] = getBasket(i)->seekKey();
//}
m_out << "inlib::rroot::branch::stream :"
<< " v < 2. Not (yet) handled."
<< std::endl;
_clear();
return false;
} else {
int n;
if(!a_buffer.read(n)) {
_clear();
return false;
}
for(int i=0;i<n;i++) {
seek32 s;
if(!a_buffer.read(s)) {
_clear();
return false;
}
fBasketSeek[i] = s;
}
}
} else if(v<=9) {
// See TStreamerInfo::ReadBuffer::ReadBasicPointer
//Int_t[fMaxBaskets]
{char isArray;
if(!a_buffer.read(isArray)) {
_clear();
return false;
}
if(isArray) {
if(!a_buffer.read_fast_array<int>(fBasketBytes,fMaxBaskets)) {
_clear();
return false;
}
}}
//Int_t[fMaxBaskets]
{char isArray;
if(!a_buffer.read(isArray)) {
_clear();
return false;
}
if(isArray) {
if(!a_buffer.read_fast_array<int>(fBasketEntry,fMaxBaskets)) {
_clear();
return false;
}
}}
//Seek_t[fMaxBaskets]
{char isBigFile;
if(!a_buffer.read(isBigFile)) {
_clear();
return false;
}
if(isBigFile==2) {
if(!a_buffer.read_fast_array<seek>(fBasketSeek,fMaxBaskets)) {
_clear();
return false;
}
} else {
for(uint32 i=0;i<fMaxBaskets;i++) {
seek32 s;
if(!a_buffer.read(s)) {
_clear();
return false;
}
fBasketSeek[i] = s;
}
}}
} else { //v>=10
// See TStreamerInfo::ReadBuffer::ReadBasicPointer
//Int_t[fMaxBaskets]
{char isArray;
if(!a_buffer.read(isArray)) {
_clear();
return false;
}
if(isArray) {
if(!a_buffer.read_fast_array<int>(fBasketBytes,fMaxBaskets)) {
_clear();
return false;
}
}}
//Long64_t[fMaxBaskets]
{char isArray;
if(!a_buffer.read(isArray)) {
_clear();
return false;
}
if(isArray) {
uint64* v = new uint64[fMaxBaskets];
if(!a_buffer.read_fast_array<uint64>(v,fMaxBaskets)) {
_clear();
return false;
}
for(uint32 i=0;i<fMaxBaskets;i++) fBasketEntry[i] = int(v[i]);
delete [] v;
}}
//Long64_t[fMaxBaskets]
{char isArray;
if(!a_buffer.read(isArray)) {
_clear();
return false;
}
if(isArray) {
uint64* v = new uint64[fMaxBaskets];
if(!a_buffer.read_fast_array<uint64>(v,fMaxBaskets)) {
_clear();
return false;
}
for(uint32 i=0;i<fMaxBaskets;i++) fBasketSeek[i] = v[i];
delete [] v;
}}
}
if(v>2) {
//TString
std::string fileName;
if(!a_buffer.read(fileName)) {
_clear();
return false;
}
}
//FIXME if (v < 4) SetAutoDelete(kTRUE);
//FIXME gROOT->SetReadingObject(kFALSE);
if(!a_buffer.check_byte_count(s, c,"TBranch")) {
_clear();
return false;
}
//GB : analyse fBasketEntry.
m_first_last.clear();
{// There are (m_write_basket+1) sensitive elements in fBasketEntry :
// (Do we have to check that ?)
for(uint32 i=0;i<m_write_basket;i++) {
uint32 first = fBasketEntry[i];
uint32 last = fBasketEntry[i+1]-1;
m_first_last.push_back(std::pair<uint32,uint32>(first,last));
}
if(m_entry_number) {
uint32 first = fBasketEntry[m_write_basket];
uint32 last = m_entry_number-1;
m_first_last.push_back(std::pair<uint32,uint32>(first,last));
}}
//_dump_first_last();
//GB : analyse fBasketSeek :
{uint32 num = 0;
uint32 mxi = 0;
for(uint32 i=0;i<fMaxBaskets;i++) {
if(!fBasketSeek[i]) continue;
num++;
mxi = inlib::mx(i,mxi);
}
if(m_write_basket) {
if((num!=m_write_basket)||(mxi!=(m_write_basket-1))) {
m_out << "inlib::rroot::branch::stream :"
<< " fBasketSeek[] inconsistent with m_write_basket."
<< " m_write_basket " << m_write_basket
<< " num " << num
<< " mxi " << mxi
<< std::endl;
_clear();
return false;
}
}}
//GB : analyse m_streamed_baskets :
{std::vector<basket*>::iterator it;
int index=0;
for(it=m_streamed_baskets.begin();
it!=m_streamed_baskets.end();++it,index++) {
if(*it) {
if(!(*it)->buf()||!(*it)->buf_size()) {
m_out << "inlib::rroot::branch::stream :"
<< " expect a basket with a not empty buffer."
<< std::endl;
return false;
}
//in the below, false is to say m_baskets is not owner of *it.
m_baskets[index] = std::pair<basket*,bool>(*it,false);
}
}}
return true;
}
| const std::string& inlib::rroot::branch::title | ( | ) | const [inline] |
bool inlib::rroot::branch::fAutoDelete [protected] |
int* inlib::rroot::branch::fBasketBytes [protected] |
int* inlib::rroot::branch::fBasketEntry [protected] |
seek* inlib::rroot::branch::fBasketSeek [protected] |
uint32 inlib::rroot::branch::fEntryOffsetLen [protected] |
basket* inlib::rroot::branch::m__read_basket [protected] |
std::map<uint32, std::pair<basket*,bool> > inlib::rroot::branch::m_baskets [protected] |
ObjArray<branch> inlib::rroot::branch::m_branches [protected] |
uint32 inlib::rroot::branch::m_entry_number [protected] |
ifac& inlib::rroot::branch::m_fac [protected] |
ifile& inlib::rroot::branch::m_file [protected] |
std::vector< std::pair<uint32,uint32> > inlib::rroot::branch::m_first_last [protected] |
ObjArray<base_leaf> inlib::rroot::branch::m_leaves [protected] |
std::string inlib::rroot::branch::m_name [protected] |
std::ostream& inlib::rroot::branch::m_out [protected] |
uint32 inlib::rroot::branch::m_read_basket [protected] |
ObjArray<basket> inlib::rroot::branch::m_streamed_baskets [protected] |
std::string inlib::rroot::branch::m_title [protected] |
uint32 inlib::rroot::branch::m_write_basket [protected] |
1.7.5.1