Jpp
Public Types | Public Member Functions | Static Public Attributes | Protected Attributes | Private Attributes | List of all members
JSUPPORT::JMultipleFileScanner< Head > Class Template Referenceabstract

Template specialisation of JMultipleFileScanner for Monte Carlo header. More...

#include <JMonteCarloFileSupportkit.hh>

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

Public Types

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

Public Member Functions

 JMultipleFileScanner ()
 Default constructor. More...
 
 JMultipleFileScanner (const JMultipleFileScanner_t &file_list)
 Copy constructor. More...
 
virtual void rewind ()
 Rewind. More...
 
virtual bool setObject (Head &object)
 Set object. More...
 
const Head & getHeader ()
 Get Monte Carlo Header. More...
 
const std::string & getFilename () const
 Get current file name. More...
 
counter_type getCounter () const
 Get counter. 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...
 
virtual bool hasNext ()
 Check availability of next element. More...
 
virtual const pointer_typenext ()
 Get next element. More...
 
virtual bool setObject (T &object)=0
 Set object. More...
 

Static Public Attributes

static bool merge = false
 Allow merging of files w/o header. More...
 

Protected Attributes

JFileScanner< T > scanner
 
unsigned int index
 
counter_type counter
 
object
 object More...
 
bool has_next
 status More...
 

Private Attributes

bool do_next
 
pointer_type ps
 

Detailed Description

template<>
class JSUPPORT::JMultipleFileScanner< Head >

Template specialisation of JMultipleFileScanner for Monte Carlo header.

This class re-implements the methods rewind and setObject of the JLANG::JRewindableAbstractObjectIterator interface so that all header objects in the complete file list are read and added. It provides for the method JSUPPORT::getHeader which returns the sum of all headers.

Definition at line 291 of file JMonteCarloFileSupportkit.hh.

Member Typedef Documentation

◆ input_type

Definition at line 263 of file JMultipleFileScanner.hh.

◆ pointer_type [1/2]

Definition at line 264 of file JMultipleFileScanner.hh.

◆ pointer_type [2/2]

template<class T>
typedef JObjectIterator<T>::pointer_type JLANG::JAbstractObjectIterator< T >::pointer_type
inherited

Definition at line 39 of file JAbstractObjectIterator.hh.

Constructor & Destructor Documentation

◆ JMultipleFileScanner() [1/2]

Default constructor.

Definition at line 299 of file JMonteCarloFileSupportkit.hh.

299  :
302  do_next(true)
303  {}

◆ JMultipleFileScanner() [2/2]

Copy constructor.

The file list is copied.

Parameters
file_listJMultipleFileScanner

Definition at line 312 of file JMonteCarloFileSupportkit.hh.

312  :
315  do_next(true)
316  {
317  static_cast<JMultipleFileScanner_t&>(*this) = file_list;
318  }

Member Function Documentation

◆ rewind()

virtual void JSUPPORT::JMultipleFileScanner< Head >::rewind ( )
inlinevirtual

Rewind.

Reimplemented from JSUPPORT::JMultipleFileScanner<>.

Definition at line 324 of file JMonteCarloFileSupportkit.hh.

325  {
326  do_next = true;
327  }

◆ setObject() [1/2]

virtual bool JSUPPORT::JMultipleFileScanner< Head >::setObject ( Head &  object)
inlinevirtual

Set object.

Parameters
objectreference to object to be set
Returns
true if set; else false

Definition at line 336 of file JMonteCarloFileSupportkit.hh.

337  {
338  if (do_next) {
339 
340  using namespace JLANG;
341 
342  JHead header;
343 
344  do_next = false;
345 
346  unsigned int count = 0;
347 
349 
350  for (const_iterator i = this->begin(); i != this->end(); ++i) {
351 
352  scanner.open(i->c_str());
353 
354  if (scanner.hasNext()) {
355 
356  const JHead buffer = *scanner.next();
357 
358  if (count == 0)
359  header = buffer;
360  else if (header.match(buffer))
361  header.add(buffer);
362  else
363  THROW(JException, "JMultipleFileScanner<Head>::setObject(): inconsistent headers.");
364 
365  ++count;
366  }
367 
368  scanner.close();
369  }
370 
371  copy(header, object);
372 
373  if (count != 0 && count != this->size()) {
374  if (!merge) {
375  THROW(JException, "JMultipleFileScanner<Head>::setObject(): missing header(s): " << count << " != " << this->size());
376  }
377  }
378 
379  return count != 0;
380 
381  } else {
382 
383  return false;
384  }
385  }

◆ getHeader()

const Head& JSUPPORT::JMultipleFileScanner< Head >::getHeader ( )
inline

Get Monte Carlo Header.

Returns
header

Definition at line 393 of file JMonteCarloFileSupportkit.hh.

394  {
395  const Head* p = NULL;
396 
397  if (!this->hasNext() || (p = this->next()) == NULL) {
398  throw JNullPointerException("JMultipleFileScanner<Head>::getHeader(): Missing Header.");
399  }
400 
401  rewind();
402 
403  return *p;
404  }

◆ getFilename()

const std::string& JSUPPORT::JMultipleFileScanner< T >::getFilename ( ) const
inlineinherited

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()

counter_type JSUPPORT::JMultipleFileScanner< T >::getCounter ( ) const
inlineinherited

Get counter.

Returns
counter

Definition at line 323 of file JMultipleFileScanner.hh.

324  {
325  return counter;
326  }

◆ hasNext() [1/2]

virtual bool JSUPPORT::JMultipleFileScanner< T >::hasNext ( )
inlinevirtualinherited

Check availability of next element.

Returns
true if the iteration has more elements; else false

Implements JLANG::JObjectIterator< 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() [1/2]

virtual const pointer_type& JSUPPORT::JMultipleFileScanner< T >::next ( )
inlinevirtualinherited

Get next element.

Returns
pointer to element

Implements JLANG::JObjectIterator< T >.

Definition at line 398 of file JMultipleFileScanner.hh.

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

◆ skip() [1/2]

virtual skip_type JSUPPORT::JMultipleFileScanner< T >::skip ( const skip_type  ns)
inlinevirtualinherited

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

◆ hasNext() [2/2]

template<class T>
virtual bool JLANG::JAbstractObjectIterator< T >::hasNext ( )
inlinevirtualinherited

Check availability of next element.

Returns
true if the iteration has more elements; else false

Implements JLANG::JObjectIterator< T >.

Definition at line 56 of file JAbstractObjectIterator.hh.

57  {
58  if (!has_next) {
59  has_next = this->setObject(object);
60  }
61 
62  return has_next;
63  }

◆ next() [2/2]

template<class T>
virtual const pointer_type& JLANG::JAbstractObjectIterator< T >::next ( )
inlinevirtualinherited

Get next element.

Returns
pointer to element

Implements JLANG::JObjectIterator< T >.

Definition at line 71 of file JAbstractObjectIterator.hh.

72  {
73  if (has_next)
74  ps.reset(&this->object);
75  else
76  ps.reset(NULL);
77 
78  has_next = false;
79 
80  return ps;
81  }

◆ setObject() [2/2]

template<class T>
virtual bool JLANG::JAbstractObjectIterator< T >::setObject ( T &  object)
pure virtualinherited

Member Data Documentation

◆ merge

bool JSUPPORT::JMultipleFileScanner< Head >::merge = false
static

Allow merging of files w/o header.

Initialisation of merge option.

Definition at line 406 of file JMonteCarloFileSupportkit.hh.

◆ do_next

bool JSUPPORT::JMultipleFileScanner< Head >::do_next
private

Definition at line 409 of file JMonteCarloFileSupportkit.hh.

◆ scanner

JFileScanner<T> JSUPPORT::JMultipleFileScanner< T >::scanner
protectedinherited

Definition at line 427 of file JMultipleFileScanner.hh.

◆ index

unsigned int JSUPPORT::JMultipleFileScanner< T >::index
protectedinherited

Definition at line 428 of file JMultipleFileScanner.hh.

◆ counter

counter_type JSUPPORT::JMultipleFileScanner< T >::counter
protectedinherited

Definition at line 429 of file JMultipleFileScanner.hh.

◆ object

template<class T>
T JLANG::JAbstractObjectIterator< T >::object
protectedinherited

object

Definition at line 34 of file JAbstractObjectIterator.hh.

◆ has_next

template<class T>
bool JLANG::JAbstractObjectIterator< T >::has_next
protectedinherited

status

Definition at line 35 of file JAbstractObjectIterator.hh.

◆ ps

template<class T>
pointer_type JLANG::JAbstractObjectIterator< T >::ps
privateinherited

Definition at line 84 of file JAbstractObjectIterator.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::JFileScanner
Object reading from file.
Definition: JFileScanner.hh:34
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::JRewindableAbstractObjectIterator< Head >
JSUPPORT::JMultipleFileScanner< Head >::do_next
bool do_next
Definition: JMonteCarloFileSupportkit.hh:409
JLANG::JNullPointerException
Exception for null pointer operation.
Definition: JException.hh:216
JLANG::JObjectIterator::hasNext
virtual bool hasNext()=0
Check availability of next element.
JSUPPORT::JMultipleFileScanner<>::index
unsigned int index
Definition: JMultipleFileScanner.hh:428
JAANET::copy
void copy(const Head &from, JHead &to)
Copy header from from to to.
Definition: JHead.cc:152
JSUPPORT::JMultipleFileScanner<>::next
virtual const pointer_type & next()
Get next element.
Definition: JMultipleFileScanner.hh:398
JLANG::JPointer::reset
virtual void reset()
Reset pointer.
Definition: JPointer.hh:84
JLANG::JAbstractObjectIterator::has_next
bool has_next
status
Definition: JAbstractObjectIterator.hh:35
THROW
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:669
JLANG::JAbstractObjectIterator::ps
pointer_type ps
Definition: JAbstractObjectIterator.hh:84
JSUPPORT::JMultipleFileScanner<>::hasNext
virtual bool hasNext()
Check availability of next element.
Definition: JMultipleFileScanner.hh:350
JSUPPORT::JMultipleFileScanner<>
JSUPPORT::JMultipleFileScanner< Head >::merge
static bool merge
Allow merging of files w/o header.
Definition: JMonteCarloFileSupportkit.hh:406
JLANG::JAbstractObjectIterator::setObject
virtual bool setObject(T &object)=0
Set object.
JSUPPORT::JMultipleFileScanner< Head >::rewind
virtual void rewind()
Rewind.
Definition: JMonteCarloFileSupportkit.hh:324
JLANG
Auxiliary classes and methods for language specific functionality.
Definition: JAbstractClass.hh:10
JLANG::JObjectIterator::next
virtual const pointer_type & next()=0
Get next element.
JLANG::JException
General exception.
Definition: JException.hh:40
JSUPPORT::JMultipleFileScanner<>::scanner
JFileScanner< T > scanner
Definition: JMultipleFileScanner.hh:427