00001 // @(#)root/table:$Id: TObjectSet.cxx 20882 2007-11-19 11:31:26Z rdm $ 00002 // Author: Valery Fine(fine@bnl.gov) 25/12/98 00003 00004 /************************************************************************* 00005 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. * 00006 * All rights reserved. * 00007 * * 00008 * For the licensing terms see $ROOTSYS/LICENSE. * 00009 * For the list of contributors see $ROOTSYS/README/CREDITS. * 00010 *************************************************************************/ 00011 00012 #include "TObjectSet.h" 00013 #include "TBrowser.h" 00014 00015 ClassImp(TObjectSet) 00016 00017 ////////////////////////////////////////////////////////////////////////////////////// 00018 // // 00019 // TObjectSet - is a container TDataSet // 00020 // This means this object has an extra pointer to an embedded // 00021 // TObject. // 00022 // Terminology: This TObjectSet may be an OWNER of the embeded TObject // 00023 // If the container is the owner it can delete the embeded object // 00024 // otherwsie it leaves that object "as is" // 00025 // // 00026 ////////////////////////////////////////////////////////////////////////////////////// 00027 00028 //_____________________________________________________________________________ 00029 TObjectSet::TObjectSet(const Char_t *name, TObject *obj, Bool_t makeOwner):TDataSet(name) 00030 { 00031 //to be documented 00032 SetTitle("TObjectSet"); 00033 SetObject(obj,makeOwner); 00034 } 00035 00036 //_____________________________________________________________________________ 00037 TObjectSet::TObjectSet(TObject *obj,Bool_t makeOwner) : TDataSet("unknown","TObjectSet") 00038 { 00039 //to be documented 00040 SetObject(obj,makeOwner); 00041 } 00042 00043 //_____________________________________________________________________________ 00044 TObjectSet::~TObjectSet() 00045 { 00046 //to be documented 00047 if (fObj && IsOwner() && (TObject::TestBit(kNotDeleted)) ) delete fObj; 00048 fObj = 0; 00049 } 00050 00051 //______________________________________________________________________________ 00052 TObject *TObjectSet::AddObject(TObject *obj,Bool_t makeOwner) 00053 { 00054 // Aliase for SetObject method 00055 return SetObject(obj,makeOwner); 00056 } 00057 00058 //______________________________________________________________________________ 00059 void TObjectSet::Browse(TBrowser *b) 00060 { 00061 // Browse this dataset (called by TBrowser). 00062 if (b && fObj) b->Add(fObj); 00063 TDataSet::Browse(b); 00064 } 00065 00066 //_____________________________________________________________________________ 00067 void TObjectSet::Delete(Option_t *opt) 00068 { 00069 //to be documented 00070 if (opt) {/* no used */} 00071 if (fObj && IsOwner()) delete fObj; 00072 fObj = 0; 00073 TDataSet::Delete(); 00074 } 00075 //______________________________________________________________________________ 00076 Bool_t TObjectSet::DoOwner(Bool_t done) 00077 { 00078 // Set / Reset the ownerships and returns the previous 00079 // status of the ownerships. 00080 00081 Bool_t own = IsOwner(); 00082 if (own != done) { 00083 if (done) SetBit(kIsOwner); 00084 else ResetBit(kIsOwner); 00085 } 00086 return own; 00087 } 00088 //______________________________________________________________________________ 00089 TDataSet *TObjectSet::Instance() const 00090 { 00091 // apply the class default ctor to instantiate a new object of the same kind. 00092 // This is a base method to be overriden by the classes 00093 // derived from TDataSet (to support TDataSetIter::Mkdir for example) 00094 return instance(); 00095 } 00096 //______________________________________________________________________________ 00097 TObject *TObjectSet::SetObject(TObject *obj,Bool_t makeOwner) 00098 { 00099 // - Replace the embedded object with a new supplied 00100 // - Destroy the preivous embedded object if this is its owner 00101 // - Return the previous embedded object if any 00102 00103 TObject *oldObject = fObj; 00104 if (IsOwner()) { delete oldObject; oldObject = 0;} // the object has been killed 00105 fObj = obj; 00106 DoOwner(makeOwner); 00107 return oldObject; 00108 }