ESyS-Particle  4.0.1
IterativeReader.hpp
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 namespace esys
15 {
16  namespace lsm
17  {
18  template <class TmplData>
19  IStreamIterator<TmplData>::IStreamIterator(std::istream &iStream, int numParticles)
20  : m_pIStream(&iStream),
21  m_numRemaining(numParticles)
22  {
23  }
24 
25  template <class TmplData>
26  IStreamIterator<TmplData>::~IStreamIterator()
27  {
28  }
29 
30  template <class TmplData>
32  {
33  return (m_numRemaining > 0);
34  }
35 
36  template <class TmplData>
38  {
39  m_data.read(*m_pIStream);
40  }
41 
42  template <class TmplData>
44  {
45  m_numRemaining--;
46  readDataFromStream();
47  return m_data;
48  }
49 
50  template <class TmplData>
52  {
53  return m_numRemaining;
54  }
55 
56 //===============================================================================
57  template <class TmplIterator>
59  : m_numElements(-1),
60  m_pIStream(&iStream),
61  m_iteratorPtr()
62  {
63  }
64 
65  template <class TmplIterator>
66  IterativeReader<TmplIterator>::~IterativeReader()
67  {
68  }
69 
70  template <class TmplIterator>
72  {
73  return m_numElements;
74  }
75 
76  template <class TmplIterator>
78  {
79  m_numElements = numElements;
80  }
81 
82  template <class TmplIterator>
83  std::istream &IterativeReader<TmplIterator>::getIStream()
84  {
85  return *m_pIStream;
86  }
87 
88  template <class TmplIterator>
89  const std::istream &IterativeReader<TmplIterator>::getIStream() const
90  {
91  return *m_pIStream;
92  }
93 
94  template <class TmplIterator>
96  {
97  return new TmplIterator(*m_pIStream, getNumElements());
98  }
99 
100  template <class TmplIterator>
102  {
103  m_iteratorPtr = IteratorAutoPtr(createNewIterator());
104  }
105 
106  template <class TmplIterator>
108  {
109  return (m_iteratorPtr.get() != NULL);
110  }
111 
112  template <class TmplIterator>
113  typename IterativeReader<TmplIterator>::Iterator &IterativeReader<TmplIterator>::getIterator()
114  {
115  if (!isInitialised())
116  {
117  initialise();
118  }
119  return (*(m_iteratorPtr));
120  }
121  };
122 };