-
Notifications
You must be signed in to change notification settings - Fork 0
/
TObject.h
235 lines (208 loc) · 9.83 KB
/
TObject.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
// @(#)root/base:$Id$
// Author: Rene Brun 26/12/94
/*************************************************************************
* Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
* All rights reserved. *
* *
* For the licensing terms see $ROOTSYS/LICENSE. *
* For the list of contributors see $ROOTSYS/README/CREDITS. *
*************************************************************************/
#ifndef ROOT_TObject
#define ROOT_TObject
//////////////////////////////////////////////////////////////////////////
// //
// TObject //
// //
// Mother of all ROOT objects. //
// //
// The TObject class provides default behaviour and protocol for all //
// objects in the ROOT system. It provides protocol for object I/O, //
// error handling, sorting, inspection, printing, drawing, etc. //
// Every object which inherits from TObject can be stored in the //
// ROOT collection classes. //
// //
//////////////////////////////////////////////////////////////////////////
#ifndef ROOT_Rtypes
#include "Rtypes.h"
#endif
#ifndef ROOT_TStorage
#include "TStorage.h"
#endif
#ifndef ROOT_TVersionCheck
#include "TVersionCheck.h"
#endif
#ifndef ROOT_Riosfwd
#include "Riosfwd.h"
#endif
#include <stdarg.h>
#ifdef WIN32
#undef RemoveDirectory
#endif
class TList;
class TBrowser;
class TBuffer;
class TObjArray;
class TMethod;
class TTimer;
class TObject {
private:
UInt_t fUniqueID; //object unique identifier
UInt_t fBits; //bit field status word
static Long_t fgDtorOnly; //object for which to call dtor only (i.e. no delete)
static Bool_t fgObjectStat; //if true keep track of objects in TObjectTable
protected:
void MakeZombie() { fBits |= kZombie; }
virtual void DoError(int level, const char *location, const char *fmt, va_list va) const;
public:
//----- Global bits (can be set for any object and should not be reused).
//----- Bits 0 - 13 are reserved as global bits. Bits 14 - 23 can be used
//----- in different class hierarchies (make sure there is no overlap in
//----- any given hierarchy).
enum EStatusBits {
kCanDelete = BIT(0), // if object in a list can be deleted
kMustCleanup = BIT(3), // if object destructor must call RecursiveRemove()
kObjInCanvas = BIT(3), // for backward compatibility only, use kMustCleanup
kIsReferenced = BIT(4), // if object is referenced by a TRef or TRefArray
kHasUUID = BIT(5), // if object has a TUUID (its fUniqueID=UUIDNumber)
kCannotPick = BIT(6), // if object in a pad cannot be picked
kNoContextMenu = BIT(8), // if object does not want context menu
kInvalidObject = BIT(13) // if object ctor succeeded but object should not be used
};
//----- Private bits, clients can only test but not change them
enum {
kIsOnHeap = 0x01000000, // object is on heap
kNotDeleted = 0x02000000, // object has not been deleted
kZombie = 0x04000000, // object ctor failed
kBitMask = 0x00ffffff
};
//----- Write() options
enum {
kSingleKey = BIT(0), // write collection with single key
kOverwrite = BIT(1), // overwrite existing object with same name
kWriteDelete = BIT(2) // write object, then delete previous key with same name
};
TObject();
TObject(const TObject &object);
TObject &operator=(const TObject &rhs);
virtual ~TObject();
virtual void AppendPad(Option_t *option="");
virtual void Browse(TBrowser *b);
virtual const char *ClassName() const;
virtual void Clear(Option_t * /*option*/ ="") { }
virtual TObject *Clone(const char *newname="") const;
virtual Int_t Compare(const TObject *obj) const;
virtual void Copy(TObject &object) const;
virtual void Delete(Option_t *option=""); // *MENU*
virtual Int_t DistancetoPrimitive(Int_t px, Int_t py);
virtual void Draw(Option_t *option="");
virtual void DrawClass() const; // *MENU*
virtual TObject *DrawClone(Option_t *option="") const; // *MENU*
virtual void Dump() const; // *MENU*
virtual void Execute(const char *method, const char *params, Int_t *error=0);
virtual void Execute(TMethod *method, TObjArray *params, Int_t *error=0);
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py);
virtual TObject *FindObject(const char *name) const;
virtual TObject *FindObject(const TObject *obj) const;
virtual Option_t *GetDrawOption() const;
virtual UInt_t GetUniqueID() const;
virtual const char *GetName() const;
virtual const char *GetIconName() const;
virtual Option_t *GetOption() const { return ""; }
virtual char *GetObjectInfo(Int_t px, Int_t py) const;
virtual const char *GetTitle() const;
virtual Bool_t HandleTimer(TTimer *timer);
virtual ULong_t Hash() const;
virtual Bool_t InheritsFrom(const char *classname) const;
virtual Bool_t InheritsFrom(const TClass *cl) const;
virtual void Inspect() const; // *MENU*
virtual Bool_t IsFolder() const;
virtual Bool_t IsEqual(const TObject *obj) const;
virtual Bool_t IsSortable() const { return kFALSE; }
Bool_t IsOnHeap() const { return TestBit(kIsOnHeap); }
Bool_t IsZombie() const { return TestBit(kZombie); }
virtual Bool_t Notify();
virtual void ls(Option_t *option="") const;
virtual void Paint(Option_t *option="");
virtual void Pop();
virtual void Print(Option_t *option="") const;
virtual Int_t Read(const char *name);
virtual void RecursiveRemove(TObject *obj);
virtual void SaveAs(const char *filename="",Option_t *option="") const; // *MENU*
virtual void SavePrimitive(ostream &out, Option_t *option = "");
virtual void SetDrawOption(Option_t *option=""); // *MENU*
virtual void SetUniqueID(UInt_t uid);
virtual void UseCurrentStyle();
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0);
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0) const;
//----- operators
void *operator new(size_t sz) { return TStorage::ObjectAlloc(sz); }
void *operator new[](size_t sz) { return TStorage::ObjectAllocArray(sz); }
void *operator new(size_t sz, void *vp) { return TStorage::ObjectAlloc(sz, vp); }
void *operator new[](size_t sz, void *vp) { return TStorage::ObjectAlloc(sz, vp); }
void operator delete(void *ptr);
void operator delete[](void *ptr);
#ifdef R__PLACEMENTDELETE
void operator delete(void *ptr, void *vp);
void operator delete[](void *ptr, void *vp);
#endif
//----- bit manipulation
void SetBit(UInt_t f, Bool_t set);
void SetBit(UInt_t f) { fBits |= f & kBitMask; }
void ResetBit(UInt_t f) { fBits &= ~(f & kBitMask); }
Bool_t TestBit(UInt_t f) const { return (Bool_t) ((fBits & f) != 0); }
Int_t TestBits(UInt_t f) const { return (Int_t) (fBits & f); }
void InvertBit(UInt_t f) { fBits ^= f & kBitMask; }
//---- error handling
virtual void Info(const char *method, const char *msgfmt, ...) const
#if defined(__GNUC__) && !defined(__CINT__)
__attribute__((format(printf, 3, 4))) /* 1 is the this pointer */
#endif
;
virtual void Warning(const char *method, const char *msgfmt, ...) const
#if defined(__GNUC__) && !defined(__CINT__)
__attribute__((format(printf, 3, 4))) /* 1 is the this pointer */
#endif
;
virtual void Error(const char *method, const char *msgfmt, ...) const
#if defined(__GNUC__) && !defined(__CINT__)
__attribute__((format(printf, 3, 4))) /* 1 is the this pointer */
#endif
;
virtual void SysError(const char *method, const char *msgfmt, ...) const
#if defined(__GNUC__) && !defined(__CINT__)
__attribute__((format(printf, 3, 4))) /* 1 is the this pointer */
#endif
;
virtual void Fatal(const char *method, const char *msgfmt, ...) const
#if defined(__GNUC__) && !defined(__CINT__)
__attribute__((format(printf, 3, 4))) /* 1 is the this pointer */
#endif
;
void AbstractMethod(const char *method) const;
void MayNotUse(const char *method) const;
void Obsolete(const char *method, const char *asOfVers, const char *removedFromVers) const;
//---- static functions
static Long_t GetDtorOnly();
static void SetDtorOnly(void *obj);
static Bool_t GetObjectStat();
static void SetObjectStat(Bool_t stat);
friend class TClonesArray; // needs to reset kNotDeleted in fBits
ClassDef(TObject,1) //Basic ROOT object
};
// Global bits (can be set for any object and should not be reused).
// Only here for backward compatibility reasons.
// For detailed description see TObject::EStatusBits above.
enum EObjBits {
kCanDelete = TObject::kCanDelete,
kMustCleanup = TObject::kMustCleanup,
kObjInCanvas = TObject::kObjInCanvas,
kIsReferenced = TObject::kIsReferenced,
kHasUUID = TObject::kHasUUID,
kCannotPick = TObject::kCannotPick,
kNoContextMenu = TObject::kNoContextMenu,
kInvalidObject = TObject::kInvalidObject
};
#ifndef ROOT_TBuffer
#include "TBuffer.h"
#endif
#endif