1    	// @(#)root/table:$Id$
2    	// Author: Valery Fine(fine@bnl.gov)   25/12/98
3    	
4    	/*************************************************************************
5    	 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
6    	 * All rights reserved.                                                  *
7    	 *                                                                       *
8    	 * For the licensing terms see $ROOTSYS/LICENSE.                         *
9    	 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
10   	 *************************************************************************/
11   	#ifndef ROOT_TObjectSet
12   	#define ROOT_TObjectSet
13   	
14   	#include "TDataSet.h"
15   	
16   	//////////////////////////////////////////////////////////////////////////////////////
17   	//                                                                                  //
18   	//  TObjectSet  - is a container TDataSet                                           //
19   	//                  This means this object has an extra pointer to an embedded      //
20   	//                  TObject.                                                        //
21   	//  Terminology:    This TObjectSet may be an OWNER of the embeded TObject          //
22   	//                  If the container is the owner it can delete the embeded object  //
23   	//                  otherwsie it leaves that object "as is"                         //
24   	//                                                                                  //
25   	//////////////////////////////////////////////////////////////////////////////////////
26   	
27   	class TObjectSet : public TDataSet {
28   	protected:
29   	   enum EOwnerBits { kIsOwner         = BIT(23) };
30   	   TObject *fObj;                              // TObject to be inserted
31   	
32   	public:
33   	   TObjectSet(const Char_t *name, TObject *obj=0,Bool_t makeOwner=kTRUE);
34   	   TObjectSet(TObject *obj=0,Bool_t makeOwner=kTRUE);
35   	   virtual ~TObjectSet();
36   	   virtual TObject *AddObject(TObject *obj,Bool_t makeOwner=kTRUE);
37   	   virtual void     Browse(TBrowser *b);
38   	   virtual void     Delete(Option_t *opt="");
39   	   virtual Bool_t   DoOwner(Bool_t done=kTRUE);
40   	   virtual Long_t   HasData() const;
41   	   virtual TObject *GetObject() const; 
42   	   virtual TDataSet *Instance() const;
43   	   virtual Bool_t   IsOwner() const;
44   	   virtual void     SetObject(TObject *obj);
45   	   virtual TObject *SetObject(TObject *obj,Bool_t makeOwner);
46   	
47   	   static TObjectSet *instance();
48   	
49   	   ClassDef(TObjectSet,1) // TDataSet wrapper for TObject class objects
50   	};
51   	
52   	inline TObjectSet *TObjectSet::instance()
53   	{ return new TObjectSet();}
54   	
55   	inline Long_t   TObjectSet::HasData()   const {return fObj ? 1 : 0;}
56   	inline TObject *TObjectSet::GetObject() const {return fObj;}
57   	inline Bool_t   TObjectSet::IsOwner()   const {return TestBit(kIsOwner);}
58   	
59   	inline void     TObjectSet::SetObject(TObject *obj) { SetObject(obj,kTRUE);}
60   	
61   	#endif
62   	
63