Logo ROOT   6.16/01
Reference Guide
TFileIter.h
Go to the documentation of this file.
1// @(#)root/table:$Id$
2// Author: Valery Fine(fine@bnl.gov) 01/03/2001
3
4/*************************************************************************
5 * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers. *
6 * Copyright (C) 2001 [BNL] Brookhaven National Laboratory. *
7 * All rights reserved. *
8 * *
9 * For the licensing terms see $ROOTSYS/LICENSE. *
10 * For the list of contributors see $ROOTSYS/README/CREDITS. *
11 *************************************************************************/
12
13#ifndef ROOT_TFileIter
14#define ROOT_TFileIter
15
16///////////////////////////////////////////////////////////////////////////
17// //
18// Class to iterate (read / write ) the events written to /from TFile. //
19// //
20// - set the current internal cursor directly by different means //
21// - set the current cursor to the "next" position if available //
22// - gain extra information of the TKey object at the current position //
23// - read TObject object from the TFile defined by TKey at the current //
24// position //
25// //
26// - Read "next" object from the file //
27// - n-th object from the file //
28// - object that is in n object on the file //
29// - read current object //
30// - return the name of the key of the current object //
31// - return the current position //
32// - set the current position by the absolute position number //
33// - set the current position by relative position number //
34// - get the number of keys in the file //
35// //
36// The event is supposed to assign an unique ID in form of //
37// //
38// TKey name ::= event Id ::= eventName "." run_number "." event_number //
39// //
40// //
41// and stored as the TKey name of the object written //
42// //
43// author Valeri Fine //
44// //
45///////////////////////////////////////////////////////////////////////////
46
47#include "TString.h"
48#include "TIterator.h"
49#include "TList.h"
50#include "TFile.h"
51
52
53class TFileIter : public TListIter {
54
55private:
56
57 TFileIter *fNestedIterator; //! The inner TFidrectory interator;
58
59 virtual TIterator &operator=(const TIterator &) { return *this; }
60 virtual Bool_t operator!=(const TIterator &it) const { return TListIter::operator!=(it);}
61
62protected:
63 TDirectory *fRootFile; // TDirectory/TFile to be iterated over
64 TString fEventName; // current key name
65 UInt_t fRunNumber; // current "run number"
66 UInt_t fEventNumber; // current "event number"
67 Int_t fCursorPosition; // the position of the current key in the sorted TKey list
68 Bool_t fOwnTFile; // Bit whether this classs creates TFile on its own to delete
69
70 void Initialize();
71 TObject *ReadObj(const TKey *key) const;
72 TKey *NextEventKey(UInt_t eventNumber=UInt_t(-1), UInt_t runNumber=UInt_t(-1), const char *name="*");
73
74public:
75
76 TFileIter(const char *name, Option_t *option = "",
77 const char *ftitle = "", Int_t compress = 1,
78 Int_t netopt = 0);
80 TFileIter(TDirectory *directory);
81 TFileIter(const TFileIter &);
82 virtual ~TFileIter();
83// --- draft !!! virtual Int_t Copy(TFile *destFile);
85 virtual const TFile *GetTFile() const;
86 virtual const TDirectory *GetTDirectory() const;
87 static TString MapName(const char *name, const char *localSystemKey = 0
88 , const char *mountedFileSystemKey = 0);
89 static const char *GetResourceName();
90 static const char *GetDefaultMapFileName();
91 static const char *GetLocalFileNameKey();
92 static const char *GetForeignFileSystemKey();
93 static void PurgeKeys(TList *listOfKeys);
94 virtual Bool_t IsOpen() const;
95 virtual TObject *NextEventGet(UInt_t eventNumber=UInt_t(-1), UInt_t runNumber=UInt_t(-1), const char *name="*");
96 virtual Int_t NextEventPut(TObject *obj, UInt_t eventNum, UInt_t runNumber, const char *name=0);
97 void SetCursorPosition(Int_t cursorPosition);
98 void SetCursorPosition(const char *keyNameToFind);
99 Int_t GetObjlen() const;
100 virtual Int_t TotalKeys() const;
101 virtual TKey *SkipObjects(Int_t nSkip=1);
102 virtual TObject *GetObject() const;
103 virtual Int_t GetDepth() const;
104
105 TKey *GetCurrentKey() const;
106 const char *GetKeyName() const;
107
108 TFileIter &operator=(Int_t cursorPosition);
109 TFileIter &operator=(const char *keyNameToFind);
110 TFileIter &operator+=(Int_t shift);
111 TFileIter &operator-=(Int_t shift);
114
115 TObject *operator*() const;
116 operator const char *() const;
117 operator const TFile *() const;
118 operator const TDirectory *() const;
119 operator int () const;
120 int operator==(const char *name) const;
121 int operator!=(const char *name) const;
122
123public: // abstract TIterator methods implementations:
124
125 virtual TObject *Next();
126 virtual TObject *Next(Int_t nSkip);
127 virtual void Reset();
128 virtual void Rewind();
129 TObject *operator()(Int_t nSkip);
131
132 ClassDef(TFileIter,0) // TFile class iterator
133};
134
135//__________________________________________________________________________
136inline const char *TFileIter::GetResourceName() {return "ForeignFileMap";}
137//__________________________________________________________________________
138inline const char *TFileIter::GetDefaultMapFileName() {return "io.config";}
139//__________________________________________________________________________
140inline const char *TFileIter::GetLocalFileNameKey() {return "LocalFileSystem";}
141//__________________________________________________________________________
142inline const char *TFileIter::GetForeignFileSystemKey(){return "MountedFileSystem";}
143
144//__________________________________________________________________________
146{
147 // return the current
149}
150
151//__________________________________________________________________________
152inline const TFile *TFileIter::GetTFile() const { return GetTDirectory()->GetFile(); }
153//__________________________________________________________________________
156
157//__________________________________________________________________________
159{
160 // Make 1 step over the file objects and returns its pointer
161 // or 0, if there is no object left in the container
162 return Next(1);
163}
164
165//__________________________________________________________________________
166inline void TFileIter::Rewind()
167{
168 // Alias for "Reset" method
169 Reset();
170}
171//__________________________________________________________________________
172inline void TFileIter::SetCursorPosition(Int_t cursorPosition)
173{
174 // Make <cursorPosition> steps (>0 - forward) over the file
175 // objects to skip it
176 if (fNestedIterator)
177 fNestedIterator->SetCursorPosition(cursorPosition);
178 else
179 SkipObjects(cursorPosition - fCursorPosition);
180}
181
182//__________________________________________________________________________
183inline TFileIter &TFileIter::operator=(const char *keyNameToFind)
184{
185 // Iterate unless the name of the object matches <keyNameToFind>
186 SetCursorPosition(keyNameToFind); return *this;}
187
188//__________________________________________________________________________
189inline TFileIter &TFileIter::operator=(Int_t cursorPosition)
190{
191 // Iterate over <cursorPosition>
192 SetCursorPosition(cursorPosition);
193 return *this;
194}
195//__________________________________________________________________________
196inline TFileIter::operator const TDirectory *() const
197{ return GetTDirectory(); }
198
199//__________________________________________________________________________
200inline TFileIter::operator const TFile *() const
201{ return GetTFile (); }
202//__________________________________________________________________________
204{ SkipObjects(shift); return *this;}
205//__________________________________________________________________________
207{ return operator+=(-shift);}
208//__________________________________________________________________________
210{ SkipObjects( 1); return *this;}
211//__________________________________________________________________________
213{ SkipObjects(-1); return *this;}
214//__________________________________________________________________________
216{ return GetObject();}
217//__________________________________________________________________________
218inline TFileIter::operator int () const
219{ return CurrentCursorPosition(); }
220//__________________________________________________________________________
221inline TFileIter::operator const char *() const
222{
223 // return the current key name
224 return GetKeyName();
225}
226//__________________________________________________________________________
227inline int TFileIter::operator==(const char *name) const
228{ return name ? !strcmp(name,GetKeyName()):0;}
229
230//__________________________________________________________________________
231inline int TFileIter::operator!=(const char *name) const
232{ return !(operator==(name)); }
233
234//__________________________________________________________________________
235inline TObject *TFileIter::operator()(){ return Next(); }
236//__________________________________________________________________________
237inline TObject *TFileIter::operator()(Int_t nSkip){ return Next(nSkip);}
238
239#endif
int Int_t
Definition: RtypesCore.h:41
unsigned int UInt_t
Definition: RtypesCore.h:42
bool Bool_t
Definition: RtypesCore.h:59
const char Option_t
Definition: RtypesCore.h:62
#define ClassDef(name, id)
Definition: Rtypes.h:324
Describe directory structure in memory.
Definition: TDirectory.h:34
virtual TFile * GetFile() const
Definition: TDirectory.h:147
static void PurgeKeys(TList *listOfKeys)
Remove the TKey duplication, leave the keys with highest cycle number only Sort if first.
Definition: TFileIter.cxx:316
virtual TObject * GetObject() const
read the object from TFile defined by the current TKey
Definition: TFileIter.cxx:273
TFileIter * fNestedIterator
Definition: TFileIter.h:57
void SetCursorPosition(Int_t cursorPosition)
Definition: TFileIter.h:172
virtual ~TFileIter()
TFileIter dtor.
Definition: TFileIter.cxx:196
virtual TObject * NextEventGet(UInt_t eventNumber=UInt_t(-1), UInt_t runNumber=UInt_t(-1), const char *name="*")
reads, creates and returns the object by TKey name that matches the "name" .
Definition: TFileIter.cxx:487
static const char * GetResourceName()
Definition: TFileIter.h:136
TDirectory * fRootFile
Definition: TFileIter.h:63
virtual Bool_t IsOpen() const
Check whether the associated ROOT TFile was open and TFile object is healthy.
Definition: TFileIter.cxx:226
Int_t fCursorPosition
Definition: TFileIter.h:67
TKey * GetCurrentKey() const
return the pointer to the current TKey
Definition: TFileIter.cxx:240
virtual Int_t TotalKeys() const
The total number of the TKey keys in the current TDirectory only Usually this means the total number ...
Definition: TFileIter.cxx:294
static const char * GetLocalFileNameKey()
Definition: TFileIter.h:140
virtual Bool_t operator!=(const TIterator &it) const
This operator compares two TIterator objects.
Definition: TFileIter.h:60
TFileIter(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=1, Int_t netopt=0)
Open ROOT TFile by the name provided; This TFile is to be deleted by the TFileIter alone.
Definition: TFileIter.cxx:149
UInt_t fEventNumber
Definition: TFileIter.h:66
static const char * GetForeignFileSystemKey()
Definition: TFileIter.h:142
int operator==(const char *name) const
Definition: TFileIter.h:227
TObject * operator*() const
Return current object or nullptr.
Definition: TFileIter.h:215
const char * GetKeyName() const
return the name of the current TKey
Definition: TFileIter.cxx:256
Int_t CurrentCursorPosition() const
Definition: TFileIter.h:145
virtual TKey * SkipObjects(Int_t nSkip=1)
Returns the TKey pointer to the nSkip TKey object from the current one nSkip = 0; the state of the it...
Definition: TFileIter.cxx:401
TFileIter & operator+=(Int_t shift)
Definition: TFileIter.h:203
TFileIter & operator++()
Definition: TFileIter.h:209
void Initialize()
to be documented
Definition: TFileIter.cxx:211
virtual void Rewind()
Definition: TFileIter.h:166
virtual void Reset()
Reset the status of the iterator.
Definition: TFileIter.cxx:356
virtual Int_t NextEventPut(TObject *obj, UInt_t eventNum, UInt_t runNumber, const char *name=0)
Create a special TKey name with obj provided and write it out.
Definition: TFileIter.cxx:515
TFileIter & operator--()
Definition: TFileIter.h:212
static TString MapName(const char *name, const char *localSystemKey=0, const char *mountedFileSystemKey=0)
Definition: TFileIter.cxx:547
virtual Int_t GetDepth() const
return the current number of the nested subdirectroies; = 0 - means there is no subdirectories
Definition: TFileIter.cxx:248
TKey * NextEventKey(UInt_t eventNumber=UInt_t(-1), UInt_t runNumber=UInt_t(-1), const char *name="*")
Definition: TFileIter.cxx:443
TObject * ReadObj(const TKey *key) const
Read the next TObject from for the TDirectory by TKey provided.
Definition: TFileIter.cxx:495
virtual const TFile * GetTFile() const
Definition: TFileIter.h:152
UInt_t fRunNumber
Definition: TFileIter.h:65
TString fEventName
Definition: TFileIter.h:64
virtual TIterator & operator=(const TIterator &)
The inner TFidrectory interator;.
Definition: TFileIter.h:59
TObject * operator()()
Definition: TFileIter.h:235
TFileIter & operator-=(Int_t shift)
Definition: TFileIter.h:206
virtual TObject * Next()
Return next object in the list. Returns 0 when no more objects in list.
Definition: TFileIter.h:158
Int_t GetObjlen() const
Returns the uncompressed length of the current object.
Definition: TFileIter.cxx:280
static const char * GetDefaultMapFileName()
Definition: TFileIter.h:138
virtual const TDirectory * GetTDirectory() const
Definition: TFileIter.h:154
Bool_t fOwnTFile
Definition: TFileIter.h:68
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
Definition: TFile.h:48
Iterator abstract base class.
Definition: TIterator.h:30
Book space in a file, create I/O buffers, to fill them, (un)compress them.
Definition: TKey.h:24
Iterator of linked list.
Definition: TList.h:200
Bool_t operator!=(const TIterator &aIter) const
This operator compares two TIterator objects.
Definition: TList.cxx:1166
A doubly linked list.
Definition: TList.h:44
Mother of all ROOT objects.
Definition: TObject.h:37
Basic string class.
Definition: TString.h:131
Definition: file.py:1