// @(#)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.             *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// 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.                                             //
// TObject's bits can be used as flags, bits 0 - 13 and 24-31 are       //
// reserved as  global bits while bits 14 - 23 can be used in different //
// class hierarchies (watch out for overlaps).                          //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include <string.h>
#if !defined(WIN32) && !defined(__MWERKS__) && !defined(R__SOLARIS)
#include <strings.h>
#endif
#include <stdlib.h>
#include <stdio.h>

#include "Varargs.h"
#include "Riostream.h"
#include "TObject.h"
#include "TClass.h"
#include "TGuiFactory.h"
#include "TMethod.h"
#include "TROOT.h"
#include "TError.h"
#include "TObjectTable.h"
#include "TVirtualPad.h"
#include "TInterpreter.h"
#include "TMemberInspector.h"
#include "TObjString.h"
#include "TRefTable.h"
#include "TProcessID.h"

Long_t TObject::fgDtorOnly = 0;
Bool_t TObject::fgObjectStat = kTRUE;

ClassImp(TObject)

//______________________________________________________________________________
TObject::TObject() : fBits(kNotDeleted) //Need to leave FUniqueID unset
{
   // TObject constructor. It sets the two data words of TObject to their
   // initial values. The unique ID is set to 0 and the status word is
   // set depending if the object is created on the stack or allocated
   // on the heap. Depending on the ROOT environment variable "Root.MemStat"
   // (see TEnv) the object is added to the global TObjectTable for
   // bookkeeping.

   // This will be reported by valgrind as uninitialized memory reads for
   // object created on the stack, use $ROOTSYS/etc/valgrind-root.supp
   if (TStorage::FilledByObjectAlloc(&fUniqueID))
      fBits |= kIsOnHeap;

   fUniqueID = 0;

   if (fgObjectStat) TObjectTable::AddObj(this);
}

//______________________________________________________________________________
TObject::TObject(const TObject &obj)
{
   // TObject copy ctor.

   fBits = obj.fBits;

   // This will be reported by valgrind as uninitialized memory reads for
   // object created on the stack, use $ROOTSYS/etc/valgrind-root.supp
   if (TStorage::FilledByObjectAlloc(&fUniqueID))
      fBits |= kIsOnHeap;
   else
      fBits &= ~kIsOnHeap;

   fBits &= ~kIsReferenced;
   fBits &= ~kCanDelete;

   //Set only after used in above call
   fUniqueID = obj.fUniqueID;  // when really unique don't copy

   if (fgObjectStat) TObjectTable::AddObj(this);
}

//______________________________________________________________________________
TObject& TObject::operator=(const TObject &rhs)
{
   // TObject assignment operator.

   if (this != &rhs) {
      fUniqueID = rhs.fUniqueID;  // when really unique don't copy
      if (IsOnHeap()) {           // test uses fBits so don't move next line
         fBits  = rhs.fBits;
         fBits |= kIsOnHeap;
      } else {
         fBits  = rhs.fBits;
         fBits &= ~kIsOnHeap;
      }
      fBits &= ~kIsReferenced;
      fBits &= ~kCanDelete;
   }
   return *this;
}

//______________________________________________________________________________
void TObject::Copy(TObject &obj) const
{
   // Copy this to obj.

   obj.fUniqueID = fUniqueID;   // when really unique don't copy
   if (obj.IsOnHeap()) {        // test uses fBits so don't move next line
      obj.fBits  = fBits;
      obj.fBits |= kIsOnHeap;
   } else {
      obj.fBits  = fBits;
      obj.fBits &= ~kIsOnHeap;
   }
   obj.fBits &= ~kIsReferenced;
   obj.fBits &= ~kCanDelete;
}

//______________________________________________________________________________
TObject::~TObject()
{
   // TObject destructor. Removes object from all canvases and object browsers
   // if observer bit is on and remove from the global object table.

   // if (!TestBit(kNotDeleted))
   //    Fatal("~TObject", "object deleted twice");

   TROOT *root = ROOT::gROOTLocal;
   if (root) {
      if (root->MustClean()) {
         if (root == this) return;
         if (TestBit(kMustCleanup)) {
            root->GetListOfCleanups()->RecursiveRemove(this);
         }
      }
   }

   fBits &= ~kNotDeleted;

   if (fgObjectStat && gObjectTable) gObjectTable->RemoveQuietly(this);
}

//______________________________________________________________________________
void TObject::AppendPad(Option_t *option)
{
   // Append graphics object to current pad. In case no current pad is set
   // yet, create a default canvas with the name "c1".

   if (!gPad) {
      gROOT->MakeDefCanvas();
   }
   if (!gPad->IsEditable()) return;
   SetBit(kMustCleanup);
   gPad->GetListOfPrimitives()->Add(this,option);
   gPad->Modified(kTRUE);
}

//______________________________________________________________________________
void TObject::Browse(TBrowser *b)
{
   // Browse object. May be overridden for another default action

   //Inspect();
   TClass::AutoBrowse(this,b);
}

//______________________________________________________________________________
const char *TObject::ClassName() const
{
   // Returns name of class to which the object belongs.

   return IsA()->GetName();
}

//______________________________________________________________________________
TObject *TObject::Clone(const char *) const
{
   // Make a clone of an object using the Streamer facility.
   // If the object derives from TNamed, this function is called
   // by TNamed::Clone. TNamed::Clone uses the optional argument to set
   // a new name to the newly created object.
   //
   // If the object class has a DirectoryAutoAdd function, it will be
   // called at the end of the function with the parameter gDirectory.
   // This usually means that the object will be appended to the current
   // ROOT directory.

   if (gDirectory) {
     return gDirectory->CloneObject(this);
   } else {
     Fatal("Clone","No gDirectory set");
     return 0;
   }
}

//______________________________________________________________________________
Int_t TObject::Compare(const TObject *) const
{
   // Compare abstract method. Must be overridden if a class wants to be able
   // to compare itself with other objects. Must return -1 if this is smaller
   // than obj, 0 if objects are equal and 1 if this is larger than obj.

   AbstractMethod("Compare");
   return 0;
}

//______________________________________________________________________________
void TObject::Delete(Option_t *)
{
   // Delete this object. Typically called as a command via the interpreter.
   // Normally use "delete" operator when object has been allocated on the heap.

   if (IsOnHeap()) {
      // Delete object from CINT symbol table so it can not be used anymore.
      // CINT object are always on the heap.
      gInterpreter->DeleteGlobal(this);

      delete this;
   }
}


//______________________________________________________________________________
Int_t TObject::DistancetoPrimitive(Int_t, Int_t)
{
   // Computes distance from point (px,py) to the object.
   // This member function must be implemented for each graphics primitive.
   // This default function returns a big number (999999).

   // AbstractMethod("DistancetoPrimitive");
   return 999999;
}

//______________________________________________________________________________
void TObject::Draw(Option_t *option)
{
   // Default Draw method for all objects

   AppendPad(option);
}

//______________________________________________________________________________
void TObject::DrawClass() const
{
   // Draw class inheritance tree of the class to which this object belongs.
   // If a class B inherits from a class A, description of B is drawn
   // on the right side of description of A.
   // Member functions overridden by B are shown in class A with a blue line
   // crossing-out the corresponding member function.
   // The following picture is the class inheritance tree of class TPaveLabel:
   //Begin_Html
   /*
   <img src="gif/drawclass.gif">
   */
   //End_Html

   IsA()->Draw();
}

//______________________________________________________________________________
TObject *TObject::DrawClone(Option_t *option) const
{
   // Draw a clone of this object in the current pad

   TVirtualPad *pad    = gROOT->GetSelectedPad();
   TVirtualPad *padsav = gPad;
   if (pad) pad->cd();

   TObject *newobj = Clone();
   if (!newobj) return 0;
   if (pad) {
      if (strlen(option)) pad->GetListOfPrimitives()->Add(newobj,option);
      else                pad->GetListOfPrimitives()->Add(newobj,GetDrawOption());
      pad->Modified(kTRUE);
      pad->Update();
      if (padsav) padsav->cd();
      return newobj;
   }
   if (strlen(option))  newobj->Draw(option);
   else                 newobj->Draw(GetDrawOption());
   if (padsav) padsav->cd();

   return newobj;
}

//______________________________________________________________________________
void TObject::Dump() const
{
   // Dump contents of object on stdout.
   // Using the information in the object dictionary (class TClass)
   // each data member is interpreted.
   // If a data member is a pointer, the pointer value is printed
   //
   // The following output is the Dump of a TArrow object:
   //   fAngle                   0           Arrow opening angle (degrees)
   //   fArrowSize               0.2         Arrow Size
   //   fOption.*fData
   //   fX1                      0.1         X of 1st point
   //   fY1                      0.15        Y of 1st point
   //   fX2                      0.67        X of 2nd point
   //   fY2                      0.83        Y of 2nd point
   //   fUniqueID                0           object unique identifier
   //   fBits                    50331648    bit field status word
   //   fLineColor               1           line color
   //   fLineStyle               1           line style
   //   fLineWidth               1           line width
   //   fFillColor               19          fill area color
   //   fFillStyle               1001        fill area style

   // Get the actual address of the object.
   const void *actual = IsA()->DynamicCast(TObject::Class(),this,kFALSE);
   IsA()->Dump(actual);
}

//______________________________________________________________________________
void TObject::Execute(const char *method, const char *params, Int_t *error)
{
   // Execute method on this object with the given parameter string, e.g.
   // "3.14,1,\"text\"".

   if (!IsA()) return;

   Bool_t must_cleanup = TestBit(kMustCleanup);

   gInterpreter->Execute(this, IsA(), method, params, error);

   if (gPad && must_cleanup) gPad->Modified();
}

//______________________________________________________________________________
void TObject::Execute(TMethod *method, TObjArray *params, Int_t *error)
{
   // Execute method on this object with parameters stored in the TObjArray.
   // The TObjArray should contain an argv vector like:
   //
   //  argv[0] ... argv[n] = the list of TObjString parameters

   if (!IsA()) return;

   Bool_t must_cleanup = TestBit(kMustCleanup);

   gInterpreter->Execute(this, IsA(), method, params, error);

   if (gPad && must_cleanup) gPad->Modified();
}


//______________________________________________________________________________
void TObject::ExecuteEvent(Int_t, Int_t, Int_t)
{
   // Execute action corresponding to an event at (px,py). This method
   // must be overridden if an object can react to graphics events.

   // AbstractMethod("ExecuteEvent");
}

//______________________________________________________________________________
TObject *TObject::FindObject(const char *) const
{
   // Must be redefined in derived classes.
   // This function is typycally used with TCollections, but can also be used
   // to find an object by name inside this object.

   return 0;
}

//______________________________________________________________________________
TObject *TObject::FindObject(const TObject *) const
{
   // Must be redefined in derived classes.
   // This function is typycally used with TCollections, but can also be used
   // to find an object inside this object.

   return 0;
}

//______________________________________________________________________________
Option_t *TObject::GetDrawOption() const
{
   // Get option used by the graphics system to draw this object.
   // Note that before calling object.GetDrawOption(), you must
   // have called object.Draw(..) before in the current pad.

   if (!gPad) return "";

   TListIter next(gPad->GetListOfPrimitives());
   TObject *obj;
   while ((obj = next())) {
      if (obj == this) return next.GetOption();
   }
   return "";
}

//______________________________________________________________________________
const char *TObject::GetName() const
{
   // Returns name of object. This default method returns the class name.
   // Classes that give objects a name should override this method.

   return IsA()->GetName();
}

//______________________________________________________________________________
const char *TObject::GetIconName() const
{
   // Returns mime type name of object. Used by the TBrowser (via TGMimeTypes
   // class). Override for class of which you would like to have different
   // icons for objects of the same class.

   return 0;
}

//______________________________________________________________________________
UInt_t TObject::GetUniqueID() const
{
   // Return the unique object id.

   return fUniqueID;
}

//______________________________________________________________________________
char *TObject::GetObjectInfo(Int_t px, Int_t py) const
{
   // Returns string containing info about the object at position (px,py).
   // This method is typically overridden by classes of which the objects
   // can report peculiarities for different positions.
   // Returned string will be re-used (lock in MT environment).

   if (!gPad) return (char*)"";
   static char info[64];
   Float_t x = gPad->AbsPixeltoX(px);
   Float_t y = gPad->AbsPixeltoY(py);
   snprintf(info,64,"x=%g, y=%g",gPad->PadtoX(x),gPad->PadtoY(y));
   return info;
}

//______________________________________________________________________________
const char *TObject::GetTitle() const
{
   // Returns title of object. This default method returns the class title
   // (i.e. description). Classes that give objects a title should override
   // this method.

   return IsA()->GetTitle();
}


//______________________________________________________________________________
Bool_t TObject::HandleTimer(TTimer *)
{
   // Execute action in response of a timer timing out. This method
   // must be overridden if an object has to react to timers.

   return kFALSE;
}

//______________________________________________________________________________
ULong_t TObject::Hash() const
{
   // Return hash value for this object.

   //return (ULong_t) this >> 2;
   const void *ptr = this;
   return TString::Hash(&ptr, sizeof(void*));
}

//______________________________________________________________________________
Bool_t TObject::InheritsFrom(const char *classname) const
{
   // Returns kTRUE if object inherits from class "classname".

   return IsA()->InheritsFrom(classname);
}

//______________________________________________________________________________
Bool_t TObject::InheritsFrom(const TClass *cl) const
{
   // Returns kTRUE if object inherits from TClass cl.

   return IsA()->InheritsFrom(cl);
}

//______________________________________________________________________________
void TObject::Inspect() const
{
   // Dump contents of this object in a graphics canvas.
   // Same action as Dump but in a graphical form.
   // In addition pointers to other objects can be followed.
   //
   // The following picture is the Inspect of a histogram object:
   //Begin_Html
   /*
   <img src="gif/hpxinspect.gif">
   */
   //End_Html

   gGuiFactory->CreateInspectorImp(this, 400, 200);
}

//______________________________________________________________________________
Bool_t TObject::IsFolder() const
{
   // Returns kTRUE in case object contains browsable objects (like containers
   // or lists of other objects).

   return kFALSE;
}

//______________________________________________________________________________
Bool_t TObject::IsEqual(const TObject *obj) const
{
   // Default equal comparison (objects are equal if they have the same
   // address in memory). More complicated classes might want to override
   // this function.

   return obj == this;
}

//______________________________________________________________________________
void TObject::ls(Option_t *option) const
{
   // The ls function lists the contents of a class on stdout. Ls output
   // is typically much less verbose then Dump().

   TROOT::IndentLevel();
   std::cout <<"OBJ: " << IsA()->GetName() << "\t" << GetName() << "\t" << GetTitle() << " : ";
   std::cout << Int_t(TestBit(kCanDelete));
   if (option && strstr(option,"noaddr")==0) {
      std::cout <<" at: "<< this ;
   }
   std::cout << std::endl;
}

//______________________________________________________________________________
Bool_t TObject::Notify()
{
   // This method must be overridden to handle object notifcation.

   return kFALSE;
}

//______________________________________________________________________________
void TObject::Paint(Option_t *)
{
   // This method must be overridden if a class wants to paint itself.
   // The difference between Paint() and Draw() is that when a object
   // draws itself it is added to the display list of the pad in
   // which it is drawn (and automatically redrawn whenever the pad is
   // redrawn). While paint just draws the object without adding it to
   // the pad display list.

   // AbstractMethod("Paint");
}

//______________________________________________________________________________
void TObject::Pop()
{
   // Pop on object drawn in a pad to the top of the display list. I.e. it
   // will be drawn last and on top of all other primitives.

   if (!gPad) return;

   if (this == gPad->GetListOfPrimitives()->Last()) return;

   TListIter next(gPad->GetListOfPrimitives());
   TObject *obj;
   while ((obj = next()))
      if (obj == this) {
         char *opt = StrDup(next.GetOption());
         gPad->GetListOfPrimitives()->Remove((TObject*)this);
         gPad->GetListOfPrimitives()->AddLast(this, opt);
         gPad->Modified();
         delete [] opt;
         return;
      }
}

//______________________________________________________________________________
void TObject::Print(Option_t *) const
{
   // This method must be overridden when a class wants to print itself.

   std::cout <<"OBJ: " << IsA()->GetName() << "\t" << GetName() << "\t" << GetTitle() << std::endl;
}

//______________________________________________________________________________
Int_t TObject::Read(const char *name)
{
   // Read contents of object with specified name from the current directory.
   // First the key with the given name is searched in the current directory,
   // next the key buffer is deserialized into the object.
   // The object must have been created before via the default constructor.
   // See TObject::Write().

   if (gDirectory) return gDirectory->ReadTObject(this,name);
   else            return 0;
}

//______________________________________________________________________________
void TObject::RecursiveRemove(TObject *)
{
   // Recursively remove this object from a list. Typically implemented
   // by classes that can contain mulitple references to a same object.

}


//______________________________________________________________________________
void TObject::SaveAs(const char *filename, Option_t *option) const
{
   // Save this object in the file specified by filename.
   //
   // - if "filename" contains ".root" the object is saved in filename as root
   //   binary file.
   //
   // - if "filename" contains ".xml"  the object is saved in filename as a xml
   //   ascii file.
   //
   // - if "filename" contains ".cc" the object is saved in filename as C code
   //   independant from ROOT. The code is generated via SavePrimitive().
   //   Specific code should be implemented in each object to handle this
   //   option. Like in TF1::SavePrimitive().
   //
   // - otherwise the object is written to filename as a CINT/C++ script. The
   //   C++ code to rebuild this object is generated via SavePrimitive(). The
   //   "option" parameter is passed to SavePrimitive. By default it is an empty
   //   string. It can be used to specify the Draw option in the code generated
   //   by SavePrimitive.
   //
   //  The function is available via the object context menu.

   //==============Save object as a root file===================================
   if (filename && strstr(filename,".root")) {
      if (gDirectory) gDirectory->SaveObjectAs(this,filename,"");
      return;
   }

   //==============Save object as a XML file====================================
   if (filename && strstr(filename,".xml")) {
      if (gDirectory) gDirectory->SaveObjectAs(this,filename,"");
      return;
   }

   //==============Save object as a C, ROOT independant, file===================
   if (filename && strstr(filename,".cc")) {
      char *fname = 0;
      if (filename && strlen(filename) > 0) {
         fname = (char*)filename;
      } else {
         fname = Form("%s.cc", GetName());
      }
      std::ofstream out;
      out.open(fname, std::ios::out);
      if (!out.good ()) {
         Error("SaveAs", "cannot open file: %s", fname);
         return;
      }
      ((TObject*)this)->SavePrimitive(out,"cc");
      out.close();
      Info("SaveAs", "cc file: %s has been generated", fname);
      return;
   }

   //==============Save as a C++ CINT file======================================
   char *fname = 0;
   if (filename && strlen(filename) > 0) {
      fname = (char*)filename;
   } else {
      fname = Form("%s.C", GetName());
   }
   std::ofstream out;
   out.open(fname, std::ios::out);
   if (!out.good ()) {
      Error("SaveAs", "cannot open file: %s", fname);
      return;
   }
   out <<"{"<<std::endl;
   out <<"//========= Macro generated from object: "<<GetName()<<"/"<<GetTitle()<<std::endl;
   out <<"//========= by ROOT version"<<gROOT->GetVersion()<<std::endl;
   ((TObject*)this)->SavePrimitive(out,option);
   out <<"}"<<std::endl;
   out.close();
   Info("SaveAs", "C++ Macro file: %s has been generated", fname);
}

//______________________________________________________________________________
void TObject::SavePrimitive(std::ostream &out, Option_t * /*= ""*/)
{
   // Save a primitive as a C++ statement(s) on output stream "out".

   out << "//Primitive: " << GetName() << "/" << GetTitle()
       <<". You must implement " << ClassName() << "::SavePrimitive" << std::endl;
}

//______________________________________________________________________________
void TObject::SetDrawOption(Option_t *option)
{
   // Set drawing option for object. This option only affects
   // the drawing style and is stored in the option field of the
   // TObjOptLink supporting a TPad's primitive list (TList).
   // Note that it does not make sense to call object.SetDrawOption(option)
   // before having called object.Draw().

   if (!gPad || !option) return;

   TListIter next(gPad->GetListOfPrimitives());
   delete gPad->FindObject("Tframe");
   TObject *obj;
   while ((obj = next()))
      if (obj == this) {
         next.SetOption(option);
         return;
      }
}

//______________________________________________________________________________
void TObject::SetBit(UInt_t f, Bool_t set)
{
   // Set or unset the user status bits as specified in f.

   if (set)
      SetBit(f);
   else
      ResetBit(f);
}

//______________________________________________________________________________
void TObject::SetUniqueID(UInt_t uid)
{
   // Set the unique object id.

   fUniqueID = uid;
}

//______________________________________________________________________________
void TObject::UseCurrentStyle()
{
   // Set current style settings in this object
   // This function is called when either TCanvas::UseCurrentStyle
   // or TROOT::ForceStyle have been invoked.
}

//______________________________________________________________________________
Int_t TObject::Write(const char *name, Int_t option, Int_t bufsize) const
{
   // Write this object to the current directory.
   // The data structure corresponding to this object is serialized.
   // The corresponding buffer is written to the current directory
   // with an associated key with name "name".
   //
   // Writing an object to a file involves the following steps:
   //
   //  -Creation of a support TKey object in the current directory.
   //   The TKey object creates a TBuffer object.
   //
   //  -The TBuffer object is filled via the class::Streamer function.
   //
   //  -If the file is compressed (default) a second buffer is created to
   //   hold the compressed buffer.
   //
   //  -Reservation of the corresponding space in the file by looking
   //   in the TFree list of free blocks of the file.
   //
   //  -The buffer is written to the file.
   //
   //  Bufsize can be given to force a given buffer size to write this object.
   //  By default, the buffersize will be taken from the average buffer size
   //  of all objects written to the current file so far.
   //
   //  If a name is specified, it will be the name of the key.
   //  If name is not given, the name of the key will be the name as returned
   //  by GetName().
   //
   //  The option can be a combination of:
   //    kSingleKey, kOverwrite or kWriteDelete
   //  Using the kOverwrite option a previous key with the same name is
   //  overwritten. The previous key is deleted before writing the new object.
   //  Using the kWriteDelete option a previous key with the same name is
   //  deleted only after the new object has been written. This option
   //  is safer than kOverwrite but it is slower.
   //  The kSingleKey option is only used by TCollection::Write() to write
   //  a container with a single key instead of each object in the container
   //  with its own key.
   //
   //  An object is read from the file into memory via TKey::Read() or
   //  via TObject::Read().
   //
   //  The function returns the total number of bytes written to the file.
   //  It returns 0 if the object cannot be written.

   TString opt = "";
   if (option & kSingleKey)   opt += "SingleKey";
   if (option & kOverwrite)   opt += "OverWrite";
   if (option & kWriteDelete) opt += "WriteDelete";

   if (gDirectory) return gDirectory->WriteTObject(this,name,opt.Data(),bufsize);
   else {
      const char *objname = "no name specified";
      if (name) objname = name;
      else objname = GetName();
      Error("Write","The current directory (gDirectory) is null. The object (%s) has not been written.",objname);
      return 0;
   }
}

//______________________________________________________________________________
Int_t TObject::Write(const char *name, Int_t option, Int_t bufsize)
{
   // Write this object to the current directory. For more see the
   // const version of this method.

   return ((const TObject*)this)->Write(name, option, bufsize);
}

//______________________________________________________________________________
void TObject::Streamer(TBuffer &R__b)
{
   // Stream an object of class TObject.

   if (IsA()->CanIgnoreTObjectStreamer()) return;
   UShort_t pidf;
   if (R__b.IsReading()) {
      R__b.SkipVersion(); // Version_t R__v = R__b.ReadVersion(); if (R__v) { }
      R__b >> fUniqueID;
      R__b >> fBits;
      fBits |= kIsOnHeap;  // by definition de-serialized object is on heap
      if (TestBit(kIsReferenced)) {
         //if the object is referenced, we must read its old address
         //and store it in the ProcessID map in gROOT
         R__b >> pidf;
         pidf += R__b.GetPidOffset();
         TProcessID *pid = R__b.ReadProcessID(pidf);
         if (pid) {
            UInt_t gpid = pid->GetUniqueID();
            if (gpid>=0xff) {
               fUniqueID = fUniqueID | 0xff000000;
            } else {
               fUniqueID = ( fUniqueID & 0xffffff) + (gpid<<24);
            }
            pid->PutObjectWithID(this);
         }
      }
   } else {
      R__b.WriteVersion(TObject::IsA());
      if (!TestBit(kIsReferenced)) {
         R__b << fUniqueID;
         R__b << fBits;
      } else {
         //if the object is referenced, we must save its address/file_pid
         UInt_t uid = fUniqueID & 0xffffff;
         R__b << uid;
         R__b << fBits;
         TProcessID *pid = TProcessID::GetProcessWithUID(fUniqueID,this);
         //add uid to the TRefTable if there is one
         TRefTable *table = TRefTable::GetRefTable();
         if(table) table->Add(uid, pid);
         pidf = R__b.WriteProcessID(pid);
         R__b << pidf;
      }
   }
}

//______________________________________________________________________________

//---- error handling ----------------------------------------------------------

//______________________________________________________________________________
void TObject::DoError(int level, const char *location, const char *fmt, va_list va) const
{
   // Interface to ErrorHandler (protected).

   const char *classname = "UnknownClass";
   if (TROOT::Initialized())
      classname = ClassName();

   ::ErrorHandler(level, Form("%s::%s", classname, location), fmt, va);
}

//______________________________________________________________________________
void TObject::Info(const char *location, const char *va_(fmt), ...) const
{
   // Issue info message. Use "location" to specify the method where the
   // warning occured. Accepts standard printf formatting arguments.

   va_list ap;
   va_start(ap, va_(fmt));
   DoError(kInfo, location, va_(fmt), ap);
   va_end(ap);
}

//______________________________________________________________________________
void TObject::Warning(const char *location, const char *va_(fmt), ...) const
{
   // Issue warning message. Use "location" to specify the method where the
   // warning occured. Accepts standard printf formatting arguments.

   va_list ap;
   va_start(ap, va_(fmt));
   DoError(kWarning, location, va_(fmt), ap);
   va_end(ap);
   if (TROOT::Initialized())
      gROOT->Message(1001, this);
}

//______________________________________________________________________________
void TObject::Error(const char *location, const char *va_(fmt), ...) const
{
   // Issue error message. Use "location" to specify the method where the
   // error occured. Accepts standard printf formatting arguments.

   va_list ap;
   va_start(ap, va_(fmt));
   DoError(kError, location, va_(fmt), ap);
   va_end(ap);
   if (TROOT::Initialized())
      gROOT->Message(1002, this);
}

//______________________________________________________________________________
void TObject::SysError(const char *location, const char *va_(fmt), ...) const
{
   // Issue system error message. Use "location" to specify the method where
   // the system error occured. Accepts standard printf formatting arguments.

   va_list ap;
   va_start(ap, va_(fmt));
   DoError(kSysError, location, va_(fmt), ap);
   va_end(ap);
   if (TROOT::Initialized())
      gROOT->Message(1003, this);
}

//______________________________________________________________________________
void TObject::Fatal(const char *location, const char *va_(fmt), ...) const
{
   // Issue fatal error message. Use "location" to specify the method where the
   // fatal error occured. Accepts standard printf formatting arguments.

   va_list ap;
   va_start(ap, va_(fmt));
   DoError(kFatal, location, va_(fmt), ap);
   va_end(ap);
   if (TROOT::Initialized())
      gROOT->Message(1004, this);
}

//______________________________________________________________________________
void TObject::AbstractMethod(const char *method) const
{
   // Use this method to implement an "abstract" method that you don't
   // want to leave purely abstract.

   Warning(method, "this method must be overridden!");
}

//______________________________________________________________________________
void TObject::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 class (in principle against good
   // design since a child class should not provide less functionality
   // than its parent, however, sometimes it is necessary).

   Warning(method, "may not use this method");
}

//______________________________________________________________________________
void TObject::Obsolete(const char *method, const char *asOfVers, const char *removedFromVers) const
{
   // Use this method to declare a method obsolete. Specify as of which version
   // the method is obsolete and as from which version it will be removed.

   const char *classname = "UnknownClass";
   if (TROOT::Initialized())
      classname = ClassName();

   ::Obsolete(Form("%s::%s", classname, method), asOfVers, removedFromVers);
}



//----------------- Static data members access ---------------------------------

//______________________________________________________________________________
Bool_t TObject::GetObjectStat()
{
   // Get status of object stat flag.

   return fgObjectStat;
}
//______________________________________________________________________________
void TObject::SetObjectStat(Bool_t stat)
{
   // Turn on/off tracking of objects in the TObjectTable.

   fgObjectStat = stat;
}

//______________________________________________________________________________
Long_t TObject::GetDtorOnly()
{
   //return destructor only flag
   return fgDtorOnly;
}

//______________________________________________________________________________
void TObject::SetDtorOnly(void *obj)
{
   //set destructor only flag
   fgDtorOnly = (Long_t) obj;
}

//______________________________________________________________________________
void TObject::operator delete(void *ptr)
{
   //operator delete
   if ((Long_t) ptr != fgDtorOnly)
      TStorage::ObjectDealloc(ptr);
   else
      fgDtorOnly = 0;
}

//______________________________________________________________________________
void TObject::operator delete[](void *ptr)
{
   //operator delete []
   if ((Long_t) ptr != fgDtorOnly)
      TStorage::ObjectDealloc(ptr);
   else
      fgDtorOnly = 0;
}

#ifdef R__PLACEMENTDELETE
//______________________________________________________________________________
void TObject::operator delete(void *ptr, void *vp)
{
   // Only called by placement new when throwing an exception.

   TStorage::ObjectDealloc(ptr, vp);
}

//______________________________________________________________________________
void TObject::operator delete[](void *ptr, void *vp)
{
   // Only called by placement new[] when throwing an exception.

   TStorage::ObjectDealloc(ptr, vp);
}
#endif
 TObject.cxx:1
 TObject.cxx:2
 TObject.cxx:3
 TObject.cxx:4
 TObject.cxx:5
 TObject.cxx:6
 TObject.cxx:7
 TObject.cxx:8
 TObject.cxx:9
 TObject.cxx:10
 TObject.cxx:11
 TObject.cxx:12
 TObject.cxx:13
 TObject.cxx:14
 TObject.cxx:15
 TObject.cxx:16
 TObject.cxx:17
 TObject.cxx:18
 TObject.cxx:19
 TObject.cxx:20
 TObject.cxx:21
 TObject.cxx:22
 TObject.cxx:23
 TObject.cxx:24
 TObject.cxx:25
 TObject.cxx:26
 TObject.cxx:27
 TObject.cxx:28
 TObject.cxx:29
 TObject.cxx:30
 TObject.cxx:31
 TObject.cxx:32
 TObject.cxx:33
 TObject.cxx:34
 TObject.cxx:35
 TObject.cxx:36
 TObject.cxx:37
 TObject.cxx:38
 TObject.cxx:39
 TObject.cxx:40
 TObject.cxx:41
 TObject.cxx:42
 TObject.cxx:43
 TObject.cxx:44
 TObject.cxx:45
 TObject.cxx:46
 TObject.cxx:47
 TObject.cxx:48
 TObject.cxx:49
 TObject.cxx:50
 TObject.cxx:51
 TObject.cxx:52
 TObject.cxx:53
 TObject.cxx:54
 TObject.cxx:55
 TObject.cxx:56
 TObject.cxx:57
 TObject.cxx:58
 TObject.cxx:59
 TObject.cxx:60
 TObject.cxx:61
 TObject.cxx:62
 TObject.cxx:63
 TObject.cxx:64
 TObject.cxx:65
 TObject.cxx:66
 TObject.cxx:67
 TObject.cxx:68
 TObject.cxx:69
 TObject.cxx:70
 TObject.cxx:71
 TObject.cxx:72
 TObject.cxx:73
 TObject.cxx:74
 TObject.cxx:75
 TObject.cxx:76
 TObject.cxx:77
 TObject.cxx:78
 TObject.cxx:79
 TObject.cxx:80
 TObject.cxx:81
 TObject.cxx:82
 TObject.cxx:83
 TObject.cxx:84
 TObject.cxx:85
 TObject.cxx:86
 TObject.cxx:87
 TObject.cxx:88
 TObject.cxx:89
 TObject.cxx:90
 TObject.cxx:91
 TObject.cxx:92
 TObject.cxx:93
 TObject.cxx:94
 TObject.cxx:95
 TObject.cxx:96
 TObject.cxx:97
 TObject.cxx:98
 TObject.cxx:99
 TObject.cxx:100
 TObject.cxx:101
 TObject.cxx:102
 TObject.cxx:103
 TObject.cxx:104
 TObject.cxx:105
 TObject.cxx:106
 TObject.cxx:107
 TObject.cxx:108
 TObject.cxx:109
 TObject.cxx:110
 TObject.cxx:111
 TObject.cxx:112
 TObject.cxx:113
 TObject.cxx:114
 TObject.cxx:115
 TObject.cxx:116
 TObject.cxx:117
 TObject.cxx:118
 TObject.cxx:119
 TObject.cxx:120
 TObject.cxx:121
 TObject.cxx:122
 TObject.cxx:123
 TObject.cxx:124
 TObject.cxx:125
 TObject.cxx:126
 TObject.cxx:127
 TObject.cxx:128
 TObject.cxx:129
 TObject.cxx:130
 TObject.cxx:131
 TObject.cxx:132
 TObject.cxx:133
 TObject.cxx:134
 TObject.cxx:135
 TObject.cxx:136
 TObject.cxx:137
 TObject.cxx:138
 TObject.cxx:139
 TObject.cxx:140
 TObject.cxx:141
 TObject.cxx:142
 TObject.cxx:143
 TObject.cxx:144
 TObject.cxx:145
 TObject.cxx:146
 TObject.cxx:147
 TObject.cxx:148
 TObject.cxx:149
 TObject.cxx:150
 TObject.cxx:151
 TObject.cxx:152
 TObject.cxx:153
 TObject.cxx:154
 TObject.cxx:155
 TObject.cxx:156
 TObject.cxx:157
 TObject.cxx:158
 TObject.cxx:159
 TObject.cxx:160
 TObject.cxx:161
 TObject.cxx:162
 TObject.cxx:163
 TObject.cxx:164
 TObject.cxx:165
 TObject.cxx:166
 TObject.cxx:167
 TObject.cxx:168
 TObject.cxx:169
 TObject.cxx:170
 TObject.cxx:171
 TObject.cxx:172
 TObject.cxx:173
 TObject.cxx:174
 TObject.cxx:175
 TObject.cxx:176
 TObject.cxx:177
 TObject.cxx:178
 TObject.cxx:179
 TObject.cxx:180
 TObject.cxx:181
 TObject.cxx:182
 TObject.cxx:183
 TObject.cxx:184
 TObject.cxx:185
 TObject.cxx:186
 TObject.cxx:187
 TObject.cxx:188
 TObject.cxx:189
 TObject.cxx:190
 TObject.cxx:191
 TObject.cxx:192
 TObject.cxx:193
 TObject.cxx:194
 TObject.cxx:195
 TObject.cxx:196
 TObject.cxx:197
 TObject.cxx:198
 TObject.cxx:199
 TObject.cxx:200
 TObject.cxx:201
 TObject.cxx:202
 TObject.cxx:203
 TObject.cxx:204
 TObject.cxx:205
 TObject.cxx:206
 TObject.cxx:207
 TObject.cxx:208
 TObject.cxx:209
 TObject.cxx:210
 TObject.cxx:211
 TObject.cxx:212
 TObject.cxx:213
 TObject.cxx:214
 TObject.cxx:215
 TObject.cxx:216
 TObject.cxx:217
 TObject.cxx:218
 TObject.cxx:219
 TObject.cxx:220
 TObject.cxx:221
 TObject.cxx:222
 TObject.cxx:223
 TObject.cxx:224
 TObject.cxx:225
 TObject.cxx:226
 TObject.cxx:227
 TObject.cxx:228
 TObject.cxx:229
 TObject.cxx:230
 TObject.cxx:231
 TObject.cxx:232
 TObject.cxx:233
 TObject.cxx:234
 TObject.cxx:235
 TObject.cxx:236
 TObject.cxx:237
 TObject.cxx:238
 TObject.cxx:239
 TObject.cxx:240
 TObject.cxx:241
 TObject.cxx:242
 TObject.cxx:243
 TObject.cxx:244
 TObject.cxx:245
 TObject.cxx:246
 TObject.cxx:247
 TObject.cxx:248
 TObject.cxx:249
 TObject.cxx:250
 TObject.cxx:251
 TObject.cxx:252
 TObject.cxx:253
 TObject.cxx:254
 TObject.cxx:255
 TObject.cxx:256
 TObject.cxx:257
 TObject.cxx:258
 TObject.cxx:259
 TObject.cxx:260
 TObject.cxx:261
 TObject.cxx:262
 TObject.cxx:263
 TObject.cxx:264
 TObject.cxx:265
 TObject.cxx:266
 TObject.cxx:267
 TObject.cxx:268
 TObject.cxx:269
 TObject.cxx:270
 TObject.cxx:271
 TObject.cxx:272
 TObject.cxx:273
 TObject.cxx:274
 TObject.cxx:275
 TObject.cxx:276
 TObject.cxx:277
 TObject.cxx:278
 TObject.cxx:279
 TObject.cxx:280
 TObject.cxx:281
 TObject.cxx:282
 TObject.cxx:283
 TObject.cxx:284
 TObject.cxx:285
 TObject.cxx:286
 TObject.cxx:287
 TObject.cxx:288
 TObject.cxx:289
 TObject.cxx:290
 TObject.cxx:291
 TObject.cxx:292
 TObject.cxx:293
 TObject.cxx:294
 TObject.cxx:295
 TObject.cxx:296
 TObject.cxx:297
 TObject.cxx:298
 TObject.cxx:299
 TObject.cxx:300
 TObject.cxx:301
 TObject.cxx:302
 TObject.cxx:303
 TObject.cxx:304
 TObject.cxx:305
 TObject.cxx:306
 TObject.cxx:307
 TObject.cxx:308
 TObject.cxx:309
 TObject.cxx:310
 TObject.cxx:311
 TObject.cxx:312
 TObject.cxx:313
 TObject.cxx:314
 TObject.cxx:315
 TObject.cxx:316
 TObject.cxx:317
 TObject.cxx:318
 TObject.cxx:319
 TObject.cxx:320
 TObject.cxx:321
 TObject.cxx:322
 TObject.cxx:323
 TObject.cxx:324
 TObject.cxx:325
 TObject.cxx:326
 TObject.cxx:327
 TObject.cxx:328
 TObject.cxx:329
 TObject.cxx:330
 TObject.cxx:331
 TObject.cxx:332
 TObject.cxx:333
 TObject.cxx:334
 TObject.cxx:335
 TObject.cxx:336
 TObject.cxx:337
 TObject.cxx:338
 TObject.cxx:339
 TObject.cxx:340
 TObject.cxx:341
 TObject.cxx:342
 TObject.cxx:343
 TObject.cxx:344
 TObject.cxx:345
 TObject.cxx:346
 TObject.cxx:347
 TObject.cxx:348
 TObject.cxx:349
 TObject.cxx:350
 TObject.cxx:351
 TObject.cxx:352
 TObject.cxx:353
 TObject.cxx:354
 TObject.cxx:355
 TObject.cxx:356
 TObject.cxx:357
 TObject.cxx:358
 TObject.cxx:359
 TObject.cxx:360
 TObject.cxx:361
 TObject.cxx:362
 TObject.cxx:363
 TObject.cxx:364
 TObject.cxx:365
 TObject.cxx:366
 TObject.cxx:367
 TObject.cxx:368
 TObject.cxx:369
 TObject.cxx:370
 TObject.cxx:371
 TObject.cxx:372
 TObject.cxx:373
 TObject.cxx:374
 TObject.cxx:375
 TObject.cxx:376
 TObject.cxx:377
 TObject.cxx:378
 TObject.cxx:379
 TObject.cxx:380
 TObject.cxx:381
 TObject.cxx:382
 TObject.cxx:383
 TObject.cxx:384
 TObject.cxx:385
 TObject.cxx:386
 TObject.cxx:387
 TObject.cxx:388
 TObject.cxx:389
 TObject.cxx:390
 TObject.cxx:391
 TObject.cxx:392
 TObject.cxx:393
 TObject.cxx:394
 TObject.cxx:395
 TObject.cxx:396
 TObject.cxx:397
 TObject.cxx:398
 TObject.cxx:399
 TObject.cxx:400
 TObject.cxx:401
 TObject.cxx:402
 TObject.cxx:403
 TObject.cxx:404
 TObject.cxx:405
 TObject.cxx:406
 TObject.cxx:407
 TObject.cxx:408
 TObject.cxx:409
 TObject.cxx:410
 TObject.cxx:411
 TObject.cxx:412
 TObject.cxx:413
 TObject.cxx:414
 TObject.cxx:415
 TObject.cxx:416
 TObject.cxx:417
 TObject.cxx:418
 TObject.cxx:419
 TObject.cxx:420
 TObject.cxx:421
 TObject.cxx:422
 TObject.cxx:423
 TObject.cxx:424
 TObject.cxx:425
 TObject.cxx:426
 TObject.cxx:427
 TObject.cxx:428
 TObject.cxx:429
 TObject.cxx:430
 TObject.cxx:431
 TObject.cxx:432
 TObject.cxx:433
 TObject.cxx:434
 TObject.cxx:435
 TObject.cxx:436
 TObject.cxx:437
 TObject.cxx:438
 TObject.cxx:439
 TObject.cxx:440
 TObject.cxx:441
 TObject.cxx:442
 TObject.cxx:443
 TObject.cxx:444
 TObject.cxx:445
 TObject.cxx:446
 TObject.cxx:447
 TObject.cxx:448
 TObject.cxx:449
 TObject.cxx:450
 TObject.cxx:451
 TObject.cxx:452
 TObject.cxx:453
 TObject.cxx:454
 TObject.cxx:455
 TObject.cxx:456
 TObject.cxx:457
 TObject.cxx:458
 TObject.cxx:459
 TObject.cxx:460
 TObject.cxx:461
 TObject.cxx:462
 TObject.cxx:463
 TObject.cxx:464
 TObject.cxx:465
 TObject.cxx:466
 TObject.cxx:467
 TObject.cxx:468
 TObject.cxx:469
 TObject.cxx:470
 TObject.cxx:471
 TObject.cxx:472
 TObject.cxx:473
 TObject.cxx:474
 TObject.cxx:475
 TObject.cxx:476
 TObject.cxx:477
 TObject.cxx:478
 TObject.cxx:479
 TObject.cxx:480
 TObject.cxx:481
 TObject.cxx:482
 TObject.cxx:483
 TObject.cxx:484
 TObject.cxx:485
 TObject.cxx:486
 TObject.cxx:487
 TObject.cxx:488
 TObject.cxx:489
 TObject.cxx:490
 TObject.cxx:491
 TObject.cxx:492
 TObject.cxx:493
 TObject.cxx:494
 TObject.cxx:495
 TObject.cxx:496
 TObject.cxx:497
 TObject.cxx:498
 TObject.cxx:499
 TObject.cxx:500
 TObject.cxx:501
 TObject.cxx:502
 TObject.cxx:503
 TObject.cxx:504
 TObject.cxx:505
 TObject.cxx:506
 TObject.cxx:507
 TObject.cxx:508
 TObject.cxx:509
 TObject.cxx:510
 TObject.cxx:511
 TObject.cxx:512
 TObject.cxx:513
 TObject.cxx:514
 TObject.cxx:515
 TObject.cxx:516
 TObject.cxx:517
 TObject.cxx:518
 TObject.cxx:519
 TObject.cxx:520
 TObject.cxx:521
 TObject.cxx:522
 TObject.cxx:523
 TObject.cxx:524
 TObject.cxx:525
 TObject.cxx:526
 TObject.cxx:527
 TObject.cxx:528
 TObject.cxx:529
 TObject.cxx:530
 TObject.cxx:531
 TObject.cxx:532
 TObject.cxx:533
 TObject.cxx:534
 TObject.cxx:535
 TObject.cxx:536
 TObject.cxx:537
 TObject.cxx:538
 TObject.cxx:539
 TObject.cxx:540
 TObject.cxx:541
 TObject.cxx:542
 TObject.cxx:543
 TObject.cxx:544
 TObject.cxx:545
 TObject.cxx:546
 TObject.cxx:547
 TObject.cxx:548
 TObject.cxx:549
 TObject.cxx:550
 TObject.cxx:551
 TObject.cxx:552
 TObject.cxx:553
 TObject.cxx:554
 TObject.cxx:555
 TObject.cxx:556
 TObject.cxx:557
 TObject.cxx:558
 TObject.cxx:559
 TObject.cxx:560
 TObject.cxx:561
 TObject.cxx:562
 TObject.cxx:563
 TObject.cxx:564
 TObject.cxx:565
 TObject.cxx:566
 TObject.cxx:567
 TObject.cxx:568
 TObject.cxx:569
 TObject.cxx:570
 TObject.cxx:571
 TObject.cxx:572
 TObject.cxx:573
 TObject.cxx:574
 TObject.cxx:575
 TObject.cxx:576
 TObject.cxx:577
 TObject.cxx:578
 TObject.cxx:579
 TObject.cxx:580
 TObject.cxx:581
 TObject.cxx:582
 TObject.cxx:583
 TObject.cxx:584
 TObject.cxx:585
 TObject.cxx:586
 TObject.cxx:587
 TObject.cxx:588
 TObject.cxx:589
 TObject.cxx:590
 TObject.cxx:591
 TObject.cxx:592
 TObject.cxx:593
 TObject.cxx:594
 TObject.cxx:595
 TObject.cxx:596
 TObject.cxx:597
 TObject.cxx:598
 TObject.cxx:599
 TObject.cxx:600
 TObject.cxx:601
 TObject.cxx:602
 TObject.cxx:603
 TObject.cxx:604
 TObject.cxx:605
 TObject.cxx:606
 TObject.cxx:607
 TObject.cxx:608
 TObject.cxx:609
 TObject.cxx:610
 TObject.cxx:611
 TObject.cxx:612
 TObject.cxx:613
 TObject.cxx:614
 TObject.cxx:615
 TObject.cxx:616
 TObject.cxx:617
 TObject.cxx:618
 TObject.cxx:619
 TObject.cxx:620
 TObject.cxx:621
 TObject.cxx:622
 TObject.cxx:623
 TObject.cxx:624
 TObject.cxx:625
 TObject.cxx:626
 TObject.cxx:627
 TObject.cxx:628
 TObject.cxx:629
 TObject.cxx:630
 TObject.cxx:631
 TObject.cxx:632
 TObject.cxx:633
 TObject.cxx:634
 TObject.cxx:635
 TObject.cxx:636
 TObject.cxx:637
 TObject.cxx:638
 TObject.cxx:639
 TObject.cxx:640
 TObject.cxx:641
 TObject.cxx:642
 TObject.cxx:643
 TObject.cxx:644
 TObject.cxx:645
 TObject.cxx:646
 TObject.cxx:647
 TObject.cxx:648
 TObject.cxx:649
 TObject.cxx:650
 TObject.cxx:651
 TObject.cxx:652
 TObject.cxx:653
 TObject.cxx:654
 TObject.cxx:655
 TObject.cxx:656
 TObject.cxx:657
 TObject.cxx:658
 TObject.cxx:659
 TObject.cxx:660
 TObject.cxx:661
 TObject.cxx:662
 TObject.cxx:663
 TObject.cxx:664
 TObject.cxx:665
 TObject.cxx:666
 TObject.cxx:667
 TObject.cxx:668
 TObject.cxx:669
 TObject.cxx:670
 TObject.cxx:671
 TObject.cxx:672
 TObject.cxx:673
 TObject.cxx:674
 TObject.cxx:675
 TObject.cxx:676
 TObject.cxx:677
 TObject.cxx:678
 TObject.cxx:679
 TObject.cxx:680
 TObject.cxx:681
 TObject.cxx:682
 TObject.cxx:683
 TObject.cxx:684
 TObject.cxx:685
 TObject.cxx:686
 TObject.cxx:687
 TObject.cxx:688
 TObject.cxx:689
 TObject.cxx:690
 TObject.cxx:691
 TObject.cxx:692
 TObject.cxx:693
 TObject.cxx:694
 TObject.cxx:695
 TObject.cxx:696
 TObject.cxx:697
 TObject.cxx:698
 TObject.cxx:699
 TObject.cxx:700
 TObject.cxx:701
 TObject.cxx:702
 TObject.cxx:703
 TObject.cxx:704
 TObject.cxx:705
 TObject.cxx:706
 TObject.cxx:707
 TObject.cxx:708
 TObject.cxx:709
 TObject.cxx:710
 TObject.cxx:711
 TObject.cxx:712
 TObject.cxx:713
 TObject.cxx:714
 TObject.cxx:715
 TObject.cxx:716
 TObject.cxx:717
 TObject.cxx:718
 TObject.cxx:719
 TObject.cxx:720
 TObject.cxx:721
 TObject.cxx:722
 TObject.cxx:723
 TObject.cxx:724
 TObject.cxx:725
 TObject.cxx:726
 TObject.cxx:727
 TObject.cxx:728
 TObject.cxx:729
 TObject.cxx:730
 TObject.cxx:731
 TObject.cxx:732
 TObject.cxx:733
 TObject.cxx:734
 TObject.cxx:735
 TObject.cxx:736
 TObject.cxx:737
 TObject.cxx:738
 TObject.cxx:739
 TObject.cxx:740
 TObject.cxx:741
 TObject.cxx:742
 TObject.cxx:743
 TObject.cxx:744
 TObject.cxx:745
 TObject.cxx:746
 TObject.cxx:747
 TObject.cxx:748
 TObject.cxx:749
 TObject.cxx:750
 TObject.cxx:751
 TObject.cxx:752
 TObject.cxx:753
 TObject.cxx:754
 TObject.cxx:755
 TObject.cxx:756
 TObject.cxx:757
 TObject.cxx:758
 TObject.cxx:759
 TObject.cxx:760
 TObject.cxx:761
 TObject.cxx:762
 TObject.cxx:763
 TObject.cxx:764
 TObject.cxx:765
 TObject.cxx:766
 TObject.cxx:767
 TObject.cxx:768
 TObject.cxx:769
 TObject.cxx:770
 TObject.cxx:771
 TObject.cxx:772
 TObject.cxx:773
 TObject.cxx:774
 TObject.cxx:775
 TObject.cxx:776
 TObject.cxx:777
 TObject.cxx:778
 TObject.cxx:779
 TObject.cxx:780
 TObject.cxx:781
 TObject.cxx:782
 TObject.cxx:783
 TObject.cxx:784
 TObject.cxx:785
 TObject.cxx:786
 TObject.cxx:787
 TObject.cxx:788
 TObject.cxx:789
 TObject.cxx:790
 TObject.cxx:791
 TObject.cxx:792
 TObject.cxx:793
 TObject.cxx:794
 TObject.cxx:795
 TObject.cxx:796
 TObject.cxx:797
 TObject.cxx:798
 TObject.cxx:799
 TObject.cxx:800
 TObject.cxx:801
 TObject.cxx:802
 TObject.cxx:803
 TObject.cxx:804
 TObject.cxx:805
 TObject.cxx:806
 TObject.cxx:807
 TObject.cxx:808
 TObject.cxx:809
 TObject.cxx:810
 TObject.cxx:811
 TObject.cxx:812
 TObject.cxx:813
 TObject.cxx:814
 TObject.cxx:815
 TObject.cxx:816
 TObject.cxx:817
 TObject.cxx:818
 TObject.cxx:819
 TObject.cxx:820
 TObject.cxx:821
 TObject.cxx:822
 TObject.cxx:823
 TObject.cxx:824
 TObject.cxx:825
 TObject.cxx:826
 TObject.cxx:827
 TObject.cxx:828
 TObject.cxx:829
 TObject.cxx:830
 TObject.cxx:831
 TObject.cxx:832
 TObject.cxx:833
 TObject.cxx:834
 TObject.cxx:835
 TObject.cxx:836
 TObject.cxx:837
 TObject.cxx:838
 TObject.cxx:839
 TObject.cxx:840
 TObject.cxx:841
 TObject.cxx:842
 TObject.cxx:843
 TObject.cxx:844
 TObject.cxx:845
 TObject.cxx:846
 TObject.cxx:847
 TObject.cxx:848
 TObject.cxx:849
 TObject.cxx:850
 TObject.cxx:851
 TObject.cxx:852
 TObject.cxx:853
 TObject.cxx:854
 TObject.cxx:855
 TObject.cxx:856
 TObject.cxx:857
 TObject.cxx:858
 TObject.cxx:859
 TObject.cxx:860
 TObject.cxx:861
 TObject.cxx:862
 TObject.cxx:863
 TObject.cxx:864
 TObject.cxx:865
 TObject.cxx:866
 TObject.cxx:867
 TObject.cxx:868
 TObject.cxx:869
 TObject.cxx:870
 TObject.cxx:871
 TObject.cxx:872
 TObject.cxx:873
 TObject.cxx:874
 TObject.cxx:875
 TObject.cxx:876
 TObject.cxx:877
 TObject.cxx:878
 TObject.cxx:879
 TObject.cxx:880
 TObject.cxx:881
 TObject.cxx:882
 TObject.cxx:883
 TObject.cxx:884
 TObject.cxx:885
 TObject.cxx:886
 TObject.cxx:887
 TObject.cxx:888
 TObject.cxx:889
 TObject.cxx:890
 TObject.cxx:891
 TObject.cxx:892
 TObject.cxx:893
 TObject.cxx:894
 TObject.cxx:895
 TObject.cxx:896
 TObject.cxx:897
 TObject.cxx:898
 TObject.cxx:899
 TObject.cxx:900
 TObject.cxx:901
 TObject.cxx:902
 TObject.cxx:903
 TObject.cxx:904
 TObject.cxx:905
 TObject.cxx:906
 TObject.cxx:907
 TObject.cxx:908
 TObject.cxx:909
 TObject.cxx:910
 TObject.cxx:911
 TObject.cxx:912
 TObject.cxx:913
 TObject.cxx:914
 TObject.cxx:915
 TObject.cxx:916
 TObject.cxx:917
 TObject.cxx:918
 TObject.cxx:919
 TObject.cxx:920
 TObject.cxx:921
 TObject.cxx:922
 TObject.cxx:923
 TObject.cxx:924
 TObject.cxx:925
 TObject.cxx:926
 TObject.cxx:927
 TObject.cxx:928
 TObject.cxx:929
 TObject.cxx:930
 TObject.cxx:931
 TObject.cxx:932
 TObject.cxx:933
 TObject.cxx:934
 TObject.cxx:935
 TObject.cxx:936
 TObject.cxx:937
 TObject.cxx:938
 TObject.cxx:939
 TObject.cxx:940
 TObject.cxx:941
 TObject.cxx:942
 TObject.cxx:943
 TObject.cxx:944
 TObject.cxx:945
 TObject.cxx:946
 TObject.cxx:947
 TObject.cxx:948
 TObject.cxx:949
 TObject.cxx:950
 TObject.cxx:951
 TObject.cxx:952
 TObject.cxx:953
 TObject.cxx:954
 TObject.cxx:955
 TObject.cxx:956
 TObject.cxx:957
 TObject.cxx:958
 TObject.cxx:959
 TObject.cxx:960
 TObject.cxx:961
 TObject.cxx:962
 TObject.cxx:963
 TObject.cxx:964
 TObject.cxx:965
 TObject.cxx:966
 TObject.cxx:967
 TObject.cxx:968
 TObject.cxx:969
 TObject.cxx:970
 TObject.cxx:971
 TObject.cxx:972
 TObject.cxx:973
 TObject.cxx:974
 TObject.cxx:975
 TObject.cxx:976
 TObject.cxx:977
 TObject.cxx:978
 TObject.cxx:979
 TObject.cxx:980
 TObject.cxx:981
 TObject.cxx:982
 TObject.cxx:983
 TObject.cxx:984
 TObject.cxx:985
 TObject.cxx:986
 TObject.cxx:987
 TObject.cxx:988
 TObject.cxx:989
 TObject.cxx:990
 TObject.cxx:991
 TObject.cxx:992
 TObject.cxx:993
 TObject.cxx:994
 TObject.cxx:995
 TObject.cxx:996
 TObject.cxx:997
 TObject.cxx:998
 TObject.cxx:999
 TObject.cxx:1000
 TObject.cxx:1001
 TObject.cxx:1002
 TObject.cxx:1003
 TObject.cxx:1004
 TObject.cxx:1005
 TObject.cxx:1006
 TObject.cxx:1007
 TObject.cxx:1008
 TObject.cxx:1009
 TObject.cxx:1010
 TObject.cxx:1011
 TObject.cxx:1012
 TObject.cxx:1013
 TObject.cxx:1014
 TObject.cxx:1015
 TObject.cxx:1016
 TObject.cxx:1017
 TObject.cxx:1018
 TObject.cxx:1019
 TObject.cxx:1020
 TObject.cxx:1021
 TObject.cxx:1022
 TObject.cxx:1023
 TObject.cxx:1024
 TObject.cxx:1025
 TObject.cxx:1026
 TObject.cxx:1027
 TObject.cxx:1028
 TObject.cxx:1029
 TObject.cxx:1030
 TObject.cxx:1031
 TObject.cxx:1032
 TObject.cxx:1033
 TObject.cxx:1034
 TObject.cxx:1035
 TObject.cxx:1036
 TObject.cxx:1037
 TObject.cxx:1038
 TObject.cxx:1039
 TObject.cxx:1040
 TObject.cxx:1041
 TObject.cxx:1042
 TObject.cxx:1043
 TObject.cxx:1044
 TObject.cxx:1045
 TObject.cxx:1046
 TObject.cxx:1047
 TObject.cxx:1048
 TObject.cxx:1049
 TObject.cxx:1050
 TObject.cxx:1051
 TObject.cxx:1052
 TObject.cxx:1053
 TObject.cxx:1054
 TObject.cxx:1055
 TObject.cxx:1056
 TObject.cxx:1057
 TObject.cxx:1058
 TObject.cxx:1059
 TObject.cxx:1060
 TObject.cxx:1061
 TObject.cxx:1062
 TObject.cxx:1063
 TObject.cxx:1064
 TObject.cxx:1065
 TObject.cxx:1066
 TObject.cxx:1067