30#define DOLOOP for(int k=0; k<narr; ++k)
32#define WriteBasicTypeElem(name,index) \
34 name *x=(name*)(arr[index]+ioffset); \
38#define WriteBasicType(name) \
40 WriteBasicTypeElem(name,0); \
43#define WriteBasicTypeLoop(name) \
45 for(int k=0; k<narr; ++k) WriteBasicTypeElem(name,k); \
48#define WriteBasicArrayElem(name,index) \
50 name *x=(name*)(arr[index]+ioffset); \
51 b.WriteFastArray(x,compinfo[i]->fLength); \
54#define WriteBasicArray(name) \
56 WriteBasicArrayElem(name,0); \
59#define WriteBasicArrayLoop(name) \
61 for(int k=0; k<narr; ++k) WriteBasicArrayElem(name,k); \
64#define WriteBasicPointerElem(name,index) \
66 Int_t *l = (Int_t*)(arr[index]+imethod); \
67 name **f = (name**)(arr[index]+ioffset); \
69 if (af && *l) b << Char_t(1); \
70 else {b << Char_t(0); continue;} \
72 for(j=0;j<compinfo[i]->fLength;j++) { \
73 b.WriteFastArray(f[j],*l); \
77#define WriteBasicPointer(name) \
79 int imethod = compinfo[i]->fMethod+eoffset; \
80 WriteBasicPointerElem(name,0); \
83#define WriteBasicPointerLoop(name) \
85 int imethod = compinfo[i]->fMethod+eoffset; \
86 for(int k=0; k<narr; ++k) { \
87 WriteBasicPointerElem(name,k); \
124 b.TagStreamerInfo(
this);
139 for (
Int_t i=first;i<last;i++) {
149 if (
b.PeekDataCache() == 0) {
153 printf(
"WriteBuffer, class:%s, name=%s, fType[%d]=%d,"
154 " %s, bufpos=%d, arr=%p, eoffset=%d, Redirect=%p\n",
156 b.Length(),
arr[0],
eoffset,
b.PeekDataCache()->GetObjectAt(0));
163 printf(
"WriteBuffer, class:%s, name=%s, fType[%d]=%d,"
164 " %s, bufpos=%d, arr=%p, eoffset=%d, not a write rule, skipping.\n",
177 printf(
"WriteBuffer, class:%s, name=%s, fType[%d]=%d, %s, "
178 "bufpos=%d, arr=%p, offset=%d\n",
226 for(
int k=0; k<
narr; ++k) {
233 for(
int k=0; k<
narr; ++k) {
277 for(
int k=0; k<
narr; ++k) {
283 for(
int k=0; k<
narr; ++k) {
309 else {
b <<
Char_t(0);
continue;}
322 else {
b <<
Char_t(0);
continue;}
345 for(
int k=0; k<
narr; ++k) {
350 else {
b <<
Char_t(0);
continue;}
360 for(
int k=0; k<
narr; ++k) {
365 else {
b <<
Char_t(0);
continue;}
408 const auto parent =
b.GetParent();
449 "The actual class of %s::%s is not available. Only the \"%s\" part will be written\n",
466 else {
b <<
Char_t(0);
continue;}
516 && !(
vClass->HasCustomStreamerMember()) ) {
538 b.ApplySequence(*
actions, begin, end);
542 proxy->GetFunctionDeleteTwoIterators()(begin,end);
547 b.SetByteCount(pos,
kTRUE);
551 if (pstreamer == 0) {
562 b.SetByteCount(pos,
kTRUE);
577 && !(
vClass->HasCustomStreamerMember()) ) {
602 b.ApplySequence(*
actions, begin, end);
605 proxy->GetFunctionDeleteTwoIterators()(begin,end);
610 b.SetByteCount(pos,
kTRUE);
614 if (pstreamer == 0) {
621 b.SetByteCount(pos,
kTRUE);
646 b.SetByteCount(pos,
kTRUE);
658 b.SetByteCount(pos,
kTRUE);
674 if (pstreamer == 0) {
675 printf(
"ERROR, Streamer is null\n");
680 b.SetByteCount(pos,
kTRUE);
705 for (
int k = 0; k <
narr; ++k) {
711 b.SetByteCount(pos,
kTRUE);
725 if (fileVersion > 51508) {
728 for (
int k = 0; k <
narr; ++k) {
746 b.WriteFastArray(pp[
ndx], cl,
vlen, 0);
761 for (
int k = 0; k <
narr; ++k) {
789 char**
r = (
char**) pp[
ndx];
799 b.SetByteCount(pos,
kTRUE);
871 char **
arr =
reinterpret_cast<char**
>(
clones->GetObjectRef(0));
#define R__unlikely(expr)
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
#define R__ASSERT(e)
Checks condition e and reports a fatal error if it's false.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
Option_t Option_t TPoint TPoint const char mode
#define WriteBasicArray(name)
#define WriteBasicPointer(name)
#define WriteBasicPointerLoop(name)
#define WriteBasicArrayLoop(name)
#define WriteBasicTypeLoop(name)
#define WriteBasicType(name)
Buffer base class used for serializing objects.
@ kCannotHandleMemberWiseStreaming
virtual void WriteFastArray(const Bool_t *b, Long64_t n)=0
virtual UInt_t WriteVersion(const TClass *cl, Bool_t useBcnt=kFALSE)=0
TClass instances represent classes, structs and namespaces in the ROOT type system.
void Streamer(void *obj, TBuffer &b, const TClass *onfile_class=nullptr) const
Bool_t CanSplit() const
Return true if the data member of this TClass can be saved separately.
Int_t Size() const
Return size of object of this class.
TVirtualStreamerInfo * GetStreamerInfo(Int_t version=0, Bool_t isTransient=kFALSE) const
returns a pointer to the TVirtualStreamerInfo object for version If the object does not exist,...
TVirtualCollectionProxy * GetCollectionProxy() const
Return the proxy describing the collection (if any).
An array of clone (identical) objects.
A ROOT file is an on-disk file, usually with extension .root, that stores objects in a file-system-li...
@ k630forwardCompatibility
The TNamed class is the base class for all named ROOT classes.
const char * GetName() const override
Returns name of object.
void Streamer(TBuffer &) override
Stream an object of class TObject.
Mother of all ROOT objects.
virtual UInt_t GetUniqueID() const
Return the unique object id.
virtual void Streamer(TBuffer &)
Stream an object of class TObject.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
@ kIsReferenced
if object is referenced by a TRef or TRefArray
A TProcessID identifies a ROOT job in a unique way in time and space.
static TProcessID * GetProcessWithUID(const TObject *obj)
static function returning a pointer to TProcessID with its pid encoded in the highest byte of obj->Ge...
A TRefTable maintains the association between a referenced object and the parent object supporting th...
static TRefTable * GetRefTable()
Static function returning the current TRefTable.
virtual Int_t Add(Int_t uid, TProcessID *context=nullptr)
Add a new uid to the table.
Describes a persistent version of a class.
Int_t fNfulldata
!number of elements
Int_t WriteBufferSTL(TBuffer &b, TVirtualCollectionProxy *cont, Int_t nc)
Write for STL container. ('first' is an id between -1 and fNfulldata).
TCompInfo ** fCompFull
![fElements->GetEntries()]
Int_t fNdata
!number of optimized elements
TClass * IsA() const override
TClass * fClass
!pointer to class
TCompInfo ** fCompOpt
![fNdata]
void Streamer(TBuffer &) override
Stream an object of class TStreamerInfo.
Int_t WriteBuffer(TBuffer &b, char *pointer, Int_t first)
General Write.
Int_t WriteBufferClones(TBuffer &b, TClonesArray *clones, Int_t nc, Int_t first, Int_t eoffset)
Write for ClonesArray ('first' is an id between -1 and fNfulldata).
Int_t WriteBufferAux(TBuffer &b, const T &arr, TCompInfo *const *const compinfo, Int_t first, Int_t last, Int_t narr, Int_t eoffset, Int_t mode)
The object at pointer is serialized to the buffer b if (arrayMode & 1) ptr is a pointer to array of p...
Int_t WriteBufferSTLPtrs(TBuffer &b, TVirtualCollectionProxy *cont, Int_t nc, Int_t first, Int_t eoffset)
Write for STL container.
Wrapper around an object and giving indirect access to its content even if the object is not of a cla...
RAII helper class that ensures that PushProxy() / PopProxy() are called when entering / leaving a C++...
Defines a common interface to inspect/change the contents of an object that represents a collection.
static const Int_t fgIteratorArenaSize
The size of a small buffer that can be allocated on the stack to store iterator-specific information.
static Bool_t GetStreamMemberWise()
Return whether the TStreamerInfos will save the collections in "member-wise" order whenever possible.
@ kUChar
Equal to TDataType's kchar.