Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TFileInfo.h
Go to the documentation of this file.
1 // @(#)root/base:$Id$
2 // Author: Andreas-Joachim Peters 20/9/2005
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2005, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #ifndef ROOT_TFileInfo
13 #define ROOT_TFileInfo
14 
15 //////////////////////////////////////////////////////////////////////////
16 // //
17 // TFileInfo //
18 // //
19 // Class describing a generic file including meta information. //
20 // //
21 //////////////////////////////////////////////////////////////////////////
22 
23 #include "TNamed.h"
24 
25 #include "TUrl.h"
26 
27 #include "TUUID.h"
28 
29 #include "TMD5.h"
30 
31 #include "TObjString.h"
32 
33 #include "TList.h"
34 
35 class TFileInfoMeta;
36 
37 
38 class TFileInfo : public TNamed {
39 
40 private:
41  TUrl *fCurrentUrl; //! current URL to access the file, points to URL
42  // in the fUrlList or 0, if the list end is reached
43  TList *fUrlList; // list of file URLs
44  Long64_t fSize; // file size
45  TUUID *fUUID; //-> uuid of the referenced file
46  TMD5 *fMD5; //-> md5 digest of the file
47  TList *fMetaDataList; // generic list of file meta data object(s)
48 
49  Int_t fIndex; // Index to be used when sorting with index
50 
51  void ParseInput(const char *in);
52 
53  TFileInfo& operator=(const TFileInfo&); // not implemented
54 
55 public:
56  enum EStatusBits {
57  kStaged = BIT(15),
58  kCorrupted = BIT(16),
59  kSortWithIndex = BIT(17) // Use index when sorting (in Compare)
60  };
61 
62  TFileInfo(const char *url = 0, Long64_t size = -1, const char *uuid = 0,
63  const char *md5 = 0, TObject *meta = 0);
64  TFileInfo(const TFileInfo &);
65 
66  virtual ~TFileInfo();
67 
68  void ResetUrl() { fCurrentUrl = (TUrl*)fUrlList->First(); }
69  TUrl *NextUrl();
70  TUrl *GetCurrentUrl() const;
71  TUrl *GetFirstUrl() const { return (TUrl*)fUrlList->First(); }
72  TUrl *GetUrlAt(Int_t i) const { return (TUrl*)fUrlList->At(i); }
73  Bool_t RemoveUrlAt(Int_t i);
74  Int_t GetNUrls() const { return fUrlList->GetEntries(); }
75 
76  Bool_t SetCurrentUrl(const char *url);
77  Bool_t SetCurrentUrl(TUrl *url);
78 
79  Long64_t GetSize() const { return fSize; }
80  TUUID *GetUUID() const { return fUUID; }
81  TMD5 *GetMD5() const { return fMD5; }
82  TList *GetMetaDataList() const { return fMetaDataList; }
83  TFileInfoMeta *GetMetaData(const char *meta = 0) const;
84 
85  void SetSize(Long64_t size) { fSize = size; }
86  void SetUUID(const char *uuid);
87 
88  TUrl *FindByUrl(const char *url, Bool_t withDeflt = kFALSE);
89 
90  Bool_t AddUrl(const char *url, Bool_t infront = kFALSE);
91  Bool_t RemoveUrl(const char *url);
92  Bool_t AddMetaData(TObject *meta);
93  Bool_t RemoveMetaData(const char *meta = 0);
94 
95  Bool_t IsSortable() const { return kTRUE; }
96  Int_t Compare(const TObject *obj) const;
97 
98  Int_t GetIndex() const { return fIndex; }
99  void SetIndex(Int_t idx) { fIndex = idx; }
100 
101  void Print(Option_t *options="") const;
102 
103  ClassDef(TFileInfo,4) // Describes generic file info including meta data information
104 };
105 
106 
107 class TFileInfoMeta : public TNamed {
108 
109 private:
110  Long64_t fEntries; // number of entries in tree or number of objects
111  Long64_t fFirst; // first valid tree entry
112  Long64_t fLast; // last valid tree entry
113  Bool_t fIsTree; // true if type is a TTree (or TTree derived)
114  Long64_t fTotBytes; // uncompressed size in bytes
115  Long64_t fZipBytes; // compressed size in bytes
116 
117  TFileInfoMeta& operator=(const TFileInfoMeta&); // not implemented
118 
119 public:
120  enum EStatusBits { kExternal = BIT(15) };
121 
122  TFileInfoMeta() : fEntries(-1), fFirst(0), fLast(-1),
123  fIsTree(kFALSE), fTotBytes(-1), fZipBytes(-1)
124  { ResetBit(TFileInfoMeta::kExternal); }
125  TFileInfoMeta(const char *objPath, const char *objClass = "TTree",
126  Long64_t entries = -1, Long64_t first = 0, Long64_t last = -1,
127  Long64_t totbytes = -1, Long64_t zipbytes = -1);
128  TFileInfoMeta(const char *objPath, const char *objDir,
129  const char *objClass, Long64_t entries = -1,
130  Long64_t first = 0, Long64_t last = -1,
131  Long64_t totbytes = -1, Long64_t zipbytes = -1);
132  TFileInfoMeta(const TFileInfoMeta &m);
133 
134  virtual ~TFileInfoMeta() { }
135 
136  const char *GetObject() const;
137  const char *GetClass() const { return GetTitle(); }
138  const char *GetDirectory() const;
139  Long64_t GetEntries() const { return fEntries; }
140  Long64_t GetFirst() const { return fFirst; }
141  Long64_t GetLast() const { return fLast; }
142  Bool_t IsTree() const { return fIsTree; }
143  Long64_t GetTotBytes() const { return fTotBytes; }
144  Long64_t GetZipBytes() const { return fZipBytes; }
145 
146  void SetEntries(Long64_t entries) { fEntries = entries; }
147  void SetFirst(Long64_t first) { fFirst = first; }
148  void SetLast(Long64_t last) { fLast = last; }
149  void SetTotBytes(Long64_t tot) { fTotBytes = tot; }
150  void SetZipBytes(Long64_t zip) { fZipBytes = zip; }
151 
152  void Print(Option_t *options="") const;
153 
154  ClassDef(TFileInfoMeta,2) // Describes TFileInfo meta data
155 };
156 
157 #endif