TObjectSet.cxx

Go to the documentation of this file.
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 }

Generated on Tue Jul 5 14:45:05 2011 for ROOT_528-00b_version by  doxygen 1.5.1