KaliVeda
Toolkit for HIC analysis
KVSeqCollection.h
1 
4 #ifndef __KVSEQCOLLECTION_H
5 #define __KVSEQCOLLECTION_H
6 
7 #include "TSeqCollection.h"
8 #include <RQ_OBJECT.h>
9 #include "TFile.h"
10 #include "KVConfig.h"
11 #include "KVError.h"
12 
43 
94  RQ_OBJECT("KVSeqCollection")
95 
96  enum {
97  kSignals = BIT(15), // bit flag for sending 'Modified()' signal on changes
99  kCleanup = BIT(17) // set when objects in list are in ROOT cleanup list
100  };
101 
103  void init();
104  static Int_t fgCounter;
106 
107 protected:
109 
110  void Changed() override
111  {
115 
117  if (TestBit(kSignals)) Modified();
118  };
119  void PrintCollectionHeader(Option_t* option) const override;
121  void SetCollection(const TString&);
122  virtual void _GetSubListWithMethod(KVSeqCollection*, TCollection*, const Char_t*, const Char_t*) const;
124  void set_ownership(Bool_t enable)
125  {
126  TSeqCollection::SetOwner(enable);
127  fCollection->SetOwner(enable);
128  }
129 
130 public:
131  KVSeqCollection();
134  KVSeqCollection(const TString& collection_classname);
135  virtual ~KVSeqCollection();
136  void Copy(TObject& obj) const override;
139 
140  virtual void Modified()
141  {
142  Emit("Modified()");
143  } // *SIGNAL*
144  virtual void SendModifiedSignals(Bool_t yes = kTRUE)
145  {
152  SetBit(kSignals, yes);
153  }
155  {
158  return TestBit(kSignals);
159  }
160 
161  TObject* At(Int_t idx) const override
162  {
163  return fCollection->At(idx);
164  }
165  void AddFirst(TObject* obj) override
166  {
170 
171  if (IsCleanup()) obj->SetBit(kMustCleanup);
172  fCollection->AddFirst(obj);
173  Changed();
174  }
175  void AddLast(TObject* obj) override
176  {
180 
181  if (IsCleanup()) obj->SetBit(kMustCleanup);
182  fCollection->AddLast(obj);
183  Changed();
184  }
185  void AddAt(TObject* obj, Int_t idx) override
186  {
190 
191  if (IsCleanup()) obj->SetBit(kMustCleanup);
192  fCollection->AddAt(obj, idx);
193  Changed();
194  }
195  void AddAfter(const TObject* after, TObject* obj) override
196  {
200 
201  if (IsCleanup()) obj->SetBit(kMustCleanup);
202  fCollection->AddAfter(after, obj);
203  Changed();
204  }
205  void AddBefore(const TObject* before, TObject* obj) override
206  {
210 
211  if (IsCleanup()) obj->SetBit(kMustCleanup);
212  fCollection->AddBefore(before, obj);
213  Changed();
214  }
215  TObject* Before(const TObject* obj) const override
216  {
217  return fCollection->Before(obj);
218  }
219  TObject* After(const TObject* obj) const override
220  {
221  return fCollection->After(obj);
222  }
223  TObject* First() const override
224  {
225  return fCollection->First();
226  }
227  TObject* Last() const override
228  {
229  return fCollection->Last();
230  }
231  void Add(TObject* obj) override
232  {
236 
237  if (IsCleanup()) obj->SetBit(kMustCleanup);
238  fCollection->Add(obj);
239  Changed();
240  }
241  void Clear(Option_t* option = "") override;
242  void Delete(Option_t* option = "") override;
243  TObject** GetObjectRef(const TObject* obj) const override;
244  TIterator* MakeIterator(Bool_t dir = kIterForward) const override;
245  TObject* Remove(TObject* obj) override;
246  void RecursiveRemove(TObject* obj) override;
247  Int_t GetSize() const override
248  {
249  return fCollection ? fCollection->GetSize() : 0;
250  }
251  void SetOwner(Bool_t enable = kTRUE) override
252  {
253  set_ownership(enable);
254  }
256  {
258  return fCollection->ClassName();
259  }
260  virtual void SetCleanup(Bool_t enable = kTRUE);
262  {
265  return TestBit(kCleanup);
266  }
267  static void RehashCleanupList();
268 
269  TObject* FindObject(const char* name) const override
270  {
271  return fCollection->FindObject(name);
272  }
273  template
274  <typename T>
275  T* get_object(const TString& name) const
276  {
277  return dynamic_cast<T*>(FindObject(name));
278  }
279  TObject* FindObject(const TObject* obj) const override
280  {
281  return fCollection->FindObject(obj);
282  }
283  virtual TObject* FindObjectByName(const Char_t* name) const
284  {
285  return fCollection->FindObject(name);
286  }
287  virtual TObject* FindObjectByType(const Char_t*) const;
288  virtual TObject* FindObjectByTitle(const Char_t*) const;
289  TObject* FindObjectByClass(const Char_t*) const;
290  TObject* FindObjectByClass(const TClass*) const;
291  virtual TObject* FindObjectByLabel(const Char_t*) const;
292  virtual TObject* FindObjectByNumber(UInt_t num) const;
293  virtual TObject* FindObjectWithNameAndType(const Char_t* name, const Char_t* type) const;
294  virtual TObject* FindObjectWithMethod(const Char_t* retvalue, const Char_t* method) const;
295  virtual TObject* FindObjectAny(const Char_t* att, const Char_t* keys, Bool_t contains_all = kFALSE, Bool_t case_sensitive = kTRUE) const;
296 
297 #ifdef __WITHOUT_TCOLLECTION_GETENTRIES
299  Int_t GetEntries() const override
300  {
301  return GetSize();
302  };
303 #endif
304  void Execute(const char* method, const char* params,
305  Int_t* error = 0) override;
306  void Execute(TMethod* method, TObjArray* params,
307  Int_t* error = 0) override;
308  KVSeqCollection* GetSubListWithMethod(const Char_t* retvalue, const Char_t* method) const;
309 
310  KVSeqCollection* GetSubListWithClass(const TClass* _class) const;
311  KVSeqCollection* GetSubListWithClass(const Char_t* class_name) const;
312 
313  KVSeqCollection* GetSubListWithName(const Char_t* retvalue) const;
314  KVSeqCollection* GetSubListWithLabel(const Char_t* retvalue) const;
315  KVSeqCollection* GetSubListWithType(const Char_t* retvalue) const;
316 
318  static KVSeqCollection* MakeListFromFileWithMethod(TFile* file, const Char_t* retvalue, const Char_t* method);
319  static KVSeqCollection* MakeListFromFileWithClass(TFile* file, const TClass* _class);
320  static KVSeqCollection* MakeListFromFileWithClass(TFile* file, const Char_t* class_name);
321 
322  Bool_t IsSortable() const override
323  {
324  return fCollection->IsSortable();
325  }
326  Bool_t IsSorted() const override
327  {
328  return fCollection->IsSorted();
329  }
330 
332  {
333  return fCollection;
334  }
336  {
338  return IsEmpty();
339  }
340  template<typename ObjectType, typename ValueType>
341  ValueType GetSumOverCollection(std::function<ValueType(const ObjectType*)> Function) const
342  {
363 
364  ValueType v = ValueType{0};
365  for(auto p : *this)
366  {
367  auto q = dynamic_cast<const ObjectType*>(p);
368  if(q)
369  v += Function(q);
370  }
371  return v;
372  }
373 
374  ClassDefOverride(KVSeqCollection, 3) //KaliVeda extensions to ROOT collections
375 };
376 
377 #if ROOT_VERSION_CODE < ROOT_VERSION(5,11,2)
378 
380 
383 
384 #define R__FOR_EACH(type,proc) \
385  SetCurrentCollection(); \
386  TIter _NAME3_(nxt_,type,proc)(TCollection::GetCurrentCollection()); \
387  type *_NAME3_(obj_,type,proc); \
388  while ((_NAME3_(obj_,type,proc) = (type*) _NAME3_(nxt_,type,proc)())) \
389  _NAME3_(obj_,type,proc)->proc
390 
391 #endif
392 
393 #endif
int Int_t
unsigned int UInt_t
#define RQ_OBJECT(sender_class)
bool Bool_t
char Char_t
const char Option_t
#define BIT(n)
#define ClassDefOverride(name, id)
winID h TVirtualViewer3D TVirtualGLPainter p
char name[80]
float * q
Double_t(* Function)(Double_t)
KaliVeda extensions to ROOT collection classes.
Bool_t IsSorted() const override
virtual TObject * FindObjectByLabel(const Char_t *) const
void Copy(TObject &obj) const override
static Long64_t fSCCounter
counter used to give unique names to all lists
virtual void Modified()
TObject ** GetObjectRef(const TObject *obj) const override
Return reference to object.
void Execute(const char *method, const char *params, Int_t *error=0) override
virtual ~KVSeqCollection()
KVSeqCollection * GetSubListWithName(const Char_t *retvalue) const
TObject * First() const override
KVSeqCollection * GetSubListWithMethod(const Char_t *retvalue, const Char_t *method) const
KVSeqCollection & operator=(const KVSeqCollection &)
Info("operator=","copy ass");.
static TSeqCollection * fgCleanups
regroup all lists which are to be cleaned up
TObject * Before(const TObject *obj) const override
T * get_object(const TString &name) const
virtual void SendModifiedSignals(Bool_t yes=kTRUE)
KVSeqCollection * NewCollectionLikeThisOne() const
TObject * Remove(TObject *obj) override
Remove object from list.
Bool_t IsSortable() const override
void Add(TObject *obj) override
KVSeqCollection * GetSubListWithClass(const TClass *_class) const
TSeqCollection * fCollection
Pointer to embedded ROOT collection.
void Changed() override
@ kCleanup
in ROOT v6 BIT(16) is used by TCollection - without changing the class version
void AddAfter(const TObject *after, TObject *obj) override
TObject * FindObject(const char *name) const override
TObject * FindObject(const TObject *obj) const override
void AddLast(TObject *obj) override
TObject * After(const TObject *obj) const override
ValueType GetSumOverCollection(std::function< ValueType(const ObjectType *)> Function) const
virtual TObject * FindObjectAny(const Char_t *att, const Char_t *keys, Bool_t contains_all=kFALSE, Bool_t case_sensitive=kTRUE) const
void AddBefore(const TObject *before, TObject *obj) override
void SetCollection(const TString &)
TObject * FindObjectByClass(const Char_t *) const
Return (first) object in embedded list with given class.
KVSeqCollection * GetSubListWithType(const Char_t *retvalue) const
void set_ownership(Bool_t enable)
virtual void _GetSubListWithMethod(KVSeqCollection *, TCollection *, const Char_t *, const Char_t *) const
TIterator * MakeIterator(Bool_t dir=kIterForward) const override
Make and return iterator for the list.
void RecursiveRemove(TObject *obj) override
virtual Bool_t IsSendingModifiedSignals() const
void PrintCollectionHeader(Option_t *option) const override
Overrides TCollection::PrintCollectionHeader to show the class name of the embedded list.
TObject * Last() const override
Int_t GetSize() const override
static void RehashCleanupList()
void Clear(Option_t *option="") override
Bool_t operator!() const
static Int_t fgCounter
counts instances
virtual void SetCleanup(Bool_t enable=kTRUE)
Bool_t IsCleanup() const
void SetOwner(Bool_t enable=kTRUE) override
static KVSeqCollection * MakeListFromFileWithClass(TFile *file, const TClass *_class)
virtual TObject * FindObjectByNumber(UInt_t num) const
TSeqCollection * GetCollection() const
virtual TObject * FindObjectWithMethod(const Char_t *retvalue, const Char_t *method) const
static KVSeqCollection * MakeListFromFile(TFile *file)
virtual TObject * FindObjectByType(const Char_t *) const
TObject * At(Int_t idx) const override
virtual TObject * FindObjectByTitle(const Char_t *) const
Will return object with given title (value of TObject::GetTitle() method).
virtual TObject * FindObjectByName(const Char_t *name) const
TString CollectionClassName() const
void AddAt(TObject *obj, Int_t idx) override
void Delete(Option_t *option="") override
virtual TObject * FindObjectWithNameAndType(const Char_t *name, const Char_t *type) const
void AddFirst(TObject *obj) override
KVSeqCollection * GetSubListWithLabel(const Char_t *retvalue) const
static KVSeqCollection * MakeListFromFileWithMethod(TFile *file, const Char_t *retvalue, const Char_t *method)
void _GetSubListWithClass(KVSeqCollection *, TCollection *, const TClass *) const
virtual Int_t GetEntries() const
virtual void SetOwner(Bool_t enable=kTRUE)
TObject * FindObject(const char *name) const override
virtual Bool_t IsEmpty() const
Bool_t IsSortable() const override
virtual Int_t GetSize() const
void SetBit(UInt_t f)
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual const char * ClassName() const
virtual TObject * After(const TObject *obj) const=0
virtual void AddLast(TObject *obj)=0
virtual void AddBefore(const TObject *before, TObject *obj)=0
virtual TObject * Before(const TObject *obj) const=0
virtual void AddAt(TObject *obj, Int_t idx)=0
virtual TObject * Last() const=0
virtual void AddAfter(const TObject *after, TObject *obj)=0
virtual Bool_t IsSorted() const
virtual void Changed()
virtual TObject * First() const=0
virtual TObject * At(Int_t idx) const=0
virtual void AddFirst(TObject *obj)=0
void Add(TObject *obj) override
long long Long64_t
double T(double x)
v