library: libCore #include "TKey.h" |
TKey
class description - header file - source file - inheritance tree (.pdf)
protected:
TKey(const TKey&)
void Build(TDirectory* motherDir, const char* classname, Long64_t filepos)
virtual void Create(Int_t nbytes, TFile* f = 0)
TKey& operator=(const TKey&)
virtual Int_t Read(const char* name)
public:
TKey()
TKey(TDirectory* motherDir)
TKey(const char* name, const char* title, const TClass* cl, Int_t nbytes, TDirectory* motherDir = 0)
TKey(const TString& name, const TString& title, const TClass* cl, Int_t nbytes, TDirectory* motherDir = 0)
TKey(const TObject* obj, const char* name, Int_t bufsize, TDirectory* motherDir = 0)
TKey(const void* obj, const TClass* cl, const char* name, Int_t bufsize, TDirectory* motherDir = 0)
TKey(Long64_t pointer, Int_t nbytes, TDirectory* motherDir = 0)
virtual ~TKey()
virtual void Browse(TBrowser* b)
static TClass* Class()
virtual void Delete(Option_t* option = "")
virtual void DeleteBuffer()
virtual void FillBuffer(char*& buffer)
virtual char* GetBuffer() const
TBuffer* GetBufferRef() const
virtual const char* GetClassName() const
Short_t GetCycle() const
const TDatime& GetDatime() const
TFile* GetFile() const
virtual const char* GetIconName() const
Short_t GetKeep() const
Int_t GetKeylen() const
TDirectory* GetMotherDir() const
Int_t GetNbytes() const
Int_t GetObjlen() const
virtual Long64_t GetSeekKey() const
virtual Long64_t GetSeekPdir() const
virtual const char* GetTitle() const
Int_t GetVersion() const
virtual ULong_t Hash() const
virtual void IncrementPidOffset(UShort_t offset)
virtual TClass* IsA() const
virtual Bool_t IsFolder() const
virtual void Keep()
virtual void ls(Option_t* option = "") const
virtual void Print(Option_t* option = "") const
virtual Int_t Read(TObject* obj)
virtual void ReadBuffer(char*& buffer)
virtual void ReadFile()
void ReadKeyBuffer(char*& buffer)
virtual TObject* ReadObj()
virtual void* ReadObjectAny(const TClass* expectedClass)
virtual void SetBuffer()
void SetMotherDir(TDirectory* dir)
virtual void SetParent(const TObject* parent)
virtual void ShowMembers(TMemberInspector& insp, char* parent)
virtual Int_t Sizeof() const
virtual void Streamer(TBuffer& b)
void StreamerNVirtual(TBuffer& b)
virtual Int_t WriteFile(Int_t cycle = 1, TFile* f = 0)
protected:
Int_t fVersion Key version identifier
Int_t fNbytes Number of bytes for the object on file
Int_t fObjlen Length of uncompressed object in bytes
TDatime fDatime Date/Time of insertion in file
Short_t fKeylen Number of bytes for the key itself
Short_t fCycle Cycle number
Long64_t fSeekKey Location of object on file
Long64_t fSeekPdir Location of parent directory on file
TString fClassName Object Class name
Int_t fLeft Number of bytes left in current segment
char* fBuffer Object buffer
TBuffer* fBufferRef Pointer to the TBuffer object
UShort_t fPidOffset ! Offset to be added to the pid index in this key/buffer. This is actually saved in the high bits of fSeekPdir
TDirectory* fMotherDir ! pointer to mother directory
The TKey class includes functions to book space on a file,
to create I/O buffers, to fill these buffers,
to compress/uncompress data buffers.
Before saving (making persistent) an object on a file, a key must
be created. The key structure contains all the information to
uniquely identify a persistent object on a file.
fNbytes = number of bytes for the compressed object+key
fObjlen = Length of uncompressed object
fDatime = Date/Time when the object was written
fKeylen = number of bytes for the key structure
fCycle = cycle number of the object
fSeekKey = Address of the object on file (points to fNbytes)
This is a redundant information used to cross-check
the data base integrity.
fSeekPdir = Pointer to the directory supporting this object
fClassName = Object class name
fName = name of the object
fTitle = title of the object
In the 16 highest bit of fSeekPdir is encoded a pid offset. This
offset is to be added to the pid index stored in the TRef object
and the referenced TObject.
The TKey class is used by ROOT to:
- to write an object in the Current Directory
- to write a new ntuple buffer
The structure of a file is shown in TFile::TFile.
The structure of a directory is shown in TDirectory::TDirectory.
The TKey class is used by the TBasket class.
See also TTree.
void Build(TDirectory* motherDir, const char* classname, Long64_t filepos)
method used in all TKey constructor to initialize basic data fields
filepos is used to calculate correct version number of key
if filepos==-1, end of file position is used
void Browse(TBrowser *b)
Read object from disk and call its Browse() method.
If object with same name already exist in memory delete it (like
TDirectory::Get() is doing), except when the key references a
folder in which case we don't want to re-read the folder object
since it might contain new objects not yet saved.
void Create(Int_t nbytes, TFile* externFile)
Create a TKey object of specified size
if externFile!=0, key will be allocated in specified file,
otherwise file of mother directory will be used
void Delete(Option_t *option)
Delete an object from the file.
Note: the key is not deleted. You still have to call "delete key".
This is different from the behaviour of TObject::Delete()!
void FillBuffer(char *&buffer)
Encode key header into output buffer.
void IncrementPidOffset(UShort_t offset)
Increment fPidOffset by 'offset'.
This offset is used when a key (or basket) is transfered from one file to
the other. In this case the TRef and TObject might have stored a pid
index (to retrieve TProcessIDs) which refered to their order on the
original file, the fPidOffset is to be added to those values to correctly
find the TProcessID. This fPidOffset needs to be increment if the
key/basket is copied and need to be zero for new key/basket.
void Keep()
Set the "KEEP" status.
When the KEEP flag is set to 1 the object cannot be purged.
TObject * ReadObj()
To read a TObject* from the file.
The object associated to this key is read from the file into memory
Once the key structure is read (via Streamer) the class identifier
of the object is known.
Using the class identifier we find the TClass object for this class.
A TClass object contains a full description (i.e. dictionary) of the
associated class. In particular the TClass object can create a new
object of the class type it describes. This new object now calls its
Streamer function to rebuilt itself.
see TKey::ReadObjectAny to read any object non-derived from TObject
NOTE:
In case the class of this object derives from TObject but not
as a first inheritance, one must cast the return value twice.
Example1: Normal case:
class MyClass : public TObject, public AnotherClass
then on return, one can do:
MyClass *obj = (MyClass*)key->ReadObj();
Example2: Special case:
class MyClass : public AnotherClass, public TObject
then on return, one must do:
MyClass *obj = dynamic_cast<MyClass*>(key->ReadObj());
Of course, dynamic_cast<> can also be used in the example 1.
void * ReadObjectAny(const TClass* expectedClass)
To read an object (non deriving from TObject) from the file.
If expectedClass is not null, we checked that that actual class of
the object stored is suitable to be stored in a pointer pointing
to an object of class 'expectedClass'. We also adjust the value
of the returned address so that it is suitable to be cast (C-Style)
a a pointer pointing to an object of class 'expectedClass'.
So for example if the class Bottom inherits from Top and the object
stored is of type Bottom you can safely do:
TClass *TopClass = TClass::GetClass("Top");
Top *ptr = (Top*) key->ReadObjectAny( TopClass );
if (ptr==0) printError("the object stored in the key is not of the expected type\n");
The object associated to this key is read from the file into memory
Once the key structure is read (via Streamer) the class identifier
of the object is known.
Using the class identifier we find the TClass object for this class.
A TClass object contains a full description (i.e. dictionary) of the
associated class. In particular the TClass object can create a new
object of the class type it describes. This new object now calls its
Streamer function to rebuilt itself.
Int_t Read(TObject *obj)
To read an object from the file.
The object associated to this key is read from the file into memory.
Before invoking this function, obj has been created via the
default constructor.
void ReadBuffer(char *&buffer)
Decode input buffer.
In some situation will add key to gDirectory ???
Int_t WriteFile(Int_t cycle, TFile* f)
Write the encoded object supported by this key.
The function returns the number of bytes committed to the file.
If a write error occurs, the number of bytes returned is -1.
const char * GetIconName()
Title can keep 32x32 xpm thumbnail/icon of the parent object.
Author: Rene Brun 28/12/94
Last update: root/base:$Name: $:$Id: TKey.cxx,v 1.59 2006/07/09 05:27:53 brun Exp $
Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
ROOT page - Class index - Class Hierarchy - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.