Jpp
JTreeScannerInterface.hh
Go to the documentation of this file.
1 #ifndef __JSUPPORT__JTREESCANNERINTERFACE__
2 #define __JSUPPORT__JTREESCANNERINTERFACE__
3 
5 #include "JLang/JNullType.hh"
6 #include "JLang/JEquals.hh"
9 #include "JSupport/JLimit.hh"
10 
11 
12 /**
13  * \author mdejong
14  */
15 
16 namespace JSUPPORT {}
17 namespace JPP { using namespace JSUPPORT; }
18 
19 namespace JSUPPORT {
20 
22  using JLANG::JNullType;
23  using JLANG::JEquals;
25 
26 
27  /**
28  * Auxiliary interface for direct access of elements in ROOT TChain.
29  *
30  * The optional second template argument is used to the determine the value of an element
31  * which defines the apparent order the elements in the TChain.
32  */
33  template<class T, class JEvaluator_t = JNullType>
35 
36 
37  /**
38  * Specialiation of interface JTreeScannerInterface for unordered direct access of elements in ROOT TChain.
39  *
40  * This interface provives for STD compatible iterators.\n
41  * Note that a pointer to the parent JTreeScannerInterface is used for the iteration.
42  * The user should therefore make separate copies of the read data when multiple iterators are simultaneously used.
43  *
44  * This interface extends the JLANG::JRewindableObjectIterator interface and the JSUPPORT::JLimit class.
45  */
46  template<class JClass_t>
47  struct JTreeScannerInterface<JClass_t, JNullType> :
48  public JRewindableObjectIterator<JClass_t>,
49  public JLimit
50  {
51  typedef JClass_t data_type;
53 
54  /**
55  * Configure.
56  *
57  * \param file_list file list
58  * \param limit limit
59  */
60  virtual void configure(const JMultipleFileScanner_t& file_list, const JLimit& limit) = 0;
61 
62 
63  /**
64  * Configure.
65  *
66  * \param file_list file list
67  */
68  void configure(const JMultipleFileScanner_t& file_list)
69  {
70  this->configure(file_list, JLimit());
71  }
72 
73 
74  /**
75  * Get number of entries.
76  *
77  * \return number of entries
78  */
79  virtual Long64_t getEntries() const = 0;
80 
81 
82  /**
83  * Get entry at given index.
84  *
85  * \param index index
86  * \return pointer to object (may be NULL)
87  */
88  virtual JClass_t* getEntry(Long64_t index) = 0;
89 
90 
91  /**
92  * Get internal counter.
93  *
94  * \return counter
95  */
96  virtual counter_type getCounter() const = 0;
97 
98 
99  /**
100  * Get actual class name.
101  *
102  * \return class name
103  */
104  virtual const char* getClassName() const
105  {
106  return JClass_t::Class_Name();
107  }
108 
109 
110  /**
111  * STD compatible iterator.
112  */
113  struct iterator :
114  public JLANG::JEquals <iterator>,
115  public JLANG::JBidirectionalIterator<iterator>
116  {
117  friend class JTreeScannerInterface;
118 
119  /**
120  * Default constructor.
121  */
123  pTreeScanner(NULL),
124  index (-1)
125  {}
126 
127 
128  /**
129  * Smart pointer operator.
130  *
131  * \return pointer to object
132  */
134  {
135  return pTreeScanner->getEntry(index);
136  }
137 
138 
139  /**
140  * Dereference operator.
141  *
142  * \return reference to object
143  */
145  {
146  return *(pTreeScanner->getEntry(index));
147  }
148 
149 
150  /**
151  * Equality of iterator.
152  *
153  * \param cursor iterator
154  * \return true if equal; else false
155  */
156  virtual bool equals(const iterator& cursor) const
157  {
158  return index == cursor.index;
159  }
160 
161 
162  /**
163  * Increment iterator.
164  *
165  * \return true if valid; else false
166  */
167  virtual bool increment()
168  {
169  return ++index < pTreeScanner->getEntries();
170  }
171 
172 
173  /**
174  * Decrement iterator.
175  *
176  * \return true if valid; else false
177  */
178  virtual bool decrement()
179  {
180  return --index >= 0;
181  }
182 
183 
184  private:
185  /**
186  * Constructor.
187  *
188  * \param __p pointer to tree scanner
189  * \param __i start index
190  */
192  pTreeScanner(__p),
193  index (__i)
194  {}
195 
198  };
199 
200 
201  /**
202  * STD compatible reverse iterator.
203  */
204  struct reverse_iterator :
205  public JLANG::JEquals <reverse_iterator>,
206  public JLANG::JBidirectionalIterator<reverse_iterator>
207  {
208  friend class JTreeScannerInterface;
209 
210  /**
211  * Default constructor.
212  */
214  pTreeScanner(NULL),
215  index (-1)
216  {}
217 
218 
219  /**
220  * Smart pointer operator.
221  *
222  * \return pointer to object
223  */
225  {
226  return (this->pTreeScanner->getEntry(this->pTreeScanner->getEntries() - this->index - 1));
227  }
228 
229 
230  /**
231  * Dereference operator.
232  *
233  * \return reference to object
234  */
236  {
237  return *(this->pTreeScanner->getEntry(this->pTreeScanner->getEntries() - this->index - 1));
238  }
239 
240 
241  /**
242  * Equality of iterator.
243  *
244  * \param cursor iterator
245  * \return true if equal; else false
246  */
247  virtual bool equals(const reverse_iterator& cursor) const
248  {
249  return index == cursor.index;
250  }
251 
252 
253  /**
254  * Increment iterator.
255  *
256  * \return true if valid; else false
257  */
258  virtual bool increment()
259  {
260  return ++index < pTreeScanner->getEntries();
261  }
262 
263 
264  /**
265  * Decrement iterator.
266  *
267  * \return true if valid; else false
268  */
269  virtual bool decrement()
270  {
271  return --index >= 0;
272  }
273 
274 
275  private:
276  /**
277  * Constructor.
278  *
279  * \param __p pointer to tree scanner
280  * \param __i start index
281  */
283  pTreeScanner(__p),
284  index (__i)
285  {}
286 
289  };
290 
291 
292  /**
293  * Check emptyness.
294  *
295  * \return true if empty; else false
296  */
297  bool empty() const
298  {
299  return getEntries() == 0;
300  }
301 
302 
303  /**
304  * Get iterator to begin of data.
305  *
306  * \return iterator
307  */
308  iterator begin()
309  {
310  return iterator(this, this->getLowerLimit());
311  }
312 
313 
314  /**
315  * Get iterator to end of data.
316  *
317  * \return iterator
318  */
319  iterator end()
320  {
321  return iterator(this, this->getUpperLimit() < this->getEntries() ? this->getUpperLimit() : this->getEntries());
322  }
323 
324 
325  /**
326  * Get reverse iterator to begin of data.
327  *
328  * \return reverse iterator
329  */
330  reverse_iterator rbegin()
331  {
332  return reverse_iterator(this, this->getLowerLimit());
333  }
334 
335 
336  /**
337  * Get reverse iterator to end of data.
338  *
339  * \return reverse iterator
340  */
341  reverse_iterator rend()
342  {
343  return reverse_iterator(this, this->getUpperLimit() < this->getEntries() ? this->getUpperLimit() : this->getEntries());
344  }
345  };
346 
347 
348  /**
349  * Specialiation of interface JTreeScannerInterface for ordered direct access of elements in ROOT TChain.
350  *
351  * This interface extends the JTreeScannerInterface<JClass_t, JNullType> interface by
352  * defining the additional interface method to find a corresponding entry in the ROOT TChain.
353  */
354  template<class JClass_t, class JEvaluator_t>
355  struct JTreeScannerInterface :
356  public virtual JTreeScannerInterface<JClass_t>
357  {
358  /**
359  * Constructor.
360  *
361  * \param evaluator evaluator
362  */
363  JTreeScannerInterface(const JEvaluator_t& evaluator = JEvaluator_t()) :
364  getValue(evaluator)
365  {}
366 
367 
368  /**
369  * Find index of element that is closest in value to given value.
370  *
371  * \param value value
372  * \return index (-1 in case of error)
373  */
374  virtual Long64_t find(const double value) const = 0;
375 
376 
377  /**
378  * Find index of element that is closest in value to given object.
379  *
380  * \param object object
381  * \return index (-1 in case of error)
382  */
383  template<class T>
384  Long64_t find(const T& object) const
385  {
386  return this->find(getValue(object));
387  }
388 
389 
390  /**
391  * Get evaluator.
392  *
393  * \return evaluator
394  */
395  const JEvaluator_t& getEvaluator() const
396  {
397  return getValue;
398  }
399 
400 
401  protected:
402  JEvaluator_t getValue;
403  };
404 }
405 
406 #endif
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::end
iterator end()
Get iterator to end of data.
Definition: JTreeScannerInterface.hh:319
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::reverse_iterator::pTreeScanner
JTreeScannerInterface * pTreeScanner
Definition: JTreeScannerInterface.hh:287
JSUPPORT::JLimit
Auxiliary class for defining the range of iterations of objects.
Definition: JLimit.hh:41
JSUPPORT::JMultipleFileScanner_t
Auxiliary base class for list of file names.
Definition: JMultipleFileScanner.hh:44
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::reverse_iterator::reverse_iterator
reverse_iterator()
Default constructor.
Definition: JTreeScannerInterface.hh:213
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::reverse_iterator::increment
virtual bool increment()
Increment iterator.
Definition: JTreeScannerInterface.hh:258
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::reverse_iterator::decrement
virtual bool decrement()
Decrement iterator.
Definition: JTreeScannerInterface.hh:269
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::data_type
JClass_t data_type
Definition: JTreeScannerInterface.hh:51
JSUPPORT::JTreeScannerInterface::JTreeScannerInterface
JTreeScannerInterface(const JEvaluator_t &evaluator=JEvaluator_t())
Constructor.
Definition: JTreeScannerInterface.hh:363
JLANG::JEquals
Template definition of auxiliary base class for comparison of data structures.
Definition: JEquals.hh:24
JLimit.hh
JSUPPORT::JTreeScannerInterface::getEvaluator
const JEvaluator_t & getEvaluator() const
Get evaluator.
Definition: JTreeScannerInterface.hh:395
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::reverse_iterator::equals
virtual bool equals(const reverse_iterator &cursor) const
Equality of iterator.
Definition: JTreeScannerInterface.hh:247
JObjectIterator.hh
JLANG::JNullType
Auxiliary class for no type definition.
Definition: JNullType.hh:19
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::getClassName
virtual const char * getClassName() const
Get actual class name.
Definition: JTreeScannerInterface.hh:104
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::empty
bool empty() const
Check emptyness.
Definition: JTreeScannerInterface.hh:297
JLANG::JBidirectionalIterator
Template interface for method bool decrement().
Definition: JBidirectionalIterator.hh:20
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::reverse_iterator::index
counter_type index
Definition: JTreeScannerInterface.hh:288
JEquals.hh
JPP
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Definition: JAAnetToolkit.hh:37
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::reverse_iterator::operator->
const data_type * operator->()
Smart pointer operator.
Definition: JTreeScannerInterface.hh:224
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::reverse_iterator::reverse_iterator
reverse_iterator(JTreeScannerInterface *__p, const counter_type __i)
Constructor.
Definition: JTreeScannerInterface.hh:282
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::rend
reverse_iterator rend()
Get reverse iterator to end of data.
Definition: JTreeScannerInterface.hh:341
JSUPPORT::JTreeScannerInterface::find
Long64_t find(const T &object) const
Find index of element that is closest in value to given object.
Definition: JTreeScannerInterface.hh:384
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::iterator::pTreeScanner
JTreeScannerInterface * pTreeScanner
Definition: JTreeScannerInterface.hh:196
JSUPPORT::JTreeScannerInterface
Auxiliary interface for direct access of elements in ROOT TChain.
Definition: JTreeScannerInterface.hh:34
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::iterator::equals
virtual bool equals(const iterator &cursor) const
Equality of iterator.
Definition: JTreeScannerInterface.hh:156
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::iterator::increment
virtual bool increment()
Increment iterator.
Definition: JTreeScannerInterface.hh:167
JMultipleFileScanner.hh
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::iterator::index
counter_type index
Definition: JTreeScannerInterface.hh:197
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::iterator::decrement
virtual bool decrement()
Decrement iterator.
Definition: JTreeScannerInterface.hh:178
JLANG::JRewindableObjectIterator
Interface for object iteration with rewinding.
Definition: JObjectIterator.hh:362
JSUPPORT::JTreeScannerInterface::find
virtual Long64_t find(const double value) const =0
Find index of element that is closest in value to given value.
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::iterator::iterator
iterator()
Default constructor.
Definition: JTreeScannerInterface.hh:122
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::begin
iterator begin()
Get iterator to begin of data.
Definition: JTreeScannerInterface.hh:308
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::iterator::operator*
data_type & operator*()
Dereference operator.
Definition: JTreeScannerInterface.hh:144
JSUPPORT
Support classes and methods for experiment specific I/O.
Definition: JDataWriter.cc:38
JNullType.hh
JBidirectionalIterator.hh
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::configure
void configure(const JMultipleFileScanner_t &file_list)
Configure.
Definition: JTreeScannerInterface.hh:68
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::reverse_iterator::operator*
const data_type & operator*()
Dereference operator.
Definition: JTreeScannerInterface.hh:235
JSUPPORT::JTreeScannerInterface::getValue
JEvaluator_t getValue
Definition: JTreeScannerInterface.hh:402
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::pointer_type
JRewindableObjectIterator< JClass_t >::pointer_type pointer_type
Definition: JTreeScannerInterface.hh:52
JROOT::counter_type
Long64_t counter_type
Type definition for counter.
Definition: JCounter.hh:24
JTOOLS::configure
void configure(const T &value, const JAbstractCollection< JAbscissa_t > &bounds, JBool< false > option)
Configuration of value.
Definition: JToolsToolkit.hh:285
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::rbegin
reverse_iterator rbegin()
Get reverse iterator to begin of data.
Definition: JTreeScannerInterface.hh:330
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::iterator::iterator
iterator(JTreeScannerInterface *__p, const counter_type __i)
Constructor.
Definition: JTreeScannerInterface.hh:191
JSUPPORT::JTreeScannerInterface< JClass_t, JNullType >::iterator::operator->
data_type * operator->()
Smart pointer operator.
Definition: JTreeScannerInterface.hh:133