Logo ROOT   6.10/09
Reference Guide
TObject.h
Go to the documentation of this file.
1 // @(#)root/base:$Id$
2 // Author: Rene Brun 26/12/94
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 
12 #ifndef ROOT_TObject
13 #define ROOT_TObject
14 
15 
16 #include "RConfigure.h"
17 #include "Rtypes.h"
18 #include "TStorage.h"
19 #include "TVersionCheck.h"
20 
21 #include <stdarg.h>
22 #include <string>
23 #include <iosfwd>
24 
25 #ifdef WIN32
26 #undef RemoveDirectory
27 #endif
28 
29 class TList;
30 class TBrowser;
31 class TBuffer;
32 class TObjArray;
33 class TMethod;
34 class TTimer;
35 
36 
37 class TObject {
38 
39 private:
40  UInt_t fUniqueID; ///< object unique identifier
41  UInt_t fBits; ///< bit field status word
42 
43  static Long_t fgDtorOnly; ///< object for which to call dtor only (i.e. no delete)
44  static Bool_t fgObjectStat; ///< if true keep track of objects in TObjectTable
45 
46  static void AddToTObjectTable(TObject *);
47 
48 protected:
49  void MakeZombie() { fBits |= kZombie; }
50  virtual void DoError(int level, const char *location, const char *fmt, va_list va) const;
51 
52 public:
53  //----- Global bits (can be set for any object and should not be reused).
54  //----- Bits 0 - 13 are reserved as global bits. Bits 14 - 23 can be used
55  //----- in different class hierarchies (make sure there is no overlap in
56  //----- any given hierarchy).
57  enum EStatusBits {
58  kCanDelete = BIT(0), ///< if object in a list can be deleted
59  kMustCleanup = BIT(3), ///< if object destructor must call RecursiveRemove()
60  kObjInCanvas = BIT(3), ///< for backward compatibility only, use kMustCleanup
61  kIsReferenced = BIT(4), ///< if object is referenced by a TRef or TRefArray
62  kHasUUID = BIT(5), ///< if object has a TUUID (its fUniqueID=UUIDNumber)
63  kCannotPick = BIT(6), ///< if object in a pad cannot be picked
64  kNoContextMenu = BIT(8), ///< if object does not want context menu
65  kInvalidObject = BIT(13) ///< if object ctor succeeded but object should not be used
66  };
67 
68  //----- Private bits, clients can only test but not change them
69  enum {
70  kIsOnHeap = 0x01000000, ///< object is on heap
71  kNotDeleted = 0x02000000, ///< object has not been deleted
72  kZombie = 0x04000000, ///< object ctor failed
73  kBitMask = 0x00ffffff
74  };
75 
76  //----- Write() options
77  enum {
78  kSingleKey = BIT(0), ///< write collection with single key
79  kOverwrite = BIT(1), ///< overwrite existing object with same name
80  kWriteDelete = BIT(2) ///< write object, then delete previous key with same name
81  };
82 
83  TObject();
84  TObject(const TObject &object);
85  TObject &operator=(const TObject &rhs);
86  virtual ~TObject();
87 
88  virtual void AppendPad(Option_t *option="");
89  virtual void Browse(TBrowser *b);
90  virtual const char *ClassName() const;
91  virtual void Clear(Option_t * /*option*/ ="") { }
92  virtual TObject *Clone(const char *newname="") const;
93  virtual Int_t Compare(const TObject *obj) const;
94  virtual void Copy(TObject &object) const;
95  virtual void Delete(Option_t *option=""); // *MENU*
96  virtual Int_t DistancetoPrimitive(Int_t px, Int_t py);
97  virtual void Draw(Option_t *option="");
98  virtual void DrawClass() const; // *MENU*
99  virtual TObject *DrawClone(Option_t *option="") const; // *MENU*
100  virtual void Dump() const; // *MENU*
101  virtual void Execute(const char *method, const char *params, Int_t *error=0);
102  virtual void Execute(TMethod *method, TObjArray *params, Int_t *error=0);
103  virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py);
104  virtual TObject *FindObject(const char *name) const;
105  virtual TObject *FindObject(const TObject *obj) const;
106  virtual Option_t *GetDrawOption() const;
107  virtual UInt_t GetUniqueID() const;
108  virtual const char *GetName() const;
109  virtual const char *GetIconName() const;
110  virtual Option_t *GetOption() const { return ""; }
111  virtual char *GetObjectInfo(Int_t px, Int_t py) const;
112  virtual const char *GetTitle() const;
113  virtual Bool_t HandleTimer(TTimer *timer);
114  virtual ULong_t Hash() const;
115  virtual Bool_t InheritsFrom(const char *classname) const;
116  virtual Bool_t InheritsFrom(const TClass *cl) const;
117  virtual void Inspect() const; // *MENU*
118  virtual Bool_t IsFolder() const;
119  virtual Bool_t IsEqual(const TObject *obj) const;
120  virtual Bool_t IsSortable() const { return kFALSE; }
121  Bool_t IsOnHeap() const { return TestBit(kIsOnHeap); }
122  Bool_t IsZombie() const { return TestBit(kZombie); }
123  virtual Bool_t Notify();
124  virtual void ls(Option_t *option="") const;
125  virtual void Paint(Option_t *option="");
126  virtual void Pop();
127  virtual void Print(Option_t *option="") const;
128  virtual Int_t Read(const char *name);
129  virtual void RecursiveRemove(TObject *obj);
130  virtual void SaveAs(const char *filename="",Option_t *option="") const; // *MENU*
131  virtual void SavePrimitive(std::ostream &out, Option_t *option = "");
132  virtual void SetDrawOption(Option_t *option=""); // *MENU*
133  virtual void SetUniqueID(UInt_t uid);
134  virtual void UseCurrentStyle();
135  virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0);
136  virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0) const;
137 
138  //----- operators
139  void *operator new(size_t sz) { return TStorage::ObjectAlloc(sz); }
140  void *operator new[](size_t sz) { return TStorage::ObjectAllocArray(sz); }
141  void *operator new(size_t sz, void *vp) { return TStorage::ObjectAlloc(sz, vp); }
142  void *operator new[](size_t sz, void *vp) { return TStorage::ObjectAlloc(sz, vp); }
143  void operator delete(void *ptr);
144  void operator delete[](void *ptr);
145 #ifdef R__SIZEDDELETE
146  // Sized deallocation.
147  void operator delete(void*, size_t);
148  void operator delete[](void*, size_t);
149 #endif
150 #ifdef R__PLACEMENTDELETE
151  void operator delete(void *ptr, void *vp);
152  void operator delete[](void *ptr, void *vp);
153 #endif
154 
155  //----- bit manipulation
156  void SetBit(UInt_t f, Bool_t set);
157  void SetBit(UInt_t f) { fBits |= f & kBitMask; }
158  void ResetBit(UInt_t f) { fBits &= ~(f & kBitMask); }
159  Bool_t TestBit(UInt_t f) const { return (Bool_t) ((fBits & f) != 0); }
160  Int_t TestBits(UInt_t f) const { return (Int_t) (fBits & f); }
161  void InvertBit(UInt_t f) { fBits ^= f & kBitMask; }
162 
163  //---- error handling
164  virtual void Info(const char *method, const char *msgfmt, ...) const
165 #if defined(__GNUC__) && !defined(__CINT__)
166  __attribute__((format(printf, 3, 4))) /* 1 is the this pointer */
167 #endif
168  ;
169  virtual void Warning(const char *method, const char *msgfmt, ...) const
170 #if defined(__GNUC__) && !defined(__CINT__)
171  __attribute__((format(printf, 3, 4))) /* 1 is the this pointer */
172 #endif
173  ;
174  virtual void Error(const char *method, const char *msgfmt, ...) const
175 #if defined(__GNUC__) && !defined(__CINT__)
176  __attribute__((format(printf, 3, 4))) /* 1 is the this pointer */
177 #endif
178  ;
179  virtual void SysError(const char *method, const char *msgfmt, ...) const
180 #if defined(__GNUC__) && !defined(__CINT__)
181  __attribute__((format(printf, 3, 4))) /* 1 is the this pointer */
182 #endif
183  ;
184  virtual void Fatal(const char *method, const char *msgfmt, ...) const
185 #if defined(__GNUC__) && !defined(__CINT__)
186  __attribute__((format(printf, 3, 4))) /* 1 is the this pointer */
187 #endif
188  ;
189 
190  void AbstractMethod(const char *method) const;
191  void MayNotUse(const char *method) const;
192  void Obsolete(const char *method, const char *asOfVers, const char *removedFromVers) const;
193 
194  //---- static functions
195  static Long_t GetDtorOnly();
196  static void SetDtorOnly(void *obj);
197  static Bool_t GetObjectStat();
198  static void SetObjectStat(Bool_t stat);
199 
200  friend class TClonesArray; // needs to reset kNotDeleted in fBits
201 
202  ClassDef(TObject,1) //Basic ROOT object
203 };
204 
205 ////////////////////////////////////////////////////////////////////////////////
206 /// TObject constructor. It sets the two data words of TObject to their
207 /// initial values. The unique ID is set to 0 and the status word is
208 /// set depending if the object is created on the stack or allocated
209 /// on the heap. Depending on the ROOT environment variable "Root.MemStat"
210 /// (see TEnv) the object is added to the global TObjectTable for
211 /// bookkeeping.
212 
213 inline TObject::TObject() : fBits(kNotDeleted) // Need to leave FUniqueID unset
214 {
215  // This will be reported by valgrind as uninitialized memory reads for
216  // object created on the stack, use $ROOTSYS/etc/valgrind-root.supp
218 
219  fUniqueID = 0;
220 
222 }
223 
224 ////////////////////////////////////////////////////////////////////////////////
225 /// TObject copy ctor.
226 
227 inline TObject::TObject(const TObject &obj)
228 {
229  fBits = obj.fBits;
230 
231  // This will be reported by valgrind as uninitialized memory reads for
232  // object created on the stack, use $ROOTSYS/etc/valgrind-root.supp
234  fBits |= kIsOnHeap;
235  else
236  fBits &= ~kIsOnHeap;
237 
238  fBits &= ~kIsReferenced;
239  fBits &= ~kCanDelete;
240 
241  // Set only after used in above call
242  fUniqueID = obj.fUniqueID; // when really unique don't copy
243 
245 }
246 
247 ////////////////////////////////////////////////////////////////////////////////
248 /// TObject assignment operator.
249 
250 inline TObject &TObject::operator=(const TObject &rhs)
251 {
252  if (R__likely(this != &rhs)) {
253  fUniqueID = rhs.fUniqueID; // when really unique don't copy
254  if (IsOnHeap()) { // test uses fBits so don't move next line
255  fBits = rhs.fBits;
256  fBits |= kIsOnHeap;
257  } else {
258  fBits = rhs.fBits;
259  fBits &= ~kIsOnHeap;
260  }
261  fBits &= ~kIsReferenced;
262  fBits &= ~kCanDelete;
263  }
264  return *this;
265 }
266 
267 // Global bits (can be set for any object and should not be reused).
268 // Only here for backward compatibility reasons.
269 // For detailed description see TObject::EStatusBits above.
270 enum EObjBits {
279 };
280 
281 namespace cling {
282  std::string printValue(TObject *val);
283 }
284 
285 #endif
virtual void Clear(Option_t *="")
Definition: TObject.h:91
virtual void DoError(int level, const char *location, const char *fmt, va_list va) const
Interface to ErrorHandler (protected).
Definition: TObject.cxx:834
virtual void SysError(const char *method, const char *msgfmt,...) const
Issue system error message.
Definition: TObject.cxx:887
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory.
Definition: TObject.cxx:778
virtual UInt_t GetUniqueID() const
Return the unique object id.
Definition: TObject.cxx:382
object has not been deleted
Definition: TObject.h:71
UInt_t fUniqueID
object unique identifier
Definition: TObject.h:40
An array of TObjects.
Definition: TObjArray.h:37
object ctor failed
Definition: TObject.h:72
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
Definition: TObject.cxx:847
virtual ULong_t Hash() const
Return hash value for this object.
Definition: TObject.cxx:426
virtual TObject * DrawClone(Option_t *option="") const
Draw a clone of this object in the current selected pad for instance with: gROOT->SetSelectedPad(gPad...
Definition: TObject.cxx:226
virtual Int_t DistancetoPrimitive(Int_t px, Int_t py)
Computes distance from point (px,py) to the object.
Definition: TObject.cxx:193
const char Option_t
Definition: RtypesCore.h:62
virtual const char * GetIconName() const
Returns mime type name of object.
Definition: TObject.cxx:374
Bool_t TestBit(UInt_t f) const
Definition: TObject.h:159
#define BIT(n)
Definition: Rtypes.h:75
static void SetDtorOnly(void *obj)
Set destructor only flag.
Definition: TObject.cxx:970
Buffer base class used for serializing objects.
Definition: TBuffer.h:40
static void SetObjectStat(Bool_t stat)
Turn on/off tracking of objects in the TObjectTable.
Definition: TObject.cxx:954
if object in a pad cannot be picked
Definition: TObject.h:63
Int_t TestBits(UInt_t f) const
Definition: TObject.h:160
virtual void Browse(TBrowser *b)
Browse object. May be overridden for another default action.
Definition: TObject.cxx:126
static void * ObjectAlloc(size_t size)
Used to allocate a TObject on the heap (via TObject::operator new()).
Definition: TStorage.cxx:328
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
virtual void Draw(Option_t *option="")
Default Draw method for all objects.
Definition: TObject.cxx:202
virtual void UseCurrentStyle()
Set current style settings in this object This function is called when either TCanvas::UseCurrentStyl...
Definition: TObject.cxx:708
std::string printValue(TObject *val)
Print value overload.
Definition: TObject.cxx:1024
virtual void Print(Option_t *option="") const
This method must be overridden when a class wants to print itself.
Definition: TObject.cxx:543
static std::string format(double x, double y, int digits, int width)
void InvertBit(UInt_t f)
Definition: TObject.h:161
virtual char * GetObjectInfo(Int_t px, Int_t py) const
Returns string containing info about the object at position (px,py).
Definition: TObject.cxx:393
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
Definition: TObject.cxx:687
static Long_t GetDtorOnly()
Return destructor only flag.
Definition: TObject.cxx:962
overwrite existing object with same name
Definition: TObject.h:79
if object in a list can be deleted
Definition: TObject.h:58
virtual void RecursiveRemove(TObject *obj)
Recursively remove this object from a list.
Definition: TObject.cxx:565
virtual void AppendPad(Option_t *option="")
Append graphics object to current pad.
Definition: TObject.cxx:112
object is on heap
Definition: TObject.h:70
static Long_t fgDtorOnly
object for which to call dtor only (i.e. no delete)
Definition: TObject.h:43
virtual const char * ClassName() const
Returns name of class to which the object belongs.
Definition: TObject.cxx:135
TStopwatch timer
Definition: pirndm.C:37
#define ClassDef(name, id)
Definition: Rtypes.h:297
virtual void SaveAs(const char *filename="", Option_t *option="") const
Save this object in the file specified by filename.
Definition: TObject.cxx:592
virtual void Copy(TObject &object) const
Copy this to obj.
Definition: TObject.cxx:60
virtual Bool_t Notify()
This method must be overridden to handle object notification.
Definition: TObject.cxx:499
virtual Bool_t HandleTimer(TTimer *timer)
Execute action in response of a timer timing out.
Definition: TObject.cxx:418
virtual void Pop()
Pop on object drawn in a pad to the top of the display list.
Definition: TObject.cxx:521
void MayNotUse(const char *method) const
Use this method to signal that a method (defined in a base class) may not be called in a derived clas...
Definition: TObject.cxx:926
virtual Int_t Read(const char *name)
Read contents of object with specified name from the current directory.
Definition: TObject.cxx:555
TObject & operator=(const TObject &rhs)
TObject assignment operator.
Definition: TObject.h:250
void Obsolete(const char *method, const char *asOfVers, const char *removedFromVers) const
Use this method to declare a method obsolete.
Definition: TObject.cxx:935
TObject()
TObject constructor.
Definition: TObject.h:213
virtual void ls(Option_t *option="") const
The ls function lists the contents of a class on stdout.
Definition: TObject.cxx:485
virtual Bool_t IsEqual(const TObject *obj) const
Default equal comparison (objects are equal if they have the same address in memory).
Definition: TObject.cxx:476
virtual void DrawClass() const
Draw class inheritance tree of the class to which this object belongs.
Definition: TObject.cxx:217
for backward compatibility only, use kMustCleanup
Definition: TObject.h:60
virtual Option_t * GetDrawOption() const
Get option used by the graphics system to draw this object.
Definition: TObject.cxx:348
virtual void SetUniqueID(UInt_t uid)
Set the unique object id.
Definition: TObject.cxx:698
A doubly linked list.
Definition: TList.h:43
virtual void Delete(Option_t *option="")
Delete this object.
Definition: TObject.cxx:176
Using a TBrowser one can browse all ROOT objects.
Definition: TBrowser.h:37
virtual TObject * FindObject(const char *name) const
Must be redefined in derived classes.
Definition: TObject.cxx:328
virtual Bool_t IsSortable() const
Definition: TObject.h:120
if object ctor succeeded but object should not be used
Definition: TObject.h:65
virtual void Execute(const char *method, const char *params, Int_t *error=0)
Execute method on this object with the given parameter string, e.g.
Definition: TObject.cxx:284
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
Definition: TObject.cxx:436
if object has a TUUID (its fUniqueID=UUIDNumber)
Definition: TObject.h:62
virtual void Inspect() const
Dump contents of this object in a graphics canvas.
Definition: TObject.cxx:457
static Bool_t FilledByObjectAlloc(volatile UInt_t *member)
Definition: TStorage.h:88
unsigned int UInt_t
Definition: RtypesCore.h:42
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
Definition: TObject.cxx:873
Handles synchronous and a-synchronous timer events.
Definition: TTimer.h:51
The ROOT global object gROOT contains a list of all defined classes.
Definition: TClass.h:71
virtual Int_t Compare(const TObject *obj) const
Compare abstract method.
Definition: TObject.cxx:166
void SetBit(UInt_t f)
Definition: TObject.h:157
write collection with single key
Definition: TObject.h:78
static Bool_t GetObjectStat()
Get status of object stat flag.
Definition: TObject.cxx:947
if object destructor must call RecursiveRemove()
Definition: TObject.h:59
const Bool_t kFALSE
Definition: RtypesCore.h:92
UInt_t fBits
bit field status word
Definition: TObject.h:41
if object does not want context menu
Definition: TObject.h:64
long Long_t
Definition: RtypesCore.h:50
virtual void Paint(Option_t *option="")
This method must be overridden if a class wants to paint itself.
Definition: TObject.cxx:512
static Bool_t fgObjectStat
if true keep track of objects in TObjectTable
Definition: TObject.h:44
Bool_t IsOnHeap() const
Definition: TObject.h:121
double f(double x)
Bool_t IsZombie() const
Definition: TObject.h:122
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
Execute action corresponding to an event at (px,py).
Definition: TObject.cxx:318
EStatusBits
Definition: TObject.h:57
Print a TSeq at the prompt:
Definition: TDatime.h:115
#define R__likely(expr)
Definition: RConfig.h:540
virtual void Dump() const
Dump contents of object on stdout.
Definition: TObject.cxx:273
unsigned long ULong_t
Definition: RtypesCore.h:51
virtual ~TObject()
TObject destructor.
Definition: TObject.cxx:78
virtual Option_t * GetOption() const
Definition: TObject.h:110
Mother of all ROOT objects.
Definition: TObject.h:37
virtual TObject * Clone(const char *newname="") const
Make a clone of an object using the Streamer facility.
Definition: TObject.cxx:151
virtual const char * GetTitle() const
Returns title of object.
Definition: TObject.cxx:408
An array of clone (identical) objects.
Definition: TClonesArray.h:32
#define R__unlikely(expr)
Definition: RConfig.h:539
void MakeZombie()
Definition: TObject.h:49
Each ROOT class (see TClass) has a linked list of methods.
Definition: TMethod.h:38
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t Double_t b
Definition: TRolke.cxx:630
if object is referenced by a TRef or TRefArray
Definition: TObject.h:61
virtual Bool_t IsFolder() const
Returns kTRUE in case object contains browsable objects (like containers or lists of other objects)...
Definition: TObject.cxx:466
static void * ObjectAllocArray(size_t size)
Used to allocate array of TObject on the heap (via TObject::operator new[]()).
Definition: TStorage.cxx:340
void ResetBit(UInt_t f)
Definition: TObject.h:158
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
Definition: TObject.cxx:901
virtual void SetDrawOption(Option_t *option="")
Set drawing option for object.
Definition: TObject.cxx:670
virtual const char * GetName() const
Returns name of object.
Definition: TObject.cxx:364
write object, then delete previous key with same name
Definition: TObject.h:80
void AbstractMethod(const char *method) const
Use this method to implement an "abstract" method that you don&#39;t want to leave purely abstract...
Definition: TObject.cxx:915
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
Definition: TObject.cxx:859
static void AddToTObjectTable(TObject *)
Private helper function which will dispatch to TObjectTable::AddObj.
Definition: TObject.cxx:103
EObjBits
Definition: TObject.h:270
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save a primitive as a C++ statement(s) on output stream "out".
Definition: TObject.cxx:657