Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TGenCollectionProxy.h
Go to the documentation of this file.
1// @(#)root/io:$Id$
2// Author: Markus Frank 28/10/04
3
4/*************************************************************************
5 * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11#ifndef ROOT_TGenCollectionProxy
12#define ROOT_TGenCollectionProxy
13
14#include "TBuffer.h"
15
17
19
21
22#include <atomic>
23#include <string>
24#include <map>
25#include <cstdlib>
26#include <cstddef>
27#include <vector>
28#include <new>
29
30class TObjArray;
32
35{
36
37 // Friend declaration
39
40public:
41
42#ifdef R__HPUX
43 typedef const std::type_info& Info_t;
44#else
45 typedef const std::type_info& Info_t;
46#endif
47
48 enum {
49 // Those 'bits' are used in conjunction with Cling's bit to store the 'type'
50 // info into one int
51 kBIT_ISSTRING = 0x20000000, // We can optimized a value operation when the content are strings
52 kBIT_ISTSTRING = 0x40000000
53 };
54
55 /** @class TGenCollectionProxy::Value TGenCollectionProxy.h TGenCollectionProxy.h
56 *
57 * Small helper to describe the Value_type or the key_type
58 * of an STL container.
59 *
60 * @author M.Frank
61 * @version 1.0
62 * @date 10/10/2004
63 */
64 struct Value {
65 ROOT::NewFunc_t fCtor; ///< Method cache for containee constructor
66 ROOT::DesFunc_t fDtor; ///< Method cache for containee destructor
67 ROOT::DelFunc_t fDelete; ///< Method cache for containee delete
68 UInt_t fCase; ///< type of data of Value_type
69 UInt_t fProperties; ///< Additional properties of the value type (kNeedDelete)
70 TClassRef fType; ///< TClass reference of Value_type in collection
71 EDataType fKind; ///< kind of ROOT-fundamental type
72 size_t fSize; ///< fSize of the contained object
73
74 // Default copy constructor has the correct implementation.
75
76 // Initializing constructor
77 Value(const std::string& info, Bool_t silent, size_t hint_pair_offset = 0, size_t hint_pair_size = 0);
78 // Delete individual item from STL container
79 void DeleteItem(void* ptr);
80
82 };
83
84 /**@class StreamHelper
85 *
86 * Helper class to facilitate I/O
87 *
88 * @author M.Frank
89 * @version 1.0
90 * @date 10/10/2004
91 */
106 void* p_void;
107 void** pp_void;
108 char* kchar;
110 void* ptr() {
111 return *(&this->p_void);
112 }
113 std::string* str() {
114 return (std::string*)this;
115 }
116 const char* c_str() {
117 return ((std::string*)this)->c_str();
118 }
119 const char* c_pstr() {
120 return (*(std::string**)this)->c_str();
121 }
122 void set(void* p) {
123 *(&this->p_void) = p;
124 }
126 TString s;
127 s.Streamer(b);
128 ((std::string*)this)->assign(s.Data());
129 }
131 *((TString*)this) = "";
132 ((TString*)this)->Streamer(b);
133 return this;
134 }
136 TString s;
137 std::string* str2 = (std::string*)ptr();
138 if (!str2) str2 = new std::string();
139 s.Streamer(b);
140 *str2 = s;
141 set(str2);
142 }
144 const char* c;
145 if (ptr()) {
146 std::string* strptr = (*(std::string**)this);
147 c = (const char*)(strptr->c_str());
148 } else c = "";
150 }
152 void* p = ptr();
153 if ( p ) {
154 if ( v->fDelete ) { // Compiled content: call Destructor
155 (*v->fDelete)(p);
156 }
157 else if ( v->fType ) { // Emulated content: call TClass::Delete
158 v->fType->Destructor(p);
159 }
160 else if ( v->fDtor ) {
161 (*v->fDtor)(p);
162 ::operator delete(p);
163 }
164 else {
165 ::operator delete(p);
166 }
167 }
168 set( b.ReadObjectAny(v->fType) );
169 }
170
172 TString* s = (TString*)ptr();
173 if ( vsn3 ) {
174 if ( !s ) s = new TString();
175 else s->Clear();
176 s->Streamer(b);
177 set(s);
178 return;
179 }
180 if ( s ) delete s;
181 set( b.ReadObjectAny(TString::Class()) );
182 }
184 b.WriteObjectAny(ptr(), TString::Class());
185 }
186 };
187
188 /** @class TGenCollectionProxy::Method TGenCollectionProxy.h TGenCollectionProxy.h
189 *
190 * Small helper to execute (compiler) generated function for the
191 * access to STL or other containers.
192 *
193 * @author M.Frank
194 * @version 1.0
195 * @date 10/10/2004
196 */
197 class Method {
198 public:
199 typedef void* (*Call_t)(void*);
201 Method() : call(nullptr) { }
203 Method(const Method& m) : call(m.call) { }
204 Method &operator=(const Method& m) { call = m.call; return *this; }
205 void* invoke(void* obj) const { return (*call)(obj); }
206 };
207
208 /** @class TGenCollectionProxy::Method TGenCollectionProxy.h TGenCollectionProxy.h
209 *
210 * Small helper to execute (compiler) generated function for the
211 * access to STL or other containers.
212 *
213 * @author M.Frank
214 * @version 1.0
215 * @date 10/10/2004
216 */
217 class Method0 {
218 public:
219 typedef void* (*Call_t)();
221 Method0() : call(nullptr) { }
223 Method0(const Method0& m) : call(m.call) { }
224 Method0 &operator=(const Method0& m) { call = m.call; return *this; }
225 void* invoke() const { return (*call)(); }
226 };
227
228 /** @class TGenCollectionProxy::TStaging
229 *
230 * Small helper to stage the content of an associative
231 * container when reading and before inserting it in the
232 * actual collection.
233 *
234 * @author Ph.Canal
235 * @version 1.0
236 * @date 20/08/2010
237 */
238 class TStaging {
239 void *fTarget; ///< Pointer to the collection we are staging for.
240 void *fContent; ///< Pointer to the content
241 size_t fReserved; ///< Amount of space already reserved.
242 size_t fSize; ///< Number of elements
243 size_t fSizeOf; ///< size of each elements
244
245 TStaging(const TStaging&); ///< Not implemented.
246 TStaging &operator=(const TStaging&); ///< Not implemented.
247
248 public:
249 TStaging(size_t size, size_t size_of) : fTarget(nullptr), fContent(nullptr), fReserved(0), fSize(size), fSizeOf(size_of)
250 {
251 // Usual constructor. Reserves the required number of elements.
254 }
255
257 // Usual destructor
259 }
260
261 void *GetContent() {
262 // Return the location of the array of content.
263 return fContent;
264 }
265 void *GetEnd() {
266 // Return the 'end' of the array of content.
267 return ((char*)fContent) + fSize*fSizeOf;
268 }
269 size_t GetSize() {
270 // Return the number of elements.
271 return fSize;
272 }
273 void *GetTarget() {
274 // Get the address of the collection we are staging for.
275 return fTarget;
276 }
277 void Resize(size_t nelement) {
278 if (fReserved < nelement) {
281 }
282 fSize = nelement;
283 }
284 void SetTarget(void *target) {
285 // Set the collection we are staging for.
286 fTarget = target;
287 }
288 };
289
290protected:
293 typedef std::vector<TStaging*> Staged_t; ///< Collection of pre-allocated staged array for associative containers.
294 typedef std::vector<EnvironBase_t*> Proxies_t;
295 mutable TObjArray *fReadMemberWise; ///< Array of bundle of TStreamerInfoActions to stream out (read)
296 mutable std::map<std::string, TObjArray*> *fConversionReadMemberWise; ///< Array of bundle of TStreamerInfoActions to stream out (read) derived from another class.
298 typedef void (*Sizing_t)(void *obj, size_t size);
299 typedef void* (*Feedfunc_t)(void *from, void *to, size_t size);
300 typedef void* (*Collectfunc_t)(void *from, void *to);
301 typedef void* (*ArrIterfunc_t)(void *from, size_t size);
302
303 std::string fName; ///< Name of the class being proxied.
304 Bool_t fPointers; ///< Flag to indicate if containee has pointers (key or value)
305 Method fClear; ///< Method cache for container accessors: clear container
306 Method fSize; ///< Container accessors: size of container
307 Sizing_t fResize; ///< Container accessors: resize container
308 Method fFirst; ///< Container accessors: generic iteration: first
309 Method fNext; ///< Container accessors: generic iteration: next
310 ArrIterfunc_t fConstruct; ///< Container accessors: block construct
311 Sizing_t fDestruct; ///< Container accessors: block destruct
312 Feedfunc_t fFeed; ///< Container accessors: block feed
313 Collectfunc_t fCollect; ///< Method to collect objects from container
314 Method0 fCreateEnv; ///< Method to allocate an Environment holder.
315 std::atomic<Value*> fValue; ///< Descriptor of the container value type
316 Value* fVal; ///< Descriptor of the Value_type
317 Value* fKey; ///< Descriptor of the key_type
318 EnvironBase_t*fEnv; ///< Address of the currently proxied object
319 int fValOffset; ///< Offset from key to value (in maps)
320 int fValDiff; ///< Offset between two consecutive value_types (memory layout).
321 Proxies_t fProxyList; ///< Stack of recursive proxies
322 Proxies_t fProxyKept; ///< Optimization: Keep proxies once they were created
323 Staged_t fStaged; ///< Optimization: Keep staged array once they were created
324 int fSTL_type; ///< STL container type
325 Info_t fTypeinfo; ///< Type information
326 TClass* fOnFileClass; ///< On file class
327
328 CreateIterators_t fFunctionCreateIterators;
329 CopyIterator_t fFunctionCopyIterator;
331 DeleteIterator_t fFunctionDeleteIterator;
332 DeleteTwoIterators_t fFunctionDeleteTwoIterators;
333
334 // Late initialization of collection proxy
336 // Some hack to avoid const-ness.
338 // Call to delete/destruct individual contained item.
339 virtual void DeleteItem(Bool_t force, void* ptr) const;
340 // Allow to check function pointers.
341 void CheckFunctions() const;
342
343private:
344 TGenCollectionProxy(); // not implemented on purpose.
345
346public:
347
348 // Virtual copy constructor.
349 TVirtualCollectionProxy* Generate() const override;
350
351 // Copy constructor.
353
354private:
355 // Assignment operator
357
358public:
359 // Initializing constructor
362
363 // Standard destructor.
364 ~TGenCollectionProxy() override;
365
366 // Reset the info gathered from StreamerInfos and value's TClass.
367 Bool_t Reset() override;
368
369 // Return a pointer to the TClass representing the container.
370 TClass *GetCollectionClass() const override;
371
372 // Return the type of collection see TClassEdit::ESTLType
373 Int_t GetCollectionType() const override;
374
375 // Return the offset between two consecutive value_types (memory layout).
376 ULong_t GetIncrement() const override;
377
378 // Return the sizeof the collection object.
379 UInt_t Sizeof() const override;
380
381 // Push new proxy environment.
382 void PushProxy(void *objstart) override;
383
384 // Pop old proxy environment.
385 void PopProxy() override;
386
387 // Return true if the content is of type 'pointer to'.
388 Bool_t HasPointers() const override;
389
390 // Return a pointer to the TClass representing the content.
391 TClass *GetValueClass() const override;
392
393 // If the content is a simple numerical value, return its type (see TDataType).
394 EDataType GetType() const override;
395
396 // Return the address of the value at index 'idx'.
397 void *At(UInt_t idx) override;
398
399 // Clear the container.
400 void Clear(const char *opt = "") override;
401
402 // Resize the container.
403 virtual void Resize(UInt_t n, Bool_t force_delete);
404
405 // Return the current size of the container.
406 UInt_t Size() const override;
407
408 // Block allocation of containees.
409 void* Allocate(UInt_t n, Bool_t forceDelete) override;
410
411 // Insert data into the container where data is a C-style array of the actual type contained in the collection
412 // of the given size. For associative container (map, etc.), the data type is the pair<key,value>.
413 void Insert(const void *data, void *container, size_t size) override;
414
415 // Block commit of containees.
416 void Commit(void* env) override;
417
418 // Streamer function.
419 virtual void Streamer(TBuffer &refBuffer);
420
421 // Streamer I/O overload.
422 virtual void Streamer(TBuffer &refBuffer, void *pObject, int siz);
423
424 // TClassStreamer I/O overload.
425 virtual void operator()(TBuffer &refBuffer, void *pObject);
426
427 // Routine to read the content of the buffer into 'obj'.
428 virtual void ReadBuffer(TBuffer &b, void *obj);
429 virtual void ReadBuffer(TBuffer &b, void *obj, const TClass *onfileClass);
430
431 virtual void SetOnFileClass( TClass* cl ) { fOnFileClass = cl; }
432 virtual TClass* GetOnFileClass() const { return fOnFileClass; }
433
434 // MemberWise actions
438
439 // Set of functions to iterate easily through the collection
440
441 CreateIterators_t GetFunctionCreateIterators(Bool_t read = kTRUE) override;
442 // typedef void (*CreateIterators_t)(void *collection, void **begin_arena, void **end_arena);
443 // begin_arena and end_arena should contain the location of a memory arena of size fgIteratorSize.
444 // If the collection iterator are of that size or less, the iterators will be constructed in place in those location (new with placement)
445 // Otherwise the iterators will be allocated via a regular new and their address returned by modifying the value of begin_arena and end_arena.
446
447 CopyIterator_t GetFunctionCopyIterator(Bool_t read = kTRUE) override;
448 // typedef void* (*CopyIterator_t)(void **dest, const void *source);
449 // Copy the iterator source, into dest. dest should contain the location of a memory arena of size fgIteratorSize.
450 // If the collection iterator is of that size or less, the iterator will be constructed in place in this location (new with placement)
451 // Otherwise the iterator will be allocated via a regular new.
452 // The actual address of the iterator is returned in both case.
453
454 Next_t GetFunctionNext(Bool_t read = kTRUE) override;
455 // typedef void* (*Next_t)(void *iter, const void *end);
456 // iter and end should be pointers to respectively an iterator to be incremented and the result of collection.end()
457 // If the iterator has not reached the end of the collection, 'Next' increment the iterator 'iter' and return 0 if
458 // the iterator reached the end.
459 // If the end was not reached, 'Next' returns the address of the content pointed to by the iterator before the
460 // incrementation ; if the collection contains pointers, 'Next' will return the value of the pointer.
461
462 DeleteIterator_t GetFunctionDeleteIterator(Bool_t read = kTRUE) override;
463 DeleteTwoIterators_t GetFunctionDeleteTwoIterators(Bool_t read = kTRUE) override;
464 // typedef void (*DeleteIterator_t)(void *iter);
465 // typedef void (*DeleteTwoIterators_t)(void *begin, void *end);
466 // If the size of the iterator is greater than fgIteratorArenaSize, call delete on the addresses,
467 // Otherwise just call the iterator's destructor.
468
469};
470
471template <typename T>
474 : TGenCollectionProxy(typeid(T::Cont_t),sizeof(T::Iter_t))
475 {
476 // Constructor.
477 fValDiff = sizeof(T::Value_t);
478 fValOffset = T::value_offset();
479 fSize.call = T::size;
480 fResize = T::resize;
481 fNext.call = T::next;
482 fFirst.call = T::first;
483 fClear.call = T::clear;
484 fConstruct = T::construct;
485 fDestruct = T::destruct;
486 fFeed = T::feed;
488 }
489 ~AnyCollectionProxy() override { }
490};
491
492#endif
493
#define b(i)
Definition RSha256.hxx:100
#define c(i)
Definition RSha256.hxx:101
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
bool Bool_t
Boolean (0=false, 1=true) (bool)
Definition RtypesCore.h:77
int Int_t
Signed integer 4 bytes (int)
Definition RtypesCore.h:59
char Char_t
Character 1 byte (char)
Definition RtypesCore.h:51
unsigned long ULong_t
Unsigned long integer 4 bytes (unsigned long). Size depends on architecture.
Definition RtypesCore.h:69
long Long_t
Signed long integer 4 bytes (long). Size depends on architecture.
Definition RtypesCore.h:68
float Float_t
Float 4 bytes (float)
Definition RtypesCore.h:71
short Short_t
Signed Short integer 2 bytes (short)
Definition RtypesCore.h:53
constexpr Bool_t kTRUE
Definition RtypesCore.h:107
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
EDataType
Definition TDataType.h:28
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
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 Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t target
#define realloc
Definition civetweb.c:1577
#define free
Definition civetweb.c:1578
#define malloc
Definition civetweb.c:1575
Buffer base class used for serializing objects.
Definition TBuffer.h:43
TClassRef is used to implement a permanent reference to a TClass object.
Definition TClassRef.h:29
TClass instances represent classes, structs and namespaces in the ROOT type system.
Definition TClass.h:84
TCollectionProxyFactory Interface to collection proxy and streamer generator.
Method0 & operator=(const Method0 &m)
Small helper to execute (compiler) generated function for the access to STL or other containers.
Method & operator=(const Method &m)
void * invoke(void *obj) const
Small helper to stage the content of an associative container when reading and before inserting it in...
size_t fSizeOf
size of each elements
TStaging & operator=(const TStaging &)
Not implemented.
size_t fSize
Number of elements.
TStaging(const TStaging &)
Not implemented.
void * fContent
Pointer to the content.
size_t fReserved
Amount of space already reserved.
void * fTarget
Pointer to the collection we are staging for.
TStaging(size_t size, size_t size_of)
Proxy around an arbitrary container, which implements basic functionality and iteration.
TStreamerInfoActions::TActionSequence * GetReadMemberWiseActions(Int_t version) override
Return the set of action necessary to stream in this collection member-wise coming from the old value...
Method fFirst
Container accessors: generic iteration: first.
std::atomic< Value * > fValue
Descriptor of the container value type.
std::vector< EnvironBase_t * > Proxies_t
void Insert(const void *data, void *container, size_t size) override
Insert data into the container where data is a C-style array of the actual type contained in the coll...
std::vector< TStaging * > Staged_t
Collection of pre-allocated staged array for associative containers.
Bool_t fPointers
Flag to indicate if containee has pointers (key or value)
Method fNext
Container accessors: generic iteration: next.
virtual void Streamer(TBuffer &refBuffer)
Streamer Function.
TStreamerInfoActions::TActionSequence * fWriteMemberWise
void * Allocate(UInt_t n, Bool_t forceDelete) override
Allocate the needed space.
void *(* Feedfunc_t)(void *from, void *to, size_t size)
ROOT::Detail::TCollectionProxyInfo::Environ< char[64]> Env_t
Bool_t Reset() override
Reset the info gathered from StreamerInfos and value's TClass.
Info_t fTypeinfo
Type information.
int fValOffset
Offset from key to value (in maps)
TClass * GetValueClass() const override
Return a pointer to the TClass representing the content.
EnvironBase_t * fEnv
Address of the currently proxied object.
DeleteIterator_t fFunctionDeleteIterator
Collectfunc_t fCollect
Method to collect objects from container.
void PushProxy(void *objstart) override
Add an object.
void PopProxy() override
Remove the last object.
EDataType GetType() const override
If the content is a simple numerical value, return its type (see TDataType)
TGenCollectionProxy * Initialize(Bool_t silent) const
Proxy initializer.
virtual TGenCollectionProxy * InitializeEx(Bool_t silent)
Proxy initializer.
void *(* ArrIterfunc_t)(void *from, size_t size)
TGenCollectionProxy & operator=(const TGenCollectionProxy &)
void Commit(void *env) override
Commit the change.
std::string fName
Name of the class being proxied.
CopyIterator_t GetFunctionCopyIterator(Bool_t read=kTRUE) override
See typedef void (*CopyIterator_t)(void *&dest, const void *source); Copy the iterator source,...
int fSTL_type
STL container type.
CopyIterator_t fFunctionCopyIterator
~TGenCollectionProxy() override
Standard destructor.
ULong_t GetIncrement() const override
Return the offset between two consecutive value_types (memory layout).
Value * fKey
Descriptor of the key_type.
virtual TClass * GetOnFileClass() const
virtual void Resize(UInt_t n, Bool_t force_delete)
Resize the container.
void(* Sizing_t)(void *obj, size_t size)
Int_t GetCollectionType() const override
Return the type of collection see TClassEdit::ESTLType.
void Clear(const char *opt="") override
Clear the emulated collection.
Proxies_t fProxyList
Stack of recursive proxies.
DeleteIterator_t GetFunctionDeleteIterator(Bool_t read=kTRUE) override
See typedef void (*DeleteIterator_t)(void *iter); If the sizeof iterator is greater than fgIteratorAr...
UInt_t Size() const override
Return the current size of the container.
Sizing_t fDestruct
Container accessors: block destruct.
Method0 fCreateEnv
Method to allocate an Environment holder.
Value * fVal
Descriptor of the Value_type.
Next_t GetFunctionNext(Bool_t read=kTRUE) override
See typedef void* (*Next_t)(void *iter, void *end); iter and end should be pointer to respectively an...
virtual void operator()(TBuffer &refBuffer, void *pObject)
TClassStreamer IO overload.
TClass * fOnFileClass
On file class.
Sizing_t fResize
Container accessors: resize container.
ArrIterfunc_t fConstruct
Container accessors: block construct.
void * At(UInt_t idx) override
Return the address of the value at index 'idx'.
DeleteTwoIterators_t GetFunctionDeleteTwoIterators(Bool_t read=kTRUE) override
See typedef void (*DeleteTwoIterators_t)(void *begin, void *end); If the sizeof iterator is greater t...
std::map< std::string, TObjArray * > * fConversionReadMemberWise
Array of bundle of TStreamerInfoActions to stream out (read) derived from another class.
void CheckFunctions() const
Check existence of function pointers.
TVirtualCollectionProxy * Generate() const override
Virtual copy constructor.
DeleteTwoIterators_t fFunctionDeleteTwoIterators
TStreamerInfoActions::TActionSequence * GetWriteMemberWiseActions() override
Return the set of action necessary to stream out this collection member-wise.
virtual void SetOnFileClass(TClass *cl)
Bool_t HasPointers() const override
Return true if the content is of type 'pointer to'.
CreateIterators_t fFunctionCreateIterators
TStreamerInfoActions::TActionSequence * GetConversionReadMemberWiseActions(TClass *oldClass, Int_t version) override
Return the set of action necessary to stream in this collection member-wise coming from the old value...
TObjArray * fReadMemberWise
Array of bundle of TStreamerInfoActions to stream out (read)
ROOT::Detail::TCollectionProxyInfo::EnvironBase EnvironBase_t
virtual void DeleteItem(Bool_t force, void *ptr) const
Call to delete/destruct individual item.
TClass * GetCollectionClass() const override
Return a pointer to the TClass representing the container.
Staged_t fStaged
Optimization: Keep staged array once they were created.
Method fSize
Container accessors: size of container.
Method fClear
Method cache for container accessors: clear container.
Feedfunc_t fFeed
Container accessors: block feed.
CreateIterators_t GetFunctionCreateIterators(Bool_t read=kTRUE) override
See typedef void (*CreateIterators_t)(void *collection, void *&begin_arena, void *&end_arena); begin_...
void *(* Collectfunc_t)(void *from, void *to)
int fValDiff
Offset between two consecutive value_types (memory layout).
virtual void ReadBuffer(TBuffer &b, void *obj)
Proxies_t fProxyKept
Optimization: Keep proxies once they were created.
UInt_t Sizeof() const override
Return the sizeof the collection object.
const std::type_info & Info_t
An array of TObjects.
Definition TObjArray.h:31
Basic string class.
Definition TString.h:138
void Clear()
Clear string without changing its capacity.
Definition TString.cxx:1241
const char * Data() const
Definition TString.h:384
virtual void Streamer(TBuffer &)
Stream a string object.
Definition TString.cxx:1418
static TClass * Class()
Defines a common interface to inspect/change the contents of an object that represents a collection.
const Int_t n
Definition legend1.C:16
void(* DesFunc_t)(void *)
Definition Rtypes.h:119
void(* DelFunc_t)(void *)
Definition Rtypes.h:117
void *(* NewFunc_t)(void *)
Definition Rtypes.h:115
Small helper to save proxy environment in the event of recursive calls.
Small helper to describe the Value_type or the key_type of an STL container.
UInt_t fCase
type of data of Value_type
TClassRef fType
TClass reference of Value_type in collection.
UInt_t fProperties
Additional properties of the value type (kNeedDelete)
size_t fSize
fSize of the contained object
ROOT::DelFunc_t fDelete
Method cache for containee delete.
ROOT::DesFunc_t fDtor
Method cache for containee destructor.
ROOT::NewFunc_t fCtor
Method cache for containee constructor.
Value(const std::string &info, Bool_t silent, size_t hint_pair_offset=0, size_t hint_pair_size=0)
Constructor.
EDataType fKind
kind of ROOT-fundamental type
Bool_t IsValid()
Return true if the Value has been properly initialized.
TMarker m
Definition textangle.C:8
Helper class to facilitate I/O.
void read_tstring_pointer(Bool_t vsn3, TBuffer &b)
void read_any_object(Value *v, TBuffer &b)