27#define MESSAGE(which,text)
62 Fatal(
"TGenVectorProxy",
"At> Logic error - no proxy object set.");
72 proxy->
Clear(
"force");
74 fVal->DeleteItem(ptr);
106 auto vec = (std::vector<bool> *)(
fEnv->fObject);
111 Fatal(
"TGenVectorProxy",
"At> Logic error - no proxy object set.");
118 if ( force && ptr ) {
119 fVal->DeleteItem(ptr);
163 typedef ROOT::TCollectionProxyInfo::Environ<std::pair<size_t,Bool_t> > EnvType_t;
164 EnvType_t *
e = (EnvType_t*)
fEnv;
165 return &(
e->fIterator.second);
167 Fatal(
"TGenVectorProxy",
"At> Logic error - no proxy object set.");
174 if ( force && ptr ) {
175 fVal->DeleteItem(ptr);
217 Fatal(
"TGenListProxy",
"At> Logic error - no proxy object set.");
246 if (
fEnv->fUseTemp ) {
262 Fatal(
"TGenSetProxy",
"At> Logic error - no proxy object set.");
294 proxy->
Clear(
"force");
300 proxy->
Clear(
"force");
304 fKey->DeleteItem(*(
void**)ptr);
308 fVal->DeleteItem(*(
void**)addr);
318 std::string inside = (inside_type.find(
"const ")==0) ? inside_type.substr(6) : inside_type;
324 fSize = std::string::npos;
330 bool isPointer =
false;
333 if (intype.back() ==
'*') {
336 if (intype.back() ==
'*') {
339 Warning(
"TGenCollectionProxy::Value::Value",
"I/O not supported for collection of pointer to pointer: %s", inside_type.c_str());
340 fSize =
sizeof(
void*);
346 if ( intype.substr(0,6) ==
"string" || intype.substr(0,11) ==
"std::string" ) {
354 fSize =
sizeof(
void*);
356 fSize =
sizeof(std::string);
371 fSize =
sizeof(
void*);
386 assert(typeTable &&
"The type of the list of type has changed");
388 TDataType *fundType = (
TDataType *)typeTable->THashTable::FindObject( intype.c_str() );
389 if (fundType && fundType->
GetType() < 0x17 && fundType->
GetType() > 0) {
396 fSize =
sizeof(
void*);
405 fKind =
e->GetUnderlyingType();
408 fSize =
sizeof(
void*);
422 TypeInfo_t *ti =
gCling->TypeInfo_Factory();
423 gCling->TypeInfo_Init(ti,inside.c_str());
424 if ( !
gCling->TypeInfo_IsValid(ti) ) {
427 fSize =
sizeof(
void*);
449 fSize =
sizeof(
void*);
458 fSize = std::string::npos;
460 Error(
"TGenCollectionProxy",
"Could not retrieve the TClass for %s", intype.c_str());
468 fundType =
gROOT->GetType( intype.c_str() );
470 if (intype !=
"long double" && !silent) {
471 Error(
"TGenCollectionProxy",
"Unknown fundamental type %s",intype.c_str());
490 gCling->TypeInfo_Delete(ti);
500 if (
fSize == std::string::npos ) {
516 return fSize != std::string::npos;
528 fType->Destructor(ptr);
531 ::operator
delete(ptr);
620 if ( iter_size >
sizeof(
e.fIterator) ) {
621 Fatal(
"TGenCollectionProxy",
622 "%s %s are too large:%ld bytes. Maximum is:%ld bytes",
623 "Iterators for collection",
626 (Long_t)sizeof(e.fIterator));
673 Fatal(
"TGenCollectionProxy",
674 "%s %s are too large:%ld bytes. Maximum is:%ld bytes",
675 "Iterators for collection",
693 void clearVector(
vec&
v)
697 for(
typename vec::iterator i=
v.begin(); i !=
v.end(); ++i) {
698 typename vec::value_type
e = *i;
721 std::map<std::string, TObjArray*>::iterator it;
747 if ((*fValue).fKind ==
kBool_t) {
777 if (
fValue.load() )
return p;
799 if ( 0 ==
fSize.call ) {
800 Fatal(
"TGenCollectionProxy",
"No 'size' function pointer for class %s present.",
fName.c_str());
803 Fatal(
"TGenCollectionProxy",
"No 'resize' function for class %s present.",
fName.c_str());
805 if ( 0 ==
fNext.call ) {
806 Fatal(
"TGenCollectionProxy",
"No 'next' function for class %s present.",
fName.c_str());
809 Fatal(
"TGenCollectionProxy",
"No 'begin' function for class %s present.",
fName.c_str());
812 Fatal(
"TGenCollectionProxy",
"No 'clear' function for class %s present.",
fName.c_str());
815 Fatal(
"TGenCollectionProxy",
"No 'block constructor' function for class %s present.",
fName.c_str());
818 Fatal(
"TGenCollectionProxy",
"No 'block destructor' function for class %s present.",
fName.c_str());
821 Fatal(
"TGenCollectionProxy",
"No 'data feed' function for class %s present.",
fName.c_str());
824 Fatal(
"TGenCollectionProxy",
"No 'data collect' function for class %s present.",
fName.c_str());
827 Fatal(
"TGenCollectionProxy",
"No 'environment creation' function for class %s present.",
fName.c_str());
835 size_t hint_pair_offset = 0,
size_t hint_pair_size = 0)
839 Fatal(
"TGenCollectionProxy",
"Could not find %s!",
name.c_str());
850 if (
fValue.load())
return this;
858 std::vector<std::string> inside;
862 Value* newfValue =
nullptr;
863 if ( inside[0].find(
"stdext::hash_") != std::string::npos )
864 inside[0].replace(3,10,
"::");
865 if ( inside[0].find(
"__gnu_cxx::hash_") != std::string::npos )
866 inside[0].replace(0,16,
"std::");
879 if (num > 3 && !inside[3].empty()) {
887 int slong =
sizeof(
void*);
893 nam =
"pair<"+inside[1]+
","+inside[2];
894 nam += (nam[nam.length()-1]==
'>') ?
" >" :
">";
902 if (paircl ==
nullptr) {
906 Fatal(
"InitializeEx",
907 "Could not load nor generate the dictionary for \"%s\", some element might be missing their dictionary (eg. enums)",
913 Fatal(
"InitializeEx",
914 "The %s for %s reports a class size that is inconsistent with the one registered "
915 "through the CollectionProxy for %s: %d vs %d\n",
916 paircl->
IsLoaded() ?
"dictionary" :
"interpreter information for", nam.c_str(),
919 gROOT->GetListOfClasses()->Remove(paircl);
922 Fatal(
"InitializeEx",
923 "The TClass creation for %s did not get the right size: %d instead of%d\n",
957 if (num > 2 && !inside[2].empty()) {
966 Error(
"TGenCollectionProxy::InitializeEx",
967 "The TClass for %s used as the value type of the compiled collection proxy %s is not loaded.",
980 Fatal(
"TGenCollectionProxy",
"Components of %s not analysed!",cl->
GetName());
982 Fatal(
"TGenCollectionProxy",
"Collection class %s not found!",
fTypeinfo.name());
999 if (!
fValue.load(std::memory_order_relaxed)) {
1009 if (!
fValue.load(std::memory_order_relaxed)) {
1029 if( !
fValue.load(std::memory_order_relaxed) )
1044 auto value =
fValue.load(std::memory_order_relaxed);
1047 value =
fValue.load(std::memory_order_relaxed);
1049 return value ? (*value).fType.GetClass() : 0;
1057 auto value =
fValue.load(std::memory_order_relaxed);
1060 value =
fValue.load(std::memory_order_relaxed);
1062 return value ? (*value).fKind :
kNoType_t;
1073 if ((*fValue).fKind ==
kBool_t) {
1074 auto vec = (std::vector<bool> *)(
fEnv->fObject);
1075 fEnv->fLastValueVecBool = (*vec)[idx];
1077 return &(
fEnv->fLastValueVecBool);
1102 typedef ROOT::TCollectionProxyInfo::Environ <std::pair<size_t, Bool_t>> EnvType_t;
1103 EnvType_t *
e = (EnvType_t *)
fEnv;
1104 return &(
e->fIterator.second);
1114 if (
fEnv->fUseTemp ) {
1133 Fatal(
"TGenCollectionProxy",
"At> Logic error - no proxy object set.");
1160 if (
fEnv->fUseTemp) {
1166 Fatal(
"TGenCollectionProxy",
"Size> Logic error - no proxy object set.");
1177 size_t i, nold = *(
size_t*)
fSize.invoke(
fEnv);
1179 for (i=
n; i<nold; ++i)
1188 Fatal(
"TGenCollectionProxy",
"Resize> Logic error - no proxy object set.");
1245 return fEnv->fObject;
1308 if ( back->
fObject == objstart ) {
1327 e->fObject = objstart;
1342 if ( --
e->fRefCount <= 0 ) {
1356 if ( force && ptr ) {
1365 TPushPop helper(proxy,*(
void**)ptr);
1366 proxy->
Clear(
"force");
1368 fKey->DeleteItem(*(
void**)ptr);
1373 proxy->
Clear(
"force");
1380 TPushPop helper(proxy,*(
void**)addr);
1381 proxy->
Clear(
"force");
1383 fVal->DeleteItem(*(
void**)addr);
1388 proxy->
Clear(
"force");
1397 TPushPop helper(proxy,*(
void**)ptr);
1398 proxy->
Clear(
"force");
1400 fVal->DeleteItem(*(
void**)ptr);
1405 proxy->
Clear(
"force");
1418 MayNotUse(
"TGenCollectionProxy::ReadBuffer(TBuffer &, void *, const TClass *)");
1425 MayNotUse(
"TGenCollectionProxy::ReadBuffer(TBuffer &, void *)");
1437 Fatal(
"TGenCollectionProxy",
"Streamer> Logic error - no proxy object set.");
1477 if (iterator->fIndex != *(
UInt_t*)end) {
1478 void *result = iterator->fProxy->At(iterator->fIndex);
1479 ++(iterator->fIndex);
1515 std::vector<char> *
vec = (std::vector<char>*)obj;
1521 *begin_arena =
vec->data();
1522 *end_arena =
vec->data() +
vec->size();
1538 *(
void**)dest = *(
void**)source;
1564 *end_arena = s->
GetEnd();
1580 *(
void**)dest = *(
void**)source;
1749 if (oldClass == 0) {
1755 std::map<std::string, TObjArray*>::iterator it;
1773 if (valueClass == 0) {
1787 (*fConversionReadMemberWise)[oldClass->
GetName()] = arr;
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
int Int_t
Signed integer 4 bytes (int).
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int).
unsigned long ULong_t
Unsigned long integer 4 bytes (unsigned long). Size depends on architecture.
long Long_t
Signed long integer 4 bytes (long). Size depends on architecture.
bool Bool_t
Boolean (0=false, 1=true) (bool).
Error("WriteTObject","The current directory (%s) is not associated with a file. The object (%s) has not been written.", GetName(), objname)
#define R__ASSERT(e)
Checks condition e and reports a fatal error if it's false.
void MayNotUse(const char *method)
This function can be used in classes that should override a certain function, but in the inherited cl...
void Warning(const char *location, const char *msgfmt,...)
Use this function in warning situations.
void Fatal(const char *location, const char *msgfmt,...)
Use this function in case of a fatal error. It will abort the program.
#define MESSAGE(which, text)
void * TGenCollectionProxy__VectorCopyIterator(void *dest, const void *source)
void TGenCollectionProxy__StagingDeleteTwoIterators(void *, void *)
Nothing to do.
void * TGenCollectionProxy__VectorNext(void *, const void *)
Should not be used.
static TGenCollectionProxy::Value * R__CreateValue(const std::string &name, Bool_t silent, size_t hint_pair_offset=0, size_t hint_pair_size=0)
Utility routine to issue a Fatal error is the Value object is not valid.
void TGenCollectionProxy__StagingDeleteSingleIterators(void *)
Nothing to do.
void TGenCollectionProxy__SlowCreateIterators(void *, void **begin_arena, void **end_arena, TVirtualCollectionProxy *proxy)
void * TGenCollectionProxy__SlowNext(void *iter, const void *end)
void TGenCollectionProxy__VectorCreateIterators(void *obj, void **begin_arena, void **end_arena, TVirtualCollectionProxy *)
We can safely assume that the std::vector layout does not really depend on the content!
void * TGenCollectionProxy__StagingCopyIterator(void *dest, const void *source)
void * TGenCollectionProxy__StagingNext(void *, const void *)
Should not be used.
void TGenCollectionProxy__VectorDeleteSingleIterators(void *)
Nothing to do.
void * TGenCollectionProxy__SlowCopyIterator(void *dest, const void *source)
void TGenCollectionProxy__StagingCreateIterators(void *obj, void **begin_arena, void **end_arena, TVirtualCollectionProxy *)
void TGenCollectionProxy__SlowDeleteTwoIterators(void *, void *)
Nothing to do.
void TGenCollectionProxy__VectorDeleteTwoIterators(void *, void *)
Nothing to do.
void TGenCollectionProxy__SlowDeleteSingleIterators(void *)
Nothing to do.
externTInterpreter * gCling
externTVirtualMutex * gInterpreterMutex
#define R__LOCKGUARD(mutex)
void *(* fCopyIterator)(void *dest, const void *source)
void *(* fConstructFunc)(void *, size_t)
void *(* fClearFunc)(void *)
void *(* fFirstFunc)(void *)
void(* fDestructFunc)(void *, size_t)
void(* fDeleteTwoIterators)(void *begin, void *end)
void *(* fCollectFunc)(void *, void *)
void *(* fSizeFunc)(void *)
void *(* fNextFunc)(void *)
void *(* fFeedFunc)(void *, void *, size_t)
void(* fDeleteSingleIterator)(void *iter)
void(* fResizeFunc)(void *, size_t)
void(* fCreateIterators)(void *collection, void **begin_arena, void **end_arena, TVirtualCollectionProxy *proxy)
void *(* fNext)(void *iter, const void *end)
Buffer base class used for serializing objects.
Bool_t IsSyntheticPair() const
void Streamer(void *obj, TBuffer &b, const TClass *onfile_class=nullptr) const
void ForceReload(TClass *oldcl)
we found at least one equivalent.
Bool_t HasInterpreterInfo() const
Bool_t IsLoaded() const
Return true if the shared library of this class is currently in the a process's memory.
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,...
Int_t GetClassSize() const
TVirtualStreamerInfo * GetConversionStreamerInfo(const char *onfile_classname, Int_t version) const
Return a Conversion StreamerInfo from the class 'classname' for version number 'version' to this clas...
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
Basic data type descriptor (datatype information is obtained from CINT).
static TDataType * GetDataType(EDataType type)
Given a EDataType type, get the TDataType* that represents it.
Int_t Size() const
Get size of basic typedef'ed type.
static TEnum * GetEnum(const std::type_info &ti, ESearchAction sa=kALoadAndInterpLookup)
TGenBitsetProxy(const TGenCollectionProxy &c)
void DeleteItem(Bool_t force, void *ptr) const override
Call to delete/destruct individual item.
void * At(UInt_t idx) override
Return the address of the value at index idx.
~TGenBitsetProxy() override
Small helper to stage the content of an associative container when reading and before inserting it in...
void Resize(size_t nelement)
void SetTarget(void *target)
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.
Next_t fFunctionNextIterator
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...
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.
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 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 void Resize(UInt_t n, Bool_t force_delete)
Resize the container.
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.
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_...
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
~TGenListProxy() override
void * At(UInt_t idx) override
Return the address of the value at index 'idx'.
TGenListProxy(const TGenCollectionProxy &c)
TGenMapProxy(const TGenCollectionProxy &c)
void DeleteItem(Bool_t force, void *ptr) const override
Call to delete/destruct individual item.
void * At(UInt_t idx) override
Return the address of the value at index 'idx'.
TGenSetProxy(const TGenCollectionProxy &c)
Local optimization class.
void * At(UInt_t idx) override
Return the address of the value at index 'idx'.
TGenVectorBoolProxy(const TGenCollectionProxy &c)
~TGenVectorBoolProxy() override
void DeleteItem(Bool_t force, void *ptr) const override
Call to delete/destruct individual item.
Local optimization class.
void DeleteItem(Bool_t force, void *ptr) const override
Call to delete/destruct individual item.
void * At(UInt_t idx) override
Return the address of the value at index 'idx'.
~TGenVectorProxy() override
TGenVectorProxy(const TGenCollectionProxy &c)
THashTable implements a hash table to store TObject's.
const char * GetName() const override
Returns name of object.
virtual void AddAtAndExpand(TObject *obj, Int_t idx)
Add object at position idx.
TObject * At(Int_t idx) const override
static TActionSequence * CreateReadMemberWiseActions(TVirtualStreamerInfo *info, TVirtualCollectionProxy &proxy)
Create the bundle of the actions necessary for the streaming memberwise of the content described by '...
static TActionSequence * CreateWriteMemberWiseActions(TVirtualStreamerInfo *info, TVirtualCollectionProxy &proxy)
Create the bundle of the actions necessary for the streaming memberwise of the content described by '...
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.
virtual Int_t GetProperties() const
Return miscallenous properties of the proxy (see TVirtualCollectionProxy::EProperty).
void(* CreateIterators_t)(void *collection, void **begin_arena, void **end_arena, TVirtualCollectionProxy *proxy)
*begin_arena and *end_arena should contain the location of a memory arena of size fgIteratorArenaSize...
@ kCustomAlloc
The collection has a custom allocator.
@ kNeedDelete
The collection contains directly or indirectly (via other collection) some pointers that need explici...
void *(* CopyIterator_t)(void *dest, const void *source)
Copy the iterator source into dest.
virtual void Clear(const char *opt="")=0
Clear the container.
void *(* Next_t)(void *iter, const void *end)
iter and end should be pointers to an iterator to be incremented and an iterator that points to the e...
virtual UInt_t Size() const =0
Return the current number of elements in the container.
void(* DeleteTwoIterators_t)(void *begin, void *end)
void(* DeleteIterator_t)(void *iter)
If the size of the iterator is greater than fgIteratorArenaSize, call delete on the addresses; otherw...
TVirtualCollectionProxy(const TVirtualCollectionProxy &)=delete
Abstract Interface class describing Streamer information for one class.
virtual TVirtualStreamerInfo * GenerateInfoForPair(const std::string &pairclassname, bool silent, size_t hint_pair_offset, size_t hint_pair_size)=0
Generate the TClass and TStreamerInfo for the requested pair.
static TVirtualStreamerInfo * Factory()
Static function returning a pointer to a new TVirtualStreamerInfo object.
ROOT::ESTLType STLKind(std::string_view type)
Converts STL container name to number.
std::string GetNameForIO(const std::string &templateInstanceName, TClassEdit::EModType mode=TClassEdit::kNone, bool *hasChanged=nullptr)
int GetSplit(const char *type, std::vector< std::string > &output, int &nestedLoc, EModType mode=TClassEdit::kNone)
Stores in output (after emptying it) the split type.
bool IsDefAlloc(const char *alloc, const char *classname)
return whether or not 'allocname' is the STL default allocator for type 'classname'
Small helper to describe the Value_type or the key_type of an STL container.
void DeleteItem(void *ptr)
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.
TVirtualCollectionProxy * fProxy
TGenCollectionProxy__SlowIterator(TVirtualCollectionProxy *proxy)