Jpp
Public Types | Public Member Functions | Protected Attributes | List of all members
JSUPPORT::JMultipleFileScanner< T > Class Template Reference

General purpose class for object reading from a list of file names. More...

#include <JMultipleFileScanner.hh>

Inheritance diagram for JSUPPORT::JMultipleFileScanner< T >:
JLANG::JRewindableObjectIterator< T > JLANG::JObjectIterator< T > JLANG::JRewindable< T >

Public Types

typedef JMultipleFileScanner ::input_type input_type
 
typedef JRewindableObjectIterator< T >::pointer_type pointer_type
 

Public Member Functions

 JMultipleFileScanner ()
 Default constructor. More...
 
template<class JTypelist_t >
 JMultipleFileScanner (const JMultipleFileScanner< JTypelist_t > &input)
 Copy constructor. More...
 
 JMultipleFileScanner (const input_type &file_list, const JLimit &limit=JLimit())
 Constructor. More...
 
const std::string & getFilename () const
 Get current file name. More...
 
counter_type getCounter () const
 Get counter. More...
 
virtual void rewind ()
 Rewind. More...
 
virtual bool hasNext ()
 Check availability of next element. More...
 
virtual const pointer_typenext ()
 Get next element. More...
 
virtual skip_type skip (const skip_type ns)
 Skip items. More...
 
virtual skip_type skip (const skip_type ns)
 Skip items. More...
 

Protected Attributes

JFileScanner< T > scanner
 
unsigned int index
 
counter_type counter
 

Detailed Description

template<class T>
class JSUPPORT::JMultipleFileScanner< T >

General purpose class for object reading from a list of file names.

Implementation of object reading for single data type from a list of file names.

This class extends the JMultipleFileScanner<JNullType> class and implements the JLANG::JRewindableObjectIterator interface.
When the method hasNext() is called, the next file in the list is opened when the previous file is exhausted.

Definition at line 167 of file JMultipleFileScanner.hh.

Member Typedef Documentation

◆ input_type

Definition at line 263 of file JMultipleFileScanner.hh.

◆ pointer_type

Definition at line 264 of file JMultipleFileScanner.hh.

Constructor & Destructor Documentation

◆ JMultipleFileScanner() [1/3]

template<class T>
JSUPPORT::JMultipleFileScanner< T >::JMultipleFileScanner ( )
inline

Default constructor.

Definition at line 269 of file JMultipleFileScanner.hh.

269  :
270  index (0),
271  counter(0)
272  {}

◆ JMultipleFileScanner() [2/3]

template<class T>
template<class JTypelist_t >
JSUPPORT::JMultipleFileScanner< T >::JMultipleFileScanner ( const JMultipleFileScanner< JTypelist_t > &  input)
inline

Copy constructor.

Note that the counter limit is not copied and the index and counter are set to zero.

Parameters
inputinput

Definition at line 283 of file JMultipleFileScanner.hh.

283  :
284  index (0),
285  counter(0)
286  {
287  this->configure(input.getFilelist(), JLimit());
288  }

◆ JMultipleFileScanner() [3/3]

template<class T>
JSUPPORT::JMultipleFileScanner< T >::JMultipleFileScanner ( const input_type file_list,
const JLimit limit = JLimit() 
)
inline

Constructor.

Parameters
file_listlist of file names
limitlimit

Definition at line 297 of file JMultipleFileScanner.hh.

297  :
298  index (0),
299  counter(0)
300  {
301  configure(file_list, limit);
302  }

Member Function Documentation

◆ getFilename()

template<class T>
const std::string& JSUPPORT::JMultipleFileScanner< T >::getFilename ( ) const
inline

Get current file name.

Note that this method should only be called when method hasNext() returns true.

Returns
file name

Definition at line 312 of file JMultipleFileScanner.hh.

313  {
314  return this->at(index);
315  }

◆ getCounter()

template<class T>
counter_type JSUPPORT::JMultipleFileScanner< T >::getCounter ( ) const
inline

Get counter.

Returns
counter

Definition at line 323 of file JMultipleFileScanner.hh.

324  {
325  return counter;
326  }

◆ rewind()

template<class T>
virtual void JSUPPORT::JMultipleFileScanner< T >::rewind ( )
inlinevirtual

Rewind.

Implements JLANG::JRewindable< T >.

Reimplemented in JSUPPORT::JMultipleFileScanner< JTypeList< JHead_t, JTail_t > >, JSUPPORT::JMultipleFileScanner< Head >, and JSUPPORT::JMultipleFileScanner< JTriggerParameters >.

Definition at line 332 of file JMultipleFileScanner.hh.

333  {
334  if (scanner.is_open()) {
335  scanner.close();
336  }
337 
338  index = 0;
339  counter = 0;
340 
341  scanner.reset();
342  }

◆ hasNext()

template<class T>
virtual bool JSUPPORT::JMultipleFileScanner< T >::hasNext ( )
inlinevirtual

Check availability of next element.

Returns
true if the iteration has more elements; else false

Implements JLANG::JObjectIterator< T >.

Reimplemented in JSUPPORT::JTriggeredFileScanner< JTypelist_t >.

Definition at line 350 of file JMultipleFileScanner.hh.

351  {
352  if (is_valid()) {
353 
354  if (counter < getUpperLimit() && index != this->size()) {
355 
356  // first time around
357 
358  if (!scanner.is_open()) {
359  scanner.open(getFilename().c_str());
360  }
361 
362  if (counter < getLowerLimit()) {
363  counter += scanner.skip(getLowerLimit() - counter);
364  }
365 
366  if (!scanner.hasNext()) {
367 
368  scanner.close();
369 
370  ++index;
371 
372  return hasNext();
373  }
374 
375  return true;
376 
377  } else {
378 
379  // last time around
380 
381  if (scanner.is_open()) {
382  scanner.close();
383  }
384 
385  scanner.reset();
386  }
387  }
388 
389  return false;
390  }

◆ next()

template<class T>
virtual const pointer_type& JSUPPORT::JMultipleFileScanner< T >::next ( )
inlinevirtual

Get next element.

Returns
pointer to element

Implements JLANG::JObjectIterator< T >.

Reimplemented in JSUPPORT::JTriggeredFileScanner< JTypelist_t >, and JSUPPORT::JParallelFileScanner< JTypeList< JDAQEvent, JTypelist_t >, JMultipleFileScanner >.

Definition at line 398 of file JMultipleFileScanner.hh.

399  {
400  ++counter;
401 
402  return scanner.next();
403  }

◆ skip() [1/2]

template<class T>
virtual skip_type JSUPPORT::JMultipleFileScanner< T >::skip ( const skip_type  ns)
inlinevirtual

Skip items.

Parameters
nsnumber of items to skip
Returns
number of items skipped

Reimplemented in JSUPPORT::JMultipleFileScanner< JTypeList< JHead_t, JTail_t > >.

Definition at line 412 of file JMultipleFileScanner.hh.

413  {
414  skip_type i = 0;
415 
416  while (this->hasNext() && i != ns) {
417  i += scanner.skip(ns - i);
418  }
419 
420  counter += i;
421 
422  return i;
423  }

◆ skip() [2/2]

template<class T>
virtual skip_type JLANG::JObjectIterator< T >::skip ( const skip_type  ns)
inlinevirtualinherited

Member Data Documentation

◆ scanner

template<class T>
JFileScanner<T> JSUPPORT::JMultipleFileScanner< T >::scanner
protected

Definition at line 427 of file JMultipleFileScanner.hh.

◆ index

template<class T>
unsigned int JSUPPORT::JMultipleFileScanner< T >::index
protected

Definition at line 428 of file JMultipleFileScanner.hh.

◆ counter

template<class T>
counter_type JSUPPORT::JMultipleFileScanner< T >::counter
protected

Definition at line 429 of file JMultipleFileScanner.hh.


The documentation for this class was generated from the following file:
JLANG::skip_type
unsigned int skip_type
Type definition for number of objects to skip.
Definition: JObjectIterator.hh:25
JSUPPORT::JLimit
Auxiliary class for defining the range of iterations of objects.
Definition: JLimit.hh:41
JSUPPORT::JMultipleFileScanner::counter
counter_type counter
Definition: JMultipleFileScanner.hh:429
JAANET::is_valid
bool is_valid(const T &value)
Check validity of given value.
Definition: JHead.hh:823
JSUPPORT::JMultipleFileScanner::getFilename
const std::string & getFilename() const
Get current file name.
Definition: JMultipleFileScanner.hh:312
JLANG::JObjectIterator::hasNext
virtual bool hasNext()=0
Check availability of next element.
JSUPPORT::JMultipleFileScanner::index
unsigned int index
Definition: JMultipleFileScanner.hh:428
JSUPPORT::JMultipleFileScanner::hasNext
virtual bool hasNext()
Check availability of next element.
Definition: JMultipleFileScanner.hh:350
JTOOLS::configure
void configure(const T &value, const JAbstractCollection< JAbscissa_t > &bounds, JBool< false > option)
Configuration of value.
Definition: JToolsToolkit.hh:285
JLANG::JObjectIterator::next
virtual const pointer_type & next()=0
Get next element.
JSUPPORT::JMultipleFileScanner::scanner
JFileScanner< T > scanner
Definition: JMultipleFileScanner.hh:427