ESyS-Particle  4.0.1
IterativeReader.h
1 
2 // //
3 // Copyright (c) 2003-2011 by The University of Queensland //
4 // Earth Systems Science Computational Centre (ESSCC) //
5 // http://www.uq.edu.au/esscc //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.opensource.org/licenses/osl-3.0.php //
10 // //
12 
13 
14 #ifndef ESYS_LSMITERATIVEREADER_H
15 #define ESYS_LSMITERATIVEREADER_H
16 
17 #include <sstream>
18 #include <memory>
19 
20 namespace esys
21 {
22  namespace lsm
23  {
27  template <class TmplData>
29  {
30  public:
31  typedef TmplData value_type;
32 
33  IStreamIterator(std::istream &iStream, int numElements);
34 
35  virtual ~IStreamIterator();
36 
41  bool hasNext() const;
42 
46  const TmplData &next();
47 
51  int getNumRemaining() const;
52 
53  protected:
55  IStreamIterator &operator=(const IStreamIterator &it);
56 
57  virtual void readDataFromStream();
58 
59  std::istream *m_pIStream;
60  TmplData m_data;
61  int m_numRemaining;
62  };
63 
73  template <class TmplIterator>
75  {
76  public:
77  typedef TmplIterator Iterator;
78 
79  IterativeReader(std::istream &iStream);
80 
81  virtual ~IterativeReader();
82 
87  virtual void initialise();
88 
92  int getNumElements() const;
93 
98  bool isInitialised() const;
99 
100  Iterator &getIterator();
101 
102  protected:
103  typedef std::auto_ptr<Iterator> IteratorAutoPtr;
104 
105  void setNumElements(int numElements);
106 
107  std::istream &getIStream();
108 
109  const std::istream &getIStream() const;
110 
115  virtual Iterator *createNewIterator();
116 
117  private:
118 
119  int m_numElements;
120  std::istream *m_pIStream;
121  IteratorAutoPtr m_iteratorPtr;
122  };
123  };
124 };
125 
126 #include "Parallel/IterativeReader.hpp"
127 
128 #endif