Belle II Software  release-05-01-25
DBImportArray.h
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2016 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Marko Staric *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 #pragma once
11 
12 #include <framework/database/DBImportBase.h>
13 #include <framework/utilities/ArrayIterator.h>
14 #include <TClonesArray.h>
15 #include <stdexcept>
16 
17 namespace Belle2 {
27  template<class T> class DBImportArray: public DBImportBase {
28  public:
29 
31  typedef ObjArrayIterator<TClonesArray, T> iterator;
33  typedef ObjArrayIterator<const TClonesArray, const T> const_iterator;
34 
39  explicit DBImportArray(const std::string& name = ""):
40  DBImportBase(DBStore::arrayName<T>(name))
41  {
42  m_object = new TClonesArray(T::Class());
43  }
44 
49  {
50  delete m_object;
51  }
52 
56  inline int getEntries() const
57  {
58  return static_cast<TClonesArray*>(m_object)->GetEntriesFast();
59  }
60 
69  inline T* appendNew() { return new(nextFreeAdress()) T(); }
70 
82  template<class ...Args> T* appendNew(Args&& ... params)
83  {
84  return new(nextFreeAdress()) T(std::forward<Args>(params)...);
85  }
86 
93  inline T* operator [](int i) const
94  {
95  TObject* obj = static_cast<TClonesArray*>(m_object)->At(i);
96  if (obj == nullptr)
97  throw std::out_of_range("Out-of-range access in DBImportArray::operator[], for "
98  + getName() + ", index "
99  + std::to_string(i));
100  return static_cast<T*>(obj);
101  }
102 
106  iterator begin() { return iterator(*static_cast<TClonesArray*>(m_object), 0); }
107 
111  iterator end() { return iterator(*static_cast<TClonesArray*>(m_object), getEntries()); }
112 
116  const_iterator begin() const { return const_iterator(*static_cast<TClonesArray*>(m_object), 0); }
117 
121  const_iterator end() const { return const_iterator(*static_cast<TClonesArray*>(m_object), getEntries()); }
122 
127  void addEventDependency(unsigned int eventNumber) override
128  {
129  addIntraRunDependency(eventNumber, c_Event);
130  m_object = new TClonesArray(T::Class());
131  }
132 
137  void addTimeStampDependency(unsigned long long int timeStamp) override
138  {
139  addIntraRunDependency(timeStamp, c_TimeStamp);
140  m_object = new TClonesArray(T::Class());
141  }
142 
147  void addSubrunDependency(int subrun) override
148  {
149  addIntraRunDependency(subrun, c_Subrun);
150  m_object = new TClonesArray(T::Class());
151  }
152 
156  void clear() override
157  {
159  m_object = new TClonesArray(T::Class());
160  }
161 
162 
163  private:
164 
169  inline T* nextFreeAdress()
170  {
171  return static_cast<T*>(static_cast<TClonesArray*>(m_object)->AddrAt(getEntries()));
172  }
173 
174  };
176 }
Belle2::DBImportArray::DBImportArray
DBImportArray(const std::string &name="")
Constructor.
Definition: DBImportArray.h:47
Belle2::DBImportArray::addEventDependency
void addEventDependency(unsigned int eventNumber) override
add event dependency
Definition: DBImportArray.h:135
Belle2::DBImportArray::appendNew
T * appendNew()
Construct a new T object at the end of the array.
Definition: DBImportArray.h:77
Belle2::DBImportBase
Base class for importing objects to the database.
Definition: DBImportBase.h:33
Belle2::DBImportArray::getEntries
int getEntries() const
Returns number of objects in the array.
Definition: DBImportArray.h:64
Belle2::DBImportArray::const_iterator
ObjArrayIterator< const TClonesArray, const T > const_iterator
STL-like const_iterator over the T objects (not T* ).
Definition: DBImportArray.h:41
Belle2::DBImportBase::addIntraRunDependency
void addIntraRunDependency(unsigned long long int tag, EIntraRunDependency type)
add intra run dependency
Definition: DBImportBase.cc:19
Belle2::DBImportArray::iterator
ObjArrayIterator< TClonesArray, T > iterator
STL-like iterator over the T objects (not T* ).
Definition: DBImportArray.h:39
Belle2::DBImportArray::operator[]
T * operator[](int i) const
Access to the stored objects.
Definition: DBImportArray.h:101
Belle2::DBStore
Singleton class to cache database objects.
Definition: DBStore.h:42
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::DBImportArray::~DBImportArray
~DBImportArray()
Destructor.
Definition: DBImportArray.h:56
Belle2::DBImportArray::addSubrunDependency
void addSubrunDependency(int subrun) override
add subrun dependency
Definition: DBImportArray.h:155
Belle2::DBImportArray::end
iterator end()
Returns iterator to last entry +1.
Definition: DBImportArray.h:119
Belle2::DBImportArray::begin
iterator begin()
Returns iterator to first entry.
Definition: DBImportArray.h:114
Belle2::DBImportBase::m_object
TObject * m_object
pointer to allocated object or array
Definition: DBImportBase.h:110
Belle2::DBImportArray::nextFreeAdress
T * nextFreeAdress()
Returns address of the next free position of the array.
Definition: DBImportArray.h:177
Belle2::DBImportArray::addTimeStampDependency
void addTimeStampDependency(unsigned long long int timeStamp) override
add time stamp dependency
Definition: DBImportArray.h:145
Belle2::DBImportBase::getName
const std::string & getName() const
Returns the name under which the object will be stored in the database.
Definition: DBImportBase.h:51
Belle2::DBImportArray::clear
void clear() override
Clear the content, e.g.
Definition: DBImportArray.h:164
Belle2::DBImportBase::clear
virtual void clear()
Clear the content, e.g.
Definition: DBImportBase.cc:60