LCOV - code coverage report
Current view: top level - TEvtGen/EvtGen/EvtGenBase - EvtStreamAdapter.hh (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 13 0.0 %
Date: 2016-06-14 17:26:59 Functions: 0 16 0.0 %

          Line data    Source code
       1             : /*******************************************************************************
       2             :  * Project: BaBar detector at the SLAC PEP-II B-factory
       3             :  * Package: EvtGenBase
       4             :  *    File: $Id: EvtStreamAdapter.hh,v 1.2 2009-03-16 16:40:16 robbep Exp $
       5             :  *  Author: Alexei Dvoretskii, dvoretsk@slac.stanford.edu, 2001-2002
       6             :  *
       7             :  * Copyright (C) 2002 Caltech
       8             :  *******************************************************************************/
       9             : 
      10             : // Stream adapters are used to convert a stream-like input (for example, 
      11             : // a file containing N entries) to an STL like iterator interface. There 
      12             : // must be a way to get point from the stream, and also an indicator of the 
      13             : // end of the stream.
      14             : 
      15             : #ifndef EVT_STREAM_ADAPTER_HH
      16             : #define EVT_STREAM_ADAPTER_HH
      17             : 
      18           0 : template <class Point> class EvtStreamAdapter {
      19             : public:
      20             : 
      21             :   EvtStreamAdapter()
      22           0 :   {}
      23             :   virtual ~EvtStreamAdapter()
      24           0 :   {}
      25             :   virtual EvtStreamAdapter* clone() const = 0;
      26             :   virtual Point currentValue() = 0;
      27             :   virtual void advance() = 0;
      28             :   virtual bool pastEnd() = 0;
      29             : 
      30             : };
      31             : 
      32             : // N points are read from a generated stream.
      33             : 
      34             : template <class Point,class Generator>
      35           0 : class EvtGenStreamAdapter : public EvtStreamAdapter<Point> {
      36             : public:
      37           0 :   EvtGenStreamAdapter(Generator gen, int count)
      38           0 :     : _gen(gen), _count(count)
      39           0 :   {}
      40             : 
      41             :   virtual ~EvtGenStreamAdapter() 
      42           0 :   {}
      43             : 
      44             :   virtual EvtStreamAdapter<Point>* clone() const 
      45             :   { 
      46           0 :     return new EvtGenStreamAdapter(*this); 
      47           0 :   }
      48           0 :   virtual Point currentValue() { return _gen(); }
      49           0 :   virtual bool pastEnd() { return (_count <= 0); }
      50           0 :   virtual void advance() { _count--; }
      51             :   
      52             : private:
      53             :   Generator _gen;
      54             :   int _count;   // also serves as past the end indicator
      55             : };
      56             : 
      57             : 
      58             : // Only points satisfying a predicate are read from the stream.
      59             : 
      60             : template <class Point, class Iterator, class Predicate>
      61             : class EvtPredStreamAdapter : public EvtStreamAdapter<Point> {
      62             : public:
      63             :   EvtPredStreamAdapter(Predicate pred, Iterator it, Iterator end)
      64             :     : _pred(pred), _it(it), _end(end)
      65             :   {}
      66             :   virtual ~EvtPredStreamAdapter()
      67             :   {}
      68             : 
      69             :   virtual EvtStreamAdapter<Point>* clone() const
      70             :   { 
      71             :     return new EvtPredStreamAdapter(*this); 
      72             :   }
      73             :   virtual Point currentValue() { 
      74             :     Point value;
      75             :     while(!pastEnd()) {
      76             :       
      77             :       value = *_it;
      78             :       if(_pred(value)) break;
      79             :       _it++;
      80             :     }
      81             :     return value;
      82             :   }   
      83             : 
      84             :   virtual bool pastEnd() { return _it == _end; }
      85             :   virtual void advance() { _it++; }
      86             : 
      87             : private:
      88             :   Predicate _pred;
      89             :   Iterator _it;
      90             :   Iterator _end;
      91             : };
      92             : 
      93             : #endif

Generated by: LCOV version 1.11