1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
/////////////////////////////////////////////////////////////
// //
// Copyright (c) 2003-2014 by The University of Queensland //
// Centre for Geoscience Computing //
// http://earth.uq.edu.au/centre-geoscience-computing //
// //
// Primary Business: Brisbane, Queensland, Australia //
// Licensed under the Open Software License version 3.0 //
// http://www.apache.org/licenses/LICENSE-2.0 //
// //
/////////////////////////////////////////////////////////////
namespace esys
{
namespace lsm
{
template <class TmplData>
IStreamIterator<TmplData>::IStreamIterator(std::istream &iStream, int numParticles)
: m_pIStream(&iStream),
m_numRemaining(numParticles)
{
}
template <class TmplData>
IStreamIterator<TmplData>::~IStreamIterator()
{
}
template <class TmplData>
bool IStreamIterator<TmplData>::hasNext() const
{
return (m_numRemaining > 0);
}
template <class TmplData>
void IStreamIterator<TmplData>::readDataFromStream()
{
m_data.read(*m_pIStream);
}
template <class TmplData>
const TmplData &IStreamIterator<TmplData>::next()
{
m_numRemaining--;
readDataFromStream();
return m_data;
}
template <class TmplData>
int IStreamIterator<TmplData>::getNumRemaining() const
{
return m_numRemaining;
}
//===============================================================================
template <class TmplIterator>
IterativeReader<TmplIterator>::IterativeReader(std::istream &iStream)
: m_numElements(-1),
m_pIStream(&iStream),
m_iteratorPtr()
{
}
template <class TmplIterator>
IterativeReader<TmplIterator>::~IterativeReader()
{
}
template <class TmplIterator>
int IterativeReader<TmplIterator>::getNumElements() const
{
return m_numElements;
}
template <class TmplIterator>
void IterativeReader<TmplIterator>::setNumElements(int numElements)
{
m_numElements = numElements;
}
template <class TmplIterator>
std::istream &IterativeReader<TmplIterator>::getIStream()
{
return *m_pIStream;
}
template <class TmplIterator>
const std::istream &IterativeReader<TmplIterator>::getIStream() const
{
return *m_pIStream;
}
template <class TmplIterator>
TmplIterator *IterativeReader<TmplIterator>::createNewIterator()
{
return new TmplIterator(*m_pIStream, getNumElements());
}
template <class TmplIterator>
void IterativeReader<TmplIterator>::initialise()
{
m_iteratorPtr = IteratorAutoPtr(createNewIterator());
}
template <class TmplIterator>
bool IterativeReader<TmplIterator>::isInitialised() const
{
return (m_iteratorPtr.get() != NULL);
}
template <class TmplIterator>
typename IterativeReader<TmplIterator>::Iterator &IterativeReader<TmplIterator>::getIterator()
{
if (!isInitialised())
{
initialise();
}
return (*(m_iteratorPtr));
}
}
}
|