00001 // @(#)root/cont:$Id: TProcessID.h 26606 2008-12-02 20:36:09Z pcanal $ 00002 // Author: Rene Brun 28/09/2001 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 #ifndef ROOT_TProcessID 00013 #define ROOT_TProcessID 00014 00015 00016 ////////////////////////////////////////////////////////////////////////// 00017 // // 00018 // TProcessID // 00019 // // 00020 // Process Identifier object // 00021 // // 00022 ////////////////////////////////////////////////////////////////////////// 00023 00024 00025 #ifndef ROOT_TNamed 00026 #include "TNamed.h" 00027 #endif 00028 #ifndef ROOT_TObjArray 00029 #include "TObjArray.h" 00030 #endif 00031 00032 class TExMap; 00033 00034 class TProcessID : public TNamed { 00035 00036 private: 00037 TProcessID(const TProcessID &ref); // TProcessID are not copiable. 00038 TProcessID& operator=(const TProcessID &ref); // TProcessID are not copiable. 00039 00040 protected: 00041 Int_t fCount; //!Reference count to this object (from TFile) 00042 TObjArray *fObjects; //!Array pointing to the referenced objects 00043 00044 static TProcessID *fgPID; //Pointer to current session ProcessID 00045 static TObjArray *fgPIDs; //Table of ProcessIDs 00046 static TExMap *fgObjPIDs; //Table pointer to pids 00047 static UInt_t fgNumber; //Referenced objects count 00048 00049 public: 00050 TProcessID(); 00051 virtual ~TProcessID(); 00052 void CheckInit(); 00053 virtual void Clear(Option_t *option=""); 00054 Int_t DecrementCount(); 00055 Int_t IncrementCount(); 00056 Int_t GetCount() const {return fCount;} 00057 TObjArray *GetObjects() const {return fObjects;} 00058 TObject *GetObjectWithID(UInt_t uid); 00059 void PutObjectWithID(TObject *obj, UInt_t uid=0); 00060 virtual void RecursiveRemove(TObject *obj); 00061 00062 static TProcessID *AddProcessID(); 00063 static UInt_t AssignID(TObject *obj); 00064 static void Cleanup(); 00065 static UInt_t GetNProcessIDs(); 00066 static TProcessID *GetPID(); 00067 static TObjArray *GetPIDs(); 00068 static TProcessID *GetProcessID(UShort_t pid); 00069 static TProcessID *GetProcessWithUID(const TObject *obj); 00070 static TProcessID *GetProcessWithUID(UInt_t uid,const void *obj); 00071 static TProcessID *GetSessionProcessID(); 00072 static UInt_t GetObjectCount(); 00073 static Bool_t IsValid(TProcessID *pid); 00074 static void SetObjectCount(UInt_t number); 00075 00076 ClassDef(TProcessID,1) //Process Unique Identifier in time and space 00077 }; 00078 00079 #endif