#include "TROOT.h" #include "TClass.h" #include "TBaseClass.h" #include "TDataMember.h" #include "TDataType.h" #include "TList.h" //______________________________________________________________________________ //UInt_t TClass::GetClassID() const UInt_t checksum(const char *className) { // GetClassID gives hash-like ID for a class. // It follows modifications in a : // 1. class itself; // 2. base clases // 3. member class // TClass *cl = gROOT->GetClass(className); if (!cl) return 0; int il; UInt_t id = 0; //UInt_t id = fClassID; //if (id) return id; TString name = cl->GetName(); TString type; il = name.Length(); for (int i=0; iGetListOfBases(); if (tlb) { // Loop over bases TIter nextBase(tlb); TBaseClass *tbc=0; while((tbc=(TBaseClass*)nextBase())) { name = tbc->GetName(); il = name.Length(); for (int i=0; iGetListOfDataMembers(); if (tlm) { // Loop over members TIter nextMemb(tlm); TDataMember *tdm=0; Long_t prop = 0; while((tdm=(TDataMember*)nextMemb())) { if (!tdm->IsPersistent()) continue; // combine properties prop = (tdm->Property()); TDataType* tdt = tdm->GetDataType(); if (tdt) prop |= tdt->Property(); if ( prop&kIsStatic) continue; name = tdm->GetName(); il = name.Length(); if ( prop&kIsEnum) id = id*3 + 1; printf("id3=%d\n",id); int i; for (i=0; iGetFullTypeName(); il = type.Length(); for (i=0; iGetArrayDim(); if (prop&kIsArray) { for (int i=0;iGetMaxIndex(i);} printf("id6=%d\n",id); }/*EndMembLoop*/ } //((TClass*)this)->fClassID =id; return id; }