36 Int_t TBufferIO::fgMapSize = kMapSize;
 
   43 TBufferIO::TBufferIO(TBuffer::EMode mode) : TBuffer(mode)
 
   51 TBufferIO::TBufferIO(TBuffer::EMode mode, Int_t bufsiz) : TBuffer(mode, bufsiz)
 
   59 TBufferIO::TBufferIO(TBuffer::EMode mode, Int_t bufsiz, 
void *buf, Bool_t adopt, ReAllocCharFun_t reallocfunc)
 
   60    : TBuffer(mode, bufsiz, buf, adopt, reallocfunc)
 
   68 TBufferIO::~TBufferIO()
 
   77 Int_t TBufferIO::GetVersionOwner()
 const 
   79    TFile *file = (TFile *)GetParent();
 
   81       return file->GetVersion();
 
   97 void TBufferIO::SetReadParam(Int_t mapsize)
 
   99    R__ASSERT(IsReading());
 
  100    R__ASSERT(fMap == 
nullptr);
 
  117 void TBufferIO::SetWriteParam(Int_t mapsize)
 
  119    R__ASSERT(IsWriting());
 
  120    R__ASSERT(fMap == 
nullptr);
 
  129 void TBufferIO::InitMap()
 
  133          fMap = 
new TExMap(fMapSize);
 
  140          fMap = 
new TExMap(fMapSize);
 
  141          fMap->Add(0, kNullTag); 
 
  143       } 
else if (fMapCount == 0) {
 
  144          fMap->Add(0, kNullTag); 
 
  148          fClassMap = 
new TExMap(fMapSize);
 
  149          fClassMap->Add(0, kNullTag); 
 
  163 void TBufferIO::MapObject(
const TObject *obj, UInt_t offset)
 
  171          ULong_t hash = Void_Hash(obj);
 
  172          fMap->Add(hash, (Long_t)obj, offset);
 
  178       if (!fMap || !fClassMap)
 
  181       fMap->Add(offset, (Long_t)obj);
 
  182       fClassMap->Add(offset, (obj && obj != (TObject *)-1) ? (Long_t)((TObject *)obj)->IsA() : 0);
 
  196 void TBufferIO::MapObject(
const void *obj, 
const TClass *cl, UInt_t offset)
 
  204          ULong_t hash = Void_Hash(obj);
 
  205          fMap->Add(hash, (Long_t)obj, offset);
 
  211       if (!fMap || !fClassMap)
 
  214       fMap->Add(offset, (Long_t)obj);
 
  215       fClassMap->Add(offset, (Long_t)cl);
 
  225 Bool_t TBufferIO::CheckObject(
const TObject *obj)
 
  227    return CheckObject(obj, TObject::Class());
 
  235 Bool_t TBufferIO::CheckObject(
const void *obj, 
const TClass *ptrClass)
 
  237    if (!obj || !fMap || !ptrClass)
 
  240    TClass *clActual = ptrClass->GetActualClass(obj);
 
  244    if (clActual && (ptrClass != clActual)) {
 
  245       const char *temp = (
const char *)obj;
 
  246       temp -= clActual->GetBaseClassOffset(ptrClass);
 
  247       idx = (ULong_t)fMap->GetValue(Void_Hash(temp), (Long_t)temp);
 
  249       idx = (ULong_t)fMap->GetValue(Void_Hash(obj), (Long_t)obj);
 
  252    return idx ? kTRUE : kFALSE;
 
  260 void TBufferIO::GetMappedObject(UInt_t tag, 
void *&ptr, TClass *&ClassPtr)
 const 
  268    ptr = (
void *)(Long_t)fMap->GetValue(tag);
 
  269    ClassPtr = (TClass *)(Long_t)fClassMap->GetValue(tag);
 
  277 Long64_t TBufferIO::GetObjectTag(
const void *obj)
 
  282    return fMap->GetValue(Void_Hash(obj), (Long_t)obj);
 
  288 void TBufferIO::ResetMap()
 
  305 void TBufferIO::Reset()
 
  319 void TBufferIO::SetPidOffset(UShort_t offset)
 
  329 void TBufferIO::ForceWriteInfo(TVirtualStreamerInfo *info, Bool_t force)
 
  332       info->ForceWriteInfo((TFile *)GetParent(), force);
 
  341 void TBufferIO::ForceWriteInfoClones(TClonesArray *a)
 
  343    TStreamerInfo *sinfo = (TStreamerInfo *)a->GetClass()->GetStreamerInfo();
 
  344    ForceWriteInfo(sinfo, kFALSE);
 
  350 void TBufferIO::TagStreamerInfo(TVirtualStreamerInfo *info)
 
  352    TFile *file = (TFile *)GetParent();
 
  354       TArrayC *cindex = file->GetClassIndex();
 
  355       Int_t nindex = cindex->GetSize();
 
  356       Int_t number = info->GetNumber();
 
  357       if (number < 0 || number >= nindex) {
 
  358          Error(
"TagStreamerInfo", 
"StreamerInfo: %s number: %d out of range[0,%d] in file: %s", info->GetName(), number,
 
  359                nindex, file->GetName());
 
  362       if (cindex->fArray[number] == 0) {
 
  363          cindex->fArray[0] = 1;
 
  364          cindex->fArray[number] = 1;
 
  372 Int_t TBufferIO::ReadClones(TClonesArray *a, Int_t nobjects, Version_t objvers)
 
  374    char **arr = (
char **)a->GetObjectRef(0);
 
  375    char **end = arr + nobjects;
 
  377    TStreamerInfo *info = (TStreamerInfo *)a->GetClass()->GetStreamerInfo(objvers);
 
  379    return ApplySequenceVecPtr(*(info->GetReadMemberWiseActions(kTRUE)), arr, end);
 
  385 Int_t TBufferIO::WriteClones(TClonesArray *a, Int_t nobjects)
 
  387    char **arr = 
reinterpret_cast<char **
>(a->GetObjectRef(0));
 
  389    TStreamerInfo *info = (TStreamerInfo *)a->GetClass()->GetStreamerInfo();
 
  391    char **end = arr + nobjects;
 
  393    return ApplySequenceVecPtr(*(info->GetWriteMemberWiseActions(kTRUE)), arr, end);
 
  399 TProcessID *TBufferIO::GetLastProcessID(TRefTable *reftable)
 const 
  401    TFile *file = (TFile *)GetParent();
 
  403    if (file && !reftable->TestBit(TRefTable::kHaveWarnedReadingOld) && file->GetNProcessIDs() > 1) {
 
  404       Warning(
"ReadBuffer", 
"The file was written during several processes with an " 
  405                             "older ROOT version; the TRefTable entries might be inconsistent.");
 
  406       reftable->SetBit(TRefTable::kHaveWarnedReadingOld);
 
  410    TProcessID *fileProcessID = TProcessID::GetProcessID(0);
 
  411    if (file && file->GetNProcessIDs() > 0) {
 
  413       fileProcessID = (TProcessID *)file->GetListOfProcessIDs()->Last();
 
  415    return fileProcessID;
 
  422 TProcessID *TBufferIO::ReadProcessID(UShort_t pidf)
 
  424    TFile *file = (TFile *)GetParent();
 
  427          return TProcessID::GetPID(); 
 
  431    TProcessID *pid = 
nullptr;
 
  433       R__LOCKGUARD_IMT(gInterpreterMutex); 
 
  434       pid = file->ReadProcessID(pidf);
 
  447 UInt_t TBufferIO::GetTRefExecId()
 
  449    return TStreamerInfo::GetCurrentElement()->GetUniqueID();
 
  456 UShort_t TBufferIO::WriteProcessID(TProcessID *pid)
 
  458    TFile *file = (TFile *)GetParent();
 
  461    return file->WriteProcessID(pid);
 
  471    virtual ~DynamicType() {}
 
  492 Int_t TBufferIO::WriteObjectAny(
const void *obj, 
const TClass *ptrClass, Bool_t cacheReuse )
 
  495       WriteObjectClass(
nullptr, 
nullptr, kTRUE);
 
  500       Error(
"WriteObjectAny", 
"ptrClass argument may not be 0");
 
  504    TClass *clActual = ptrClass->GetActualClass(obj);
 
  506    if (clActual == 0 || clActual->GetState() == TClass::kForwardDeclared) {
 
  510       DynamicType *d_ptr = (DynamicType *)obj;
 
  511       Warning(
"WriteObjectAny", 
"An object of type %s (from type_info) passed through a %s pointer was truncated (due " 
  512                                 "a missing dictionary)!!!",
 
  513               typeid(*d_ptr).name(), ptrClass->GetName());
 
  514       WriteObjectClass(obj, ptrClass, cacheReuse);
 
  516    } 
else if (clActual && (clActual != ptrClass)) {
 
  517       const char *temp = (
const char *)obj;
 
  518       temp -= clActual->GetBaseClassOffset(ptrClass);
 
  519       WriteObjectClass(temp, clActual, cacheReuse);
 
  522       WriteObjectClass(obj, ptrClass, cacheReuse);
 
  530 void TBufferIO::WriteObject(
const TObject *obj, Bool_t cacheReuse)
 
  532    WriteObjectAny(obj, TObject::Class(), cacheReuse);
 
  548 void TBufferIO::SetGlobalReadParam(Int_t mapsize)
 
  564 void TBufferIO::SetGlobalWriteParam(Int_t mapsize)
 
  572 Int_t TBufferIO::GetGlobalReadParam()
 
  580 Int_t TBufferIO::GetGlobalWriteParam()