31 ClassImp(TArchiveFile);
44 TArchiveFile::TArchiveFile(
const char *archive,
const char *member, TFile *file)
47 Error(
"TArchiveFile",
"must specify a valid TFile");
50 fArchiveName = archive;
53 if (fMemberName.IsDigit())
54 fMemberIndex = atoi(fMemberName);
55 fMembers =
new TObjArray;
63 TArchiveFile::~TArchiveFile()
71 Long64_t TArchiveFile::GetMemberFilePosition()
const
73 return fCurMember ? fCurMember->GetFilePosition() : 0;
79 Int_t TArchiveFile::GetNumberOfMembers()
const
81 return fMembers->GetEntriesFast();
88 Int_t TArchiveFile::SetMember(
const char *member)
93 return SetCurrentMember();
100 Int_t TArchiveFile::SetMember(Int_t idx)
105 return SetCurrentMember();
121 TArchiveFile *TArchiveFile::Open(
const char *url, TFile *file)
124 ::Error(
"TArchiveFile::Open",
"must specify a valid TFile to access %s",
129 TString archive, member, type;
131 if (!ParseUrl(url, archive, member, type))
136 if ((h = gROOT->GetPluginManager()->FindHandler(
"TArchiveFile", type))) {
137 if (h->LoadPlugin() == -1)
139 f = (TArchiveFile*) h->ExecPlugin(3, archive.Data(), member.Data(), file);
149 Bool_t TArchiveFile::ParseUrl(
const char *url, TString &archive, TString &member,
160 TString urloptions = u.GetOptions();
161 TObjArray *objOptions = urloptions.Tokenize(
"&");
162 for (Int_t n = 0; n < objOptions->GetEntries(); n++) {
164 TString loption = ((TObjString*)objOptions->At(n))->GetName();
165 TObjArray *objTags = loption.Tokenize(
"=");
166 if (objTags->GetEntries() == 2) {
168 TString key = ((TObjString*)objTags->At(0))->GetName();
169 TString value = ((TObjString*)objTags->At(1))->GetName();
171 if (!key.CompareTo(
"zip", TString::kIgnoreCase)) {
172 archive = u.GetFile();
186 if (!strlen(u.GetAnchor())) {
187 archive = u.GetFile();
192 archive = u.GetFile();
193 member = u.GetAnchor();
196 if (archive ==
"" || member ==
"") {
206 ClassImp(TArchiveMember);
211 TArchiveMember::TArchiveMember()
225 TArchiveMember::TArchiveMember(
const char *name)
239 TArchiveMember::TArchiveMember(
const TArchiveMember &member)
242 fName = member.fName;
243 fComment = member.fComment;
244 fModTime = member.fModTime;
245 fPosition = member.fPosition;
246 fFilePosition = member.fFilePosition;
247 fCsize = member.fCsize;
248 fDsize = member.fDsize;
249 fDirectory = member.fDirectory;
255 TArchiveMember &TArchiveMember::operator=(
const TArchiveMember &rhs)
258 TObject::operator=(rhs);
260 fComment = rhs.fComment;
261 fModTime = rhs.fModTime;
262 fPosition = rhs.fPosition;
263 fFilePosition = rhs.fFilePosition;
266 fDirectory = rhs.fDirectory;