GSI Object Oriented Online Offline (Go4) GO4-6.4.0
Loading...
Searching...
No Matches
TGo4Iter.cxx
Go to the documentation of this file.
1// $Id$
2//-----------------------------------------------------------------------
3// The GSI Online Offline Object Oriented (Go4) Project
4// Experiment Data Processing at EE department, GSI
5//-----------------------------------------------------------------------
6// Copyright (C) 2000- GSI Helmholtzzentrum fuer Schwerionenforschung GmbH
7// Planckstr. 1, 64291 Darmstadt, Germany
8// Contact: http://go4.gsi.de
9//-----------------------------------------------------------------------
10// This software can be used under the license agreements as stated
11// in Go4License.txt file which is part of the distribution.
12//-----------------------------------------------------------------------
13
14#include "TGo4Iter.h"
15
16#include "TGo4Slot.h"
17
20 fSlot(nullptr),
21 fLevels(),
22 fStatus(-1),
23 fFullName(),
25{
26}
27
28TGo4Iter::TGo4Iter(TGo4Slot *slot, Bool_t onlyslots) :
30 fSlot(slot),
31 fOnlySlots(onlyslots),
32 fLevels(),
33 fStatus(-1),
34 fFullName(),
36{
37}
38
40{
41 fLevels.Delete();
42}
43
44Bool_t TGo4Iter::next(Bool_t goesinto)
45{
46 fLevelChange = 0;
47
48 if (fStatus == 1) return kFALSE;
49
50 Int_t lastlevel = level();
51
52 TGo4LevelIter *iter = nullptr;
53
54 Bool_t wasfolder = kFALSE;
55
56 if (fStatus==-1) {
57 iter = !fSlot ? nullptr : fSlot->MakeLevelIter();
58 if (iter) fLevels.Add(iter);
59 } else {
60 iter = (TGo4LevelIter*) fLevels.Last();
61
62 wasfolder = fOnlySlots ? iter->isslotsfolder() : iter->isfolder();
63
64 if (iter && wasfolder && goesinto) {
65 TGo4LevelIter *subiter = iter->subiterator();
66 if (subiter) {
67 fLevels.Add(subiter);
68 iter = subiter;
69 }
70 }
71 }
72
73 while (iter && !iter->next()) {
74 fLevels.Remove(iter);
75 delete iter;
76 iter = (TGo4LevelIter*) fLevels.Last();
77 }
78
79 fFullName = "";
80
81 if (iter)
82 for (int n = 0; n <= fLevels.GetLast(); n++) {
83 TGo4LevelIter *it = (TGo4LevelIter *)fLevels.At(n);
84 if (n>0) fFullName.Append("/");
85 fFullName.Append(it->name());
86 }
87
88 fStatus = iter ? 0 : 1;
89
90 fLevelChange = level() - lastlevel;
91
92 // Bool_t isfolder = kFALSE;
93 // if (iter) isfolder = fOnlySlots ? iter->isslotsfolder() : iter->isfolder();
94 // if (isfolder && wasfolder) fLevelChange--;
95
96 if (wasfolder) fLevelChange--;
97
98 return fStatus == 0;
99}
100
102{
103 while (next())
104 if (!isfolder())
105 return kTRUE;
106 return kFALSE;
107}
108
110{
111 TGo4LevelIter *iter = currentiter();
112 return !iter ? kFALSE : (fOnlySlots ? iter->isslotsfolder() : iter->isfolder());
113}
114
115const char *TGo4Iter::getname()
116{
117 TGo4LevelIter *iter = currentiter();
118 return !iter ? nullptr : iter->name();
119}
120
121const char *TGo4Iter::getinfo()
122{
123 TGo4LevelIter *iter = currentiter();
124 return !iter ? nullptr : iter->info();
125}
126
128{
129 TGo4LevelIter *iter = currentiter();
130 return !iter ? 0 : iter->sizeinfo();
131}
132
133Int_t TGo4Iter::getflag(const char *flagname)
134{
135 TGo4LevelIter *iter = currentiter();
136 return (!iter || !flagname) ? -1 : iter->getflag(flagname);
137}
138
140{
141 TGo4LevelIter *iter = currentiter();
142 return !iter ? -1 : iter->GetKind();
143}
144
146{
147 TGo4LevelIter *iter = currentiter();
148 return !iter ? nullptr : iter->GetClassName();
149}
150
152{
153 return fStatus != 0 ? nullptr : fFullName.Data();
154}
155
156Int_t TGo4Iter::level() const
157{
158 return fStatus != 0 ? -1 : fLevels.GetLast();
159}
160
161std::unique_ptr<TGo4Access> TGo4Iter::ProvideAccess(const char *name)
162{
163 return fStatus != 0 ? nullptr : fSlot->ProvideSlotAccess(fFullName.Data());
164}
165
167{
168 if (fStatus != 0)
169 return nullptr;
170 TGo4LevelIter *iter = (TGo4LevelIter*) fLevels.Last();
171 return !iter ? nullptr : iter->getslot();
172}
Bool_t nextobj()
Definition TGo4Iter.cxx:101
Bool_t isfolder()
Definition TGo4Iter.cxx:109
std::unique_ptr< TGo4Access > ProvideAccess(const char *name=nullptr) override
Definition TGo4Iter.cxx:161
Int_t getsizeinfo()
Definition TGo4Iter.cxx:127
const char * getinfo()
Definition TGo4Iter.cxx:121
Bool_t fOnlySlots
Definition TGo4Iter.h:56
Bool_t next(Bool_t goesinto=kTRUE)
Definition TGo4Iter.cxx:44
Int_t level() const
Definition TGo4Iter.cxx:156
const char * getname()
Definition TGo4Iter.cxx:115
TGo4Slot * fSlot
Definition TGo4Iter.h:55
const char * getfullname()
Definition TGo4Iter.cxx:151
TObjArray fLevels
Definition TGo4Iter.h:57
Int_t getkindofitem()
Definition TGo4Iter.cxx:139
virtual ~TGo4Iter()
Definition TGo4Iter.cxx:39
Int_t fLevelChange
Definition TGo4Iter.h:60
TGo4Slot * getslot() const
Definition TGo4Iter.cxx:166
const char * getclassname()
Definition TGo4Iter.cxx:145
TString fFullName
-1 start, 0 continue, 1 end
Definition TGo4Iter.h:59
TGo4LevelIter * currentiter() const
Definition TGo4Iter.h:50
Int_t getflag(const char *flagname)
Definition TGo4Iter.cxx:133
Int_t fStatus
Definition TGo4Iter.h:58
virtual TGo4LevelIter * subiterator()
Definition TGo4Proxy.h:87
virtual Bool_t isslotsfolder()
Definition TGo4Proxy.h:85
virtual const char * GetClassName()
Definition TGo4Proxy.h:94
virtual Int_t getflag(const char *)
Definition TGo4Proxy.h:86
virtual TGo4Slot * getslot()
Definition TGo4Proxy.h:88
virtual Int_t sizeinfo()
Definition TGo4Proxy.h:91
virtual const char * info()
Definition TGo4Proxy.h:90
virtual Bool_t next()
Definition TGo4Proxy.h:83
virtual Bool_t isfolder()
Definition TGo4Proxy.h:84
virtual Int_t GetKind()
Definition TGo4Proxy.h:93
virtual const char * name()
Definition TGo4Proxy.h:89