// @(#)root/base:$Name: $:$Id: TObject.h,v 1.27 2005/05/13 15:55:56 rdm Exp $
// 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_Varargs
#include "Varargs.h"
#endif
#ifndef ROOT_TStorage
#include "TStorage.h"
#endif
#ifndef ROOT_Riosfwd
#include "Riosfwd.h"
#endif
#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 SavePrimitive(ofstream &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::ObjectAlloc(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;
virtual void Warning(const char *method, const char *msgfmt, ...) const;
virtual void Error(const char *method, const char *msgfmt, ...) const;
virtual void SysError(const char *method, const char *msgfmt, ...) const;
virtual void Fatal(const char *method, const char *msgfmt, ...) const;
void AbstractMethod(const char *method) const;
void MayNotUse(const char *method) const;
//---- static functions
static Long_t GetDtorOnly();
static void SetDtorOnly(void *obj);
static Bool_t GetObjectStat();
static void SetObjectStat(Bool_t stat);
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
syntax highlighted by Code2HTML, v. 0.9.1