Changeset 9025
- Timestamp:
- 07/21/08 09:11:21 (16 years ago)
- Location:
- trunk/MagicSoft/Mars/mbase
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/MagicSoft/Mars/mbase/MParContainer.cc
r8957 r9025 750 750 // -------------------------------------------------------------------------- 751 751 // 752 // Check if an object can be created through gROOT->GetClass(classname) 753 // return the correspodning TClass or NULL if this is not possible. 754 // A message containing the reason is returned in msg. 755 // 756 TClass *MParContainer::GetClass(const char *classname, TString &msg) 757 { 758 TClass *cls = gROOT->GetClass(classname); 759 Int_t rcc = 0; 760 if (!cls) 761 rcc = 1; 762 else 763 { 764 if (!cls->Property()) 765 rcc = 5; 766 if (!cls->Size()) 767 rcc = 4; 768 if (!cls->IsLoaded()) 769 rcc = 3; 770 if (!cls->HasDefaultConstructor()) 771 rcc = 2; 772 } 773 774 // Everything is ok. 775 if (rcc==0) 776 return cls; 777 778 msg += "Cannot create instance of class '"; 779 msg += classname; 780 msg += "': "; 781 782 switch (rcc) 783 { 784 case 1: 785 msg += "gROOT->GetClass() returned NULL."; 786 break; 787 case 2: 788 msg += "no default constructor."; 789 break; 790 case 3: 791 msg += "not loaded."; 792 break; 793 case 4: 794 msg += "zero size."; 795 break; 796 case 5: 797 msg += "no property."; 798 break; 799 default: 800 msg += "Unknown error."; 801 break; 802 } 803 804 return 0; 805 } 806 807 // -------------------------------------------------------------------------- 808 // 809 // Check if an object can be created through gROOT->GetClass(classname) 810 // return the correspodning TClass or NULL if this is not possible. 811 // A message with the reason is ouput. 812 // 813 TClass *MParContainer::GetClass(const char *classname, MLog *log) 814 { 815 TString msg; 816 TClass *cls = GetClass(classname, msg); 817 818 if (!cls && log) 819 *log << msg << endl; 820 821 return cls; 822 } 823 824 825 // -------------------------------------------------------------------------- 826 // 752 827 // Read the contents/setup of a parameter container/task from a TEnv 753 828 // instance (steering card/setup file). -
trunk/MagicSoft/Mars/mbase/MParContainer.h
r8724 r9025 151 151 MParContainer *GetNewObject(const char *name, TClass *base=MParContainer::Class()) const; 152 152 153 static TClass *GetClass(const char *classname, TString &msg); 154 static TClass *GetClass(const char *classname, MLog *log=NULL); 155 153 156 void RecursiveRemove(TObject *obj); 154 157 -
trunk/MagicSoft/Mars/mbase/MParList.cc
r8744 r9025 130 130 131 131 TIter Next(fContainer); 132 TObject *o ;132 TObject *o=0; 133 133 while ((o=Next())) 134 134 if (o->TestBit(kCanDelete)) … … 136 136 137 137 // FIXME? If fContainer is owner do we have to remove the object 138 // from fAutodelete due to the acces when checking for a138 // from fAutodelete due to the access when checking for a 139 139 // garbage collection? 140 141 140 delete fContainer; 142 141 delete fAutodelete; … … 572 571 // try to get class from root environment 573 572 // 574 TClass *cls = gROOT->GetClass(cname);575 Int_t rc = 0;573 *fLog << err; 574 TClass *cls = GetClass(cname, fLog); 576 575 if (!cls) 577 rc =1; 578 else 579 { 580 if (!cls->Property()) 581 rc = 5; 582 if (!cls->Size()) 583 rc = 4; 584 if (!cls->IsLoaded()) 585 rc = 3; 586 if (!cls->HasDefaultConstructor()) 587 rc = 2; 588 } 589 590 if (rc) 591 { 592 *fLog << err << dbginf << "Cannot create new instance of class '" << cname << "': "; 593 switch (rc) 594 { 595 case 1: 596 *fLog << "gROOT->GetClass() returned NULL." << endl; 597 return NULL; 598 case 2: 599 *fLog << "no default constructor." << endl; 600 return NULL; 601 case 3: 602 *fLog << "not loaded." << endl; 603 return NULL; 604 case 4: 605 *fLog << "zero size." << endl; 606 return NULL; 607 case 5: 608 *fLog << "no property." << endl; 609 return NULL; 610 } 611 } 576 return NULL; 612 577 613 578 if (!cls->InheritsFrom(MParContainer::Class())) … … 811 776 // try to get class from root environment 812 777 // 813 TClass *cls = gROOT->GetClass(cname);778 TClass *cls = GetClass(cname); 814 779 if (!cls) 815 { 816 // 817 // if class is not existing in the root environment 818 // 819 gLog << dbginf << "Class '" << cname << "' not existing in dictionary." << endl; 780 return list; 781 782 if (!cls->InheritsFrom(MParContainer::Class())) 783 { 784 *fLog << err << dbginf << "Cannot create new instance of class '" << cname << "': " << endl; 785 *fLog << "Class doesn't inherit from MParContainer." << endl; 820 786 return list; 821 787 }
Note:
See TracChangeset
for help on using the changeset viewer.