Logo ROOT   6.08/07
Reference Guide
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 #ifndef ROOT_TBuffer
15 #include "TBuffer.h"
16 #endif
17 
18 #ifndef ROOT_TVirtualCollectionProxy
20 #endif
21 
22 #ifndef ROOT_TCollectionProxyInfo
23 #include "TCollectionProxyInfo.h"
24 #endif
25 
26 #ifndef ROOT_Rtypeinfo
27 #include "Rtypeinfo.h"
28 #endif
29 
30 #include <atomic>
31 #include <string>
32 #include <map>
33 #include <stdlib.h>
34 
35 class TObjArray;
37 
40 {
41 
42  // Friend declaration
44 
45 public:
46 
47 #ifdef R__HPUX
48  typedef const std::type_info& Info_t;
49 #else
50  typedef const std::type_info& Info_t;
51 #endif
52 
53  enum {
54  // Those 'bits' are used in conjunction with CINT's bit to store the 'type'
55  // info into one int
56  kBIT_ISSTRING = 0x20000000, // We can optimized a value operation when the content are strings
57  kBIT_ISTSTRING = 0x40000000
58  };
59 
60  /** @class TGenCollectionProxy::Value TGenCollectionProxy.h TGenCollectionProxy.h
61  *
62  * Small helper to describe the Value_type or the key_type
63  * of an STL container.
64  *
65  * @author M.Frank
66  * @version 1.0
67  * @date 10/10/2004
68  */
69  struct Value {
70  ROOT::NewFunc_t fCtor; ///< Method cache for containee constructor
71  ROOT::DesFunc_t fDtor; ///< Method cache for containee destructor
72  ROOT::DelFunc_t fDelete; ///< Method cache for containee delete
73  UInt_t fCase; ///< type of data of Value_type
74  UInt_t fProperties; ///< Additional properties of the value type (kNeedDelete)
75  TClassRef fType; ///< TClass reference of Value_type in collection
76  EDataType fKind; ///< kind of ROOT-fundamental type
77  size_t fSize; ///< fSize of the contained object
78 
79  // Default copy constructor has the correct implementation.
80 
81  // Initializing constructor
82  Value(const std::string& info, Bool_t silent);
83  // Delete individual item from STL container
84  void DeleteItem(void* ptr);
85 
86  Bool_t IsValid();
87  };
88 
89  /**@class StreamHelper
90  *
91  * Helper class to facilitate I/O
92  *
93  * @author M.Frank
94  * @version 1.0
95  * @date 10/10/2004
96  */
97  union StreamHelper {
111  void* p_void;
112  void** pp_void;
113  char* kchar;
115  void* ptr() {
116  return *(&this->p_void);
117  }
118  std::string* str() {
119  return (std::string*)this;
120  }
121  const char* c_str() {
122  return ((std::string*)this)->c_str();
123  }
124  const char* c_pstr() {
125  return (*(std::string**)this)->c_str();
126  }
127  void set(void* p) {
128  *(&this->p_void) = p;
129  }
131  TString s;
132  s.Streamer(b);
133  ((std::string*)this)->assign(s.Data());
134  }
136  *((TString*)this) = "";
137  ((TString*)this)->Streamer(b);
138  return this;
139  }
141  TString s;
142  std::string* str2 = (std::string*)ptr();
143  if (!str2) str2 = new std::string();
144  s.Streamer(b);
145  *str2 = s;
146  set(str2);
147  }
149  const char* c;
150  if (ptr()) {
151  std::string* strptr = (*(std::string**)this);
152  c = (const char*)(strptr->c_str());
153  } else c = "";
154  TString(c).Streamer(b);
155  }
157  void* p = ptr();
158  if ( p ) {
159  if ( v->fDelete ) { // Compiled content: call Destructor
160  (*v->fDelete)(p);
161  }
162  else if ( v->fType ) { // Emulated content: call TClass::Delete
163  v->fType->Destructor(p);
164  }
165  else if ( v->fDtor ) {
166  (*v->fDtor)(p);
167  ::operator delete(p);
168  }
169  else {
170  ::operator delete(p);
171  }
172  }
173  set( b.ReadObjectAny(v->fType) );
174  }
175 
177  TString* s = (TString*)ptr();
178  if ( vsn3 ) {
179  if ( !s ) s = new TString();
180  else s->Clear();
181  s->Streamer(b);
182  set(s);
183  return;
184  }
185  if ( s ) delete s;
186  set( b.ReadObjectAny(TString::Class()) );
187  }
189  b.WriteObjectAny(ptr(), TString::Class());
190  }
191  };
192 
193  /** @class TGenCollectionProxy::Method TGenCollectionProxy.h TGenCollectionProxy.h
194  *
195  * Small helper to execute (compiler) generated function for the
196  * access to STL or other containers.
197  *
198  * @author M.Frank
199  * @version 1.0
200  * @date 10/10/2004
201  */
202  class Method {
203  public:
204  typedef void* (*Call_t)(void*);
205  Call_t call;
206  Method() : call(0) { }
207  Method(Call_t c) : call(c) { }
208  Method(const Method& m) : call(m.call) { }
209  Method &operator=(const Method& m) { call = m.call; return *this; }
210  void* invoke(void* obj) const { return (*call)(obj); }
211  };
212 
213  /** @class TGenCollectionProxy::Method TGenCollectionProxy.h TGenCollectionProxy.h
214  *
215  * Small helper to execute (compiler) generated function for the
216  * access to STL or other containers.
217  *
218  * @author M.Frank
219  * @version 1.0
220  * @date 10/10/2004
221  */
222  class Method0 {
223  public:
224  typedef void* (*Call_t)();
225  Call_t call;
226  Method0() : call(0) { }
227  Method0(Call_t c) : call(c) { }
228  Method0(const Method0& m) : call(m.call) { }
229  Method0 &operator=(const Method0& m) { call = m.call; return *this; }
230  void* invoke() const { return (*call)(); }
231  };
232 
233  /** @class TGenCollectionProxy::TStaging
234  *
235  * Small helper to stage the content of an associative
236  * container when reading and before inserting it in the
237  * actual collection.
238  *
239  * @author Ph.Canal
240  * @version 1.0
241  * @date 20/08/2010
242  */
243  class TStaging {
244  void *fTarget; ///< Pointer to the collection we are staging for.
245  void *fContent; ///< Pointer to the content
246  size_t fReserved; ///< Amount of space already reserved.
247  size_t fSize; ///< Number of elements
248  size_t fSizeOf; ///< size of each elements
249 
250  TStaging(const TStaging&); ///< Not implemented.
251  TStaging &operator=(const TStaging&); ///< Not implemented.
252 
253  public:
254  TStaging(size_t size, size_t size_of) : fTarget(0), fContent(0), fReserved(0), fSize(size), fSizeOf(size_of)
255  {
256  // Usual constructor. Reserves the required number of elements.
257  fReserved = fSize;
258  fContent = ::malloc(fReserved * fSizeOf);
259  }
260 
262  // Usual destructor
263  ::free(fContent);
264  }
265 
266  void *GetContent() {
267  // Return the location of the array of content.
268  return fContent;
269  }
270  void *GetEnd() {
271  // Return the 'end' of the array of content.
272  return ((char*)fContent) + fSize*fSizeOf;
273  }
274  size_t GetSize() {
275  // Return the number of elements.
276  return fSize;
277  }
278  void *GetTarget() {
279  // Get the address of the collection we are staging for.
280  return fTarget;
281  }
282  void Resize(size_t nelement) {
283  if (fReserved < nelement) {
284  fReserved = nelement;
285  fContent = ::realloc(fContent,fReserved * fSizeOf);
286  }
287  fSize = nelement;
288  }
289  void SetTarget(void *target) {
290  // Set the collection we are staging for.
291  fTarget = target;
292  }
293  };
294 
295 protected:
298  typedef std::vector<TStaging*> Staged_t; ///< Collection of pre-allocated staged array for associative containers.
299  typedef std::vector<EnvironBase_t*> Proxies_t;
300  mutable TObjArray *fReadMemberWise; ///< Array of bundle of TStreamerInfoActions to stream out (read)
301  mutable std::map<std::string, TObjArray*> *fConversionReadMemberWise; ///< Array of bundle of TStreamerInfoActions to stream out (read) derived from another class.
303  typedef void (*Sizing_t)(void *obj, size_t size);
304  typedef void* (*Feedfunc_t)(void *from, void *to, size_t size);
305  typedef void* (*Collectfunc_t)(void *from, void *to);
306  typedef void* (*ArrIterfunc_t)(void *from, size_t size);
307 
308  std::string fName; ///< Name of the class being proxied.
309  Bool_t fPointers; ///< Flag to indicate if containee has pointers (key or value)
310  Method fClear; ///< Method cache for container accessors: clear container
311  Method fSize; ///< Container accessors: size of container
312  Sizing_t fResize; ///< Container accessors: resize container
313  Method fFirst; ///< Container accessors: generic iteration: first
314  Method fNext; ///< Container accessors: generic iteration: next
315  ArrIterfunc_t fConstruct; ///< Container accessors: block construct
316  Sizing_t fDestruct; ///< Container accessors: block destruct
317  Feedfunc_t fFeed; ///< Container accessors: block feed
318  Collectfunc_t fCollect; ///< Method to collect objects from container
319  Method0 fCreateEnv; ///< Method to allocate an Environment holder.
320  std::atomic<Value*> fValue; ///< Descriptor of the container value type
321  Value* fVal; ///< Descriptor of the Value_type
322  Value* fKey; ///< Descriptor of the key_type
323  EnvironBase_t*fEnv; ///< Address of the currently proxied object
324  int fValOffset; ///< Offset from key to value (in maps)
325  int fValDiff; ///< Offset between two consecutive value_types (memory layout).
326  Proxies_t fProxyList; ///< Stack of recursive proxies
327  Proxies_t fProxyKept; ///< Optimization: Keep proxies once they were created
328  Staged_t fStaged; ///< Optimization: Keep staged array once they were created
329  int fSTL_type; ///< STL container type
330  Info_t fTypeinfo; ///< Type information
331  TClass* fOnFileClass; ///< On file class
332 
338 
339  // Late initialization of collection proxy
340  TGenCollectionProxy* Initialize(Bool_t silent) const;
341  // Some hack to avoid const-ness.
342  virtual TGenCollectionProxy* InitializeEx(Bool_t silent);
343  // Call to delete/destruct individual contained item.
344  virtual void DeleteItem(Bool_t force, void* ptr) const;
345  // Allow to check function pointers.
346  void CheckFunctions() const;
347 
348  // Set pointer to the TClass representing the content.
349  virtual void UpdateValueClass(const TClass *oldcl, TClass *newcl);
350 
351 private:
352  TGenCollectionProxy(); // not implemented on purpose.
353 
354 public:
355 
356  // Virtual copy constructor.
357  virtual TVirtualCollectionProxy* Generate() const;
358 
359  // Copy constructor.
361 
362 private:
363  // Assignment operator
364  TGenCollectionProxy &operator=(const TGenCollectionProxy&); // Not Implemented
365 
366 public:
367  // Initializing constructor
368  TGenCollectionProxy(Info_t typ, size_t iter_size);
370 
371  // Standard destructor.
372  virtual ~TGenCollectionProxy();
373 
374  // Return a pointer to the TClass representing the container.
375  virtual TClass *GetCollectionClass() const;
376 
377  // Return the type of collection see TClassEdit::ESTLType
378  virtual Int_t GetCollectionType() const;
379 
380  // Return the offset between two consecutive value_types (memory layout).
381  virtual ULong_t GetIncrement() const;
382 
383  // Return the sizeof the collection object.
384  virtual UInt_t Sizeof() const;
385 
386  // Push new proxy environment.
387  virtual void PushProxy(void *objstart);
388 
389  // Pop old proxy environment.
390  virtual void PopProxy();
391 
392  // Return true if the content is of type 'pointer to'.
393  virtual Bool_t HasPointers() const;
394 
395  // Return a pointer to the TClass representing the content.
396  virtual TClass *GetValueClass() const;
397 
398  // If the content is a simple numerical value, return its type (see TDataType).
399  virtual EDataType GetType() const;
400 
401  // Return the address of the value at index 'idx'.
402  virtual void *At(UInt_t idx);
403 
404  // Clear the container.
405  virtual void Clear(const char *opt = "");
406 
407  // Resize the container.
408  virtual void Resize(UInt_t n, Bool_t force_delete);
409 
410  // Return the current size of the container.
411  virtual UInt_t Size() const;
412 
413  // Block allocation of containees.
414  virtual void* Allocate(UInt_t n, Bool_t forceDelete);
415 
416  // Insert data into the container where data is a C-style array of the actual type contained in the collection
417  // of the given size. For associative container (map, etc.), the data type is the pair<key,value>.
418  virtual void Insert(const void *data, void *container, size_t size);
419 
420  // Block commit of containees.
421  virtual void Commit(void* env);
422 
423  // Streamer function.
424  virtual void Streamer(TBuffer &refBuffer);
425 
426  // Streamer I/O overload.
427  virtual void Streamer(TBuffer &refBuffer, void *pObject, int siz);
428 
429  // TClassStreamer I/O overload.
430  virtual void operator()(TBuffer &refBuffer, void *pObject);
431 
432  // Routine to read the content of the buffer into 'obj'.
433  virtual void ReadBuffer(TBuffer &b, void *obj);
434  virtual void ReadBuffer(TBuffer &b, void *obj, const TClass *onfileClass);
435 
436  virtual void SetOnFileClass( TClass* cl ) { fOnFileClass = cl; }
437  virtual TClass* GetOnFileClass() const { return fOnFileClass; }
438 
439  // MemberWise actions
443 
444  // Set of functions to iterate easily throught the collection
445 
447  // typedef void (*CreateIterators_t)(void *collection, void **begin_arena, void **end_arena);
448  // begin_arena and end_arena should contain the location of a memory arena of size fgIteratorSize.
449  // If the collection iterator are of that size or less, the iterators will be constructed in place in those location (new with placement)
450  // Otherwise the iterators will be allocated via a regular new and their address returned by modifying the value of begin_arena and end_arena.
451 
453  // typedef void* (*CopyIterator_t)(void **dest, const void *source);
454  // Copy the iterator source, into dest. dest should contain the location of a memory arena of size fgIteratorSize.
455  // If the collection iterator is of that size or less, the iterator will be constructed in place in this location (new with placement)
456  // Otherwise the iterator will be allocated via a regular new.
457  // The actual address of the iterator is returned in both case.
458 
460  // typedef void* (*Next_t)(void *iter, const void *end);
461  // iter and end should be pointers to respectively an iterator to be incremented and the result of collection.end()
462  // If the iterator has not reached the end of the collection, 'Next' increment the iterator 'iter' and return 0 if
463  // the iterator reached the end.
464  // If the end was not reached, 'Next' returns the address of the content pointed to by the iterator before the
465  // incrementation ; if the collection contains pointers, 'Next' will return the value of the pointer.
466 
469  // typedef void (*DeleteIterator_t)(void *iter);
470  // typedef void (*DeleteTwoIterators_t)(void *begin, void *end);
471  // If the size of the iterator is greater than fgIteratorArenaSize, call delete on the addresses,
472  // Otherwise just call the iterator's destructor.
473 
474 };
475 
476 template <typename T>
479  : TGenCollectionProxy(typeid(T::Cont_t),sizeof(T::Iter_t))
480  {
481  // Constructor.
482  fValDiff = sizeof(T::Value_t);
483  fValOffset = T::value_offset();
484  fSize.call = T::size;
485  fResize = T::resize;
486  fNext.call = T::next;
487  fFirst.call = T::first;
488  fClear.call = T::clear;
489  fConstruct = T::construct;
490  fDestruct = T::destruct;
491  fFeed = T::feed;
492  CheckFunctions();
493  }
494  virtual ~AnyCollectionProxy() { }
495 };
496 
497 #endif
498 
Method fSize
Container accessors: size of container.
size_t fSize
Number of elements.
double read(const std::string &file_name)
reading
DeleteIterator_t fFunctionDeleteIterator
ROOT::DelFunc_t fDelete
Method cache for containee delete.
An array of TObjects.
Definition: TObjArray.h:39
ROOT::NewFunc_t fCtor
Method cache for containee constructor.
virtual TStreamerInfoActions::TActionSequence * GetReadMemberWiseActions(Int_t version)
Return the set of action necessary to stream in this collection member-wise coming from the old value...
Proxies_t fProxyKept
Optimization: Keep proxies once they were created.
long long Long64_t
Definition: RtypesCore.h:69
virtual UInt_t Sizeof() const
Return the sizeof the collection object.
DeleteTwoIterators_t fFunctionDeleteTwoIterators
UInt_t fProperties
Additional properties of the value type (kNeedDelete)
virtual Bool_t HasPointers() const
Return true if the content is of type &#39;pointer to&#39;.
ROOT::Detail::TCollectionProxyInfo::EnvironBase EnvironBase_t
virtual void UpdateValueClass(const TClass *oldcl, TClass *newcl)
Update the internal ValueClass when a TClass constructor need to replace an emulated TClass by the re...
float Float_t
Definition: RtypesCore.h:53
Bool_t fPointers
Flag to indicate if containee has pointers (key or value)
std::map< std::string, TObjArray * > * fConversionReadMemberWise
Array of bundle of TStreamerInfoActions to stream out (read) derived from another class...
return c
Collectfunc_t fCollect
Method to collect objects from container.
std::string fName
Name of the class being proxied.
TStaging(size_t size, size_t size_of)
double T(double x)
Definition: ChebyshevPol.h:34
virtual Int_t WriteObjectAny(const void *obj, const TClass *ptrClass)=0
unsigned short UShort_t
Definition: RtypesCore.h:36
virtual TStreamerInfoActions::TActionSequence * GetWriteMemberWiseActions()
Return the set of action necessary to stream out this collection member-wise.
virtual void PopProxy()
Remove the last object.
virtual void Insert(const void *data, void *container, size_t size)
Insert data into the container where data is a C-style array of the actual type contained in the coll...
Method fFirst
Container accessors: generic iteration: first.
Buffer base class used for serializing objects.
Definition: TBuffer.h:42
virtual EDataType GetType() const
If the content is a simple numerical value, return its type (see TDataType)
TClass * fOnFileClass
On file class.
Basic string class.
Definition: TString.h:137
Feedfunc_t fFeed
Container accessors: block feed.
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
void CheckFunctions() const
Check existence of function pointers.
const char * Class
Definition: TXMLSetup.cxx:64
UInt_t fCase
type of data of Value_type
void *(* CopyIterator_t)(void *dest, const void *source)
#define malloc
Definition: civetweb.c:818
Sizing_t fResize
Container accessors: resize container.
void * invoke(void *obj) const
size_t fSize
fSize of the contained object
virtual ULong_t GetIncrement() const
Return the offset between two consecutive value_types (memory layout).
void(* DeleteIterator_t)(void *iter)
TObjArray * fReadMemberWise
Array of bundle of TStreamerInfoActions to stream out (read)
CopyIterator_t fFunctionCopyIterator
virtual CreateIterators_t GetFunctionCreateIterators(Bool_t read=kTRUE)
See typedef void (*CreateIterators_t)(void *collection, void *&begin_arena, void *&end_arena); begin_...
virtual TStreamerInfoActions::TActionSequence * GetConversionReadMemberWiseActions(TClass *oldClass, Int_t version)
Return the set of action necessary to stream in this collection member-wise coming from the old value...
void Clear()
Clear string without changing its capacity.
Definition: TString.cxx:1140
void *(* NewFunc_t)(void *)
Definition: Rtypes.h:147
Proxies_t fProxyList
Stack of recursive proxies.
void *(* ArrIterfunc_t)(void *from, size_t size)
Method fClear
Method cache for container accessors: clear container.
#define realloc
Definition: civetweb.c:820
Method0 fCreateEnv
Method to allocate an Environment holder.
ArrIterfunc_t fConstruct
Container accessors: block construct.
virtual void Streamer(TBuffer &refBuffer)
Streamer Function.
void * fContent
Pointer to the content.
std::vector< EnvironBase_t * > Proxies_t
EDataType fKind
kind of ROOT-fundamental type
Staged_t fStaged
Optimization: Keep staged array once they were created.
void(* Sizing_t)(void *obj, size_t size)
int fValOffset
Offset from key to value (in maps)
TGenCollectionProxy * Initialize(Bool_t silent) const
Proxy initializer.
Method0 & operator=(const Method0 &m)
Small helper to save proxy environment in the event of recursive calls.
int fSTL_type
STL container type.
SVector< double, 2 > v
Definition: Dict.h:5
void(* CreateIterators_t)(void *collection, void **begin_arena, void **end_arena, TVirtualCollectionProxy *proxy)
virtual void Commit(void *env)
Commit the change.
std::vector< TStaging * > Staged_t
Collection of pre-allocated staged array for associative containers.
void Destructor(void *obj, Bool_t dtorOnly=kFALSE)
Explicitly call destructor for object.
Definition: TClass.cxx:5071
unsigned int UInt_t
Definition: RtypesCore.h:42
TMarker * m
Definition: textangle.C:8
virtual void PushProxy(void *objstart)
Add an object.
short Short_t
Definition: RtypesCore.h:35
void *(* Feedfunc_t)(void *from, void *to, size_t size)
virtual Next_t GetFunctionNext(Bool_t read=kTRUE)
See typedef void* (*Next_t)(void *iter, void *end); iter and end should be pointer to respectively an...
CreateIterators_t fFunctionCreateIterators
The ROOT global object gROOT contains a list of all defined classes.
Definition: TClass.h:81
TGenCollectionProxy & operator=(const TGenCollectionProxy &)
void read_any_object(Value *v, TBuffer &b)
void * fTarget
Pointer to the collection we are staging for.
Small helper to execute (compiler) generated function for the access to STL or other containers...
int fValDiff
Offset between two consecutive value_types (memory layout).
long Long_t
Definition: RtypesCore.h:50
virtual void Resize(UInt_t n, Bool_t force_delete)
Resize the container.
virtual TClass * GetCollectionClass() const
Return a pointer to the TClass representing the container.
TCollectionProxyFactory Interface to collection proxy and streamer generator.
virtual DeleteIterator_t GetFunctionDeleteIterator(Bool_t read=kTRUE)
See typedef void (*DeleteIterator_t)(void *iter); If the sizeof iterator is greater than fgIteratorAr...
virtual DeleteTwoIterators_t GetFunctionDeleteTwoIterators(Bool_t read=kTRUE)
See typedef void (*DeleteTwoIterators_t)(void *begin, void *end); If the sizeof iterator is greater t...
double Double_t
Definition: RtypesCore.h:55
virtual TGenCollectionProxy * InitializeEx(Bool_t silent)
Proxy initializer.
unsigned long long ULong64_t
Definition: RtypesCore.h:70
#define free
Definition: civetweb.c:821
unsigned long ULong_t
Definition: RtypesCore.h:51
EDataType
Definition: TDataType.h:30
virtual TClass * GetValueClass() const
Return a pointer to the TClass representing the content.
virtual void * ReadObjectAny(const TClass *cast)=0
std::atomic< Value * > fValue
Descriptor of the container value type.
TClassRef fType
TClass reference of Value_type in collection.
virtual void SetOnFileClass(TClass *cl)
virtual void Clear(const char *opt="")
Clear the emulated collection.
virtual TVirtualCollectionProxy * Generate() const
Virtual copy constructor.
virtual void ReadBuffer(TBuffer &b, void *obj)
virtual CopyIterator_t GetFunctionCopyIterator(Bool_t read=kTRUE)
See typedef void (*CopyIterator_t)(void *&dest, const void *source); Copy the iterator source...
Value(const std::string &info, Bool_t silent)
Constructor.
virtual void * At(UInt_t idx)
Return the address of the value at index &#39;idx&#39;.
void(* DelFunc_t)(void *)
Definition: Rtypes.h:149
size_t fSizeOf
size of each elements
TClassRef is used to implement a permanent reference to a TClass object.
Definition: TClassRef.h:33
char Char_t
Definition: RtypesCore.h:29
typedef void((*Func_t)())
Value * fKey
Descriptor of the key_type.
virtual void operator()(TBuffer &refBuffer, void *pObject)
TClassStreamer IO overload.
Small helper to stage the content of an associative container when reading and before inserting it in...
Helper class to facilitate I/O.
Proxy around an arbitrary container, which implements basic functionality and iteration.
EnvironBase_t * fEnv
Address of the currently proxied object.
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t Double_t b
Definition: TRolke.cxx:630
Sizing_t fDestruct
Container accessors: block destruct.
Bool_t IsValid()
Return true if the Value has been properly initialized.
Method fNext
Container accessors: generic iteration: next.
virtual UInt_t Size() const
Return the current size of the container.
void *(* Next_t)(void *iter, const void *end)
size_t fReserved
Amount of space already reserved.
unsigned char UChar_t
Definition: RtypesCore.h:34
Info_t fTypeinfo
Type information.
ROOT::Detail::TCollectionProxyInfo::Environ< char[64]> Env_t
const Bool_t kTRUE
Definition: Rtypes.h:91
void(* DeleteTwoIterators_t)(void *begin, void *end)
const std::type_info & Info_t
virtual TClass * GetOnFileClass() const
const Int_t n
Definition: legend1.C:16
TStreamerInfoActions::TActionSequence * fWriteMemberWise
Small helper to describe the Value_type or the key_type of an STL container.
Method & operator=(const Method &m)
void read_tstring_pointer(Bool_t vsn3, TBuffer &b)
virtual ~TGenCollectionProxy()
Standard destructor.
virtual void * Allocate(UInt_t n, Bool_t forceDelete)
Allocate the needed space.
Value * fVal
Descriptor of the Value_type.
void *(* Collectfunc_t)(void *from, void *to)
virtual Int_t GetCollectionType() const
Return the type of collection see TClassEdit::ESTLType.
void(* DesFunc_t)(void *)
Definition: Rtypes.h:151
const char * Data() const
Definition: TString.h:349
ROOT::DesFunc_t fDtor
Method cache for containee destructor.