TArchiveFile.h

Go to the documentation of this file.
00001 // @(#)root/io:$Id: TArchiveFile.h 28638 2009-05-15 12:31:05Z rdm $
00002 // Author: Fons Rademakers   30/6/04
00003 
00004 /*************************************************************************
00005  * Copyright (C) 1995-2004, 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_TArchiveFile
00013 #define ROOT_TArchiveFile
00014 
00015 
00016 //////////////////////////////////////////////////////////////////////////
00017 //                                                                      //
00018 // TArchiveFile                                                         //
00019 //                                                                      //
00020 // This is an abstract class that describes an archive file containing  //
00021 // multiple sub-files, like a ZIP or TAR archive.                       //
00022 //                                                                      //
00023 //////////////////////////////////////////////////////////////////////////
00024 
00025 #ifndef ROOT_TObject
00026 #include "TObject.h"
00027 #endif
00028 #ifndef ROOT_TString
00029 #include "TString.h"
00030 #endif
00031 #ifndef ROOT_TDatime
00032 #include "TDatime.h"
00033 #endif
00034 
00035 class TFile;
00036 class TArchiveMember;
00037 class TObjArray;
00038 
00039 
00040 class TArchiveFile : public TObject {
00041 
00042 private:
00043    TArchiveFile(const TArchiveFile&);            // Not implemented because TArchiveFile can not be copied.
00044    TArchiveFile& operator=(const TArchiveFile&); // Not implemented because TArchiveFile can not be copied.
00045 
00046 protected:
00047    TString         fArchiveName;  // Archive file name
00048    TString         fMemberName;   // Sub-file name
00049    Int_t           fMemberIndex;  // Index of sub-file in archive
00050    TFile          *fFile;         // File stream used to access the archive
00051    TObjArray      *fMembers;      // Members in this archive
00052    TArchiveMember *fCurMember;    // Current archive member
00053 
00054    static Bool_t ParseUrl(const char *url, TString &archive, TString &member, TString &type);
00055 
00056 public:
00057    TArchiveFile() : fArchiveName(""), fMemberName(""), fMemberIndex(-1), fFile(0), fMembers(0), fCurMember(0) { }
00058    TArchiveFile(const char *archive, const char *member, TFile *file);
00059    virtual ~TArchiveFile();
00060 
00061    virtual Int_t   OpenArchive() = 0;
00062    virtual Int_t   SetCurrentMember() = 0;
00063    virtual Int_t   SetMember(const char *member);
00064    virtual Int_t   SetMember(Int_t idx);
00065 
00066    Long64_t        GetMemberFilePosition() const;
00067    TArchiveMember *GetMember() const { return fCurMember; }
00068    TObjArray      *GetMembers() const { return fMembers; }
00069    Int_t           GetNumberOfMembers() const;
00070 
00071    const char     *GetArchiveName() const { return fArchiveName; }
00072    const char     *GetMemberName() const { return fMemberName; }
00073    Int_t           GetMemberIndex() const { return fMemberIndex; }
00074 
00075    static TArchiveFile *Open(const char *url, TFile *file);
00076 
00077    ClassDef(TArchiveFile,1)  //An archive file containing multiple sub-files (like a ZIP archive)
00078 };
00079 
00080 
00081 class TArchiveMember : public TObject {
00082 
00083 friend class TArchiveFile;
00084 
00085 protected:
00086    TString    fName;          // Name of member
00087    TString    fComment;       // Comment field
00088    TDatime    fModTime;       // Modification time
00089    Long64_t   fPosition;      // Byte position in archive
00090    Long64_t   fFilePosition;  // Byte position in archive where member data starts
00091    Long64_t   fCsize;         // Compressed size
00092    Long64_t   fDsize;         // Decompressed size
00093    Bool_t     fDirectory;     // Flag indicating this is a directory
00094 
00095 public:
00096    TArchiveMember();
00097    TArchiveMember(const char *name);
00098    TArchiveMember(const TArchiveMember &member);
00099    TArchiveMember &operator=(const TArchiveMember &rhs);
00100    virtual ~TArchiveMember() { }
00101 
00102    const char *GetName() const { return fName; }
00103    const char *GetComment() const { return fComment; }
00104    TDatime     GetModTime() const { return fModTime; }
00105    Long64_t    GetPosition() const { return fPosition; }
00106    Long64_t    GetFilePosition() const { return fFilePosition; }
00107    Long64_t    GetCompressedSize() const { return fCsize; }
00108    Long64_t    GetDecompressedSize() const { return fDsize; }
00109    Bool_t      IsDirectory() const { return fDirectory; }
00110 
00111    ClassDef(TArchiveMember,1)  //An archive member file
00112 };
00113 
00114 #endif

Generated on Tue Jul 5 14:26:30 2011 for ROOT_528-00b_version by  doxygen 1.5.1