15 #include "TBaseClass.h" 
   18 #include "TClassEdit.h" 
   19 #include "TDataMember.h" 
   20 #include "TDataType.h" 
   23 #include "TStreamerInfo.h" 
   38 UInt_t CalculateCheckSum (TClass* 
cl, 
const char* name_in)
 
   42   TString 
name = name_in;
 
   47   TList *tlb = 
cl->GetListOfBases();
 
   53     while((tbc=(TBaseClass*)nextBase())) {
 
   54       name = tbc->GetName();
 
   59   TList *tlm = 
cl->GetListOfDataMembers();
 
   64     while((tdm=(TDataMember*)nextMemb())) {
 
   65       if (!tdm->IsPersistent())        
continue;
 
   67       prop = (tdm->Property());
 
   68       TDataType* 
tdt = tdm->GetDataType();
 
   69       if (
tdt) prop |= 
tdt->Property();
 
   71       if ( prop&kIsStatic)             
continue;
 
   73       if (prop&kIsEnum) 
id = 
id*3 + 1;
 
   77       type = tdm->GetFullTypeName();
 
   82         R__WRITE_LOCKGUARD(ROOT::gCoreMutex);
 
   83         if (TClassEdit::IsSTLCont(
type) != ROOT::kNotSTL)
 
   84           type = TClassEdit::ShortType( 
type, TClassEdit::kDropStlDefault );
 
   90       int dim = tdm->GetArrayDim();
 
   92         for (
int i=0;
i<
dim;
i++) 
id = 
id*3+tdm->GetMaxIndex(
i);
 
  113   : fTransClass (trans_cls),
 
  114     fPersClass (pers_cls),
 
  115     fCheckSum (checksum),
 
  132   : fTransClass (trans_cls),
 
  133     fPersClass (pers_cls),
 
  134     fCheckSum (fTransClass ?
 
  135                  CalculateCheckSum (fPersClass, fTransClass->GetName()) : 0),
 
  152                                       const std::string& trans_cls,
 
  153                                       const std::string& pers_cls)
 
  154   : fTransClass (ToClass (trans_cls)),
 
  155     fPersClass (ToClass (pers_cls)),
 
  156     fCheckSum (checksum),
 
  174                                       const std::string& pers_cls)
 
  175   : fTransClass (ToClass (trans_cls)),
 
  176     fPersClass (ToClass (pers_cls)),
 
  177     fCheckSum (CalculateCheckSum (fPersClass, fTransClass->GetName())),
 
  192       Error (
"TVirtualConverter",
 
  193              "Both transient and persistent classes are null.");
 
  195       Error (
"TVirtualConverter",
 
  196              "Transient class is null for persistent class `%s'",
 
  200     Error (
"TVirtualConverter",
 
  201            "Persistent class is null for transient class `%s'",
 
  312   return gROOT->GetClass (
name.c_str());
 
  324   TClass* 
cl = gROOT->GetClass (
id);
 
  330   const char* 
name = 
id.name();
 
  331   cl = gROOT->GetClass (
name);
 
  334   const char* n2 = 
name;
 
  337   cl = gROOT->GetClass (n2);
 
  341   char* demname = 
nullptr;
 
  346     R__WRITE_LOCKGUARD(ROOT::gCoreMutex);
 
  347     demname = TClassEdit::DemangleTypeIdName (
id, errorCode);
 
  350     cl = gROOT->GetClass (demname);
 
  373   const TObjArray* trans_sis = 
fTransClass->GetStreamerInfos();
 
  374   if (trans_sis->GetLast() != 
fOldLast) {
 
  383     const TObjArray* pers_sis = 
fPersClass->GetStreamerInfos();
 
  384     assert (trans_sis->LowerBound() == pers_sis->LowerBound());
 
  385     for (Int_t 
v = trans_sis->LowerBound(); v <= trans_sis->GetLast(); ++
v) {
 
  387           trans_sis->At(
v) != 0 &&
 
  388           (
v > pers_sis->GetLast() || pers_sis->At(
v) == 0))
 
  394         TStreamerInfo* new_si =(TStreamerInfo*)(trans_sis->At(
v)->Clone());
 
  413   : fTransClass (nullptr),
 
  414     fPersClass (nullptr),