16 #include "TGenericClassInfo.h"
20 #include "TClassTable.h"
25 using ROOT::Internal::TInitBehavior;
26 using ROOT::Internal::TDefaultInitBehavior;
27 using ROOT::Internal::DefineBehavior;
41 class TypePatchInitBehavior
42 :
public TDefaultInitBehavior
45 virtual TClass *CreateClass(
const char *cname, Version_t
id,
46 const std::type_info &
info, TVirtualIsAProxy *isa,
47 const char *dfil,
const char *ifil,
48 Int_t
dl, Int_t
il)
const;
50 static TDefaultInitBehavior oldBehavior;
51 static TDefaultInitBehavior* oldBehaviorPtr;
53 TDefaultInitBehavior TypePatchInitBehavior::oldBehavior;
54 TDefaultInitBehavior* TypePatchInitBehavior::oldBehaviorPtr = 0;
61 TClass* TypePatchInitBehavior::CreateClass(
const char *cname,
63 const std::type_info &
info,
64 TVirtualIsAProxy *isa,
71 TClass*
cl = oldBehaviorPtr->CreateClass(cname,
id,
info, isa,
97 bool name_is_pair (
const char* clsname)
99 return (strncmp (clsname,
"pair<", 5) == 0 ||
100 strncmp (clsname,
"std::pair<", 10) == 0);
110 R__WRITE_LOCKGUARD (ROOT::gCoreMutex);
113 while (
const char* clsname = TClassTable::Next()) {
114 if (name_is_pair (clsname)) {
115 TClass*
cls = gROOT->GetClass (clsname, kFALSE);
117 cls->GetListOfBases()->Clear();
137 static bool initialized =
false;
138 if (initialized)
return;
146 TypePatchInitBehavior::oldBehaviorPtr = &TypePatchInitBehavior::oldBehavior;
148 const_cast<TInitBehavior*
>(DefineBehavior(0,0));
149 assert (
sizeof(TDefaultInitBehavior) ==
sizeof (TypePatchInitBehavior));
150 memcpy ((
char*)&TypePatchInitBehavior::oldBehavior, (
char*)
ib,
151 sizeof(TDefaultInitBehavior));
152 static TypePatchInitBehavior sfaib;
153 memcpy ((
char*)
ib, (
char*)&sfaib,
sizeof(TDefaultInitBehavior));
157 gROOT->GetClass(
"TObjString");
158 gROOT->GetClass(
"TTreeCache");
168 if (name_is_pair (
cls->GetName())) {
169 cls->GetListOfBases()->Clear();