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