ESyS-Particle
4.0.1
|
00001 00002 // // 00003 // Copyright (c) 2003-2011 by The University of Queensland // 00004 // Earth Systems Science Computational Centre (ESSCC) // 00005 // http://www.uq.edu.au/esscc // 00006 // // 00007 // Primary Business: Brisbane, Queensland, Australia // 00008 // Licensed under the Open Software License version 3.0 // 00009 // http://www.opensource.org/licenses/osl-3.0.php // 00010 // // 00012 00013 00014 namespace esys 00015 { 00016 namespace lsm 00017 { 00018 template <class TmplData> 00019 IStreamIterator<TmplData>::IStreamIterator(std::istream &iStream, int numParticles) 00020 : m_pIStream(&iStream), 00021 m_numRemaining(numParticles) 00022 { 00023 } 00024 00025 template <class TmplData> 00026 IStreamIterator<TmplData>::~IStreamIterator() 00027 { 00028 } 00029 00030 template <class TmplData> 00031 bool IStreamIterator<TmplData>::hasNext() const 00032 { 00033 return (m_numRemaining > 0); 00034 } 00035 00036 template <class TmplData> 00037 void IStreamIterator<TmplData>::readDataFromStream() 00038 { 00039 m_data.read(*m_pIStream); 00040 } 00041 00042 template <class TmplData> 00043 const TmplData &IStreamIterator<TmplData>::next() 00044 { 00045 m_numRemaining--; 00046 readDataFromStream(); 00047 return m_data; 00048 } 00049 00050 template <class TmplData> 00051 int IStreamIterator<TmplData>::getNumRemaining() const 00052 { 00053 return m_numRemaining; 00054 } 00055 00056 //=============================================================================== 00057 template <class TmplIterator> 00058 IterativeReader<TmplIterator>::IterativeReader(std::istream &iStream) 00059 : m_numElements(-1), 00060 m_pIStream(&iStream), 00061 m_iteratorPtr() 00062 { 00063 } 00064 00065 template <class TmplIterator> 00066 IterativeReader<TmplIterator>::~IterativeReader() 00067 { 00068 } 00069 00070 template <class TmplIterator> 00071 int IterativeReader<TmplIterator>::getNumElements() const 00072 { 00073 return m_numElements; 00074 } 00075 00076 template <class TmplIterator> 00077 void IterativeReader<TmplIterator>::setNumElements(int numElements) 00078 { 00079 m_numElements = numElements; 00080 } 00081 00082 template <class TmplIterator> 00083 std::istream &IterativeReader<TmplIterator>::getIStream() 00084 { 00085 return *m_pIStream; 00086 } 00087 00088 template <class TmplIterator> 00089 const std::istream &IterativeReader<TmplIterator>::getIStream() const 00090 { 00091 return *m_pIStream; 00092 } 00093 00094 template <class TmplIterator> 00095 TmplIterator *IterativeReader<TmplIterator>::createNewIterator() 00096 { 00097 return new TmplIterator(*m_pIStream, getNumElements()); 00098 } 00099 00100 template <class TmplIterator> 00101 void IterativeReader<TmplIterator>::initialise() 00102 { 00103 m_iteratorPtr = IteratorAutoPtr(createNewIterator()); 00104 } 00105 00106 template <class TmplIterator> 00107 bool IterativeReader<TmplIterator>::isInitialised() const 00108 { 00109 return (m_iteratorPtr.get() != NULL); 00110 } 00111 00112 template <class TmplIterator> 00113 typename IterativeReader<TmplIterator>::Iterator &IterativeReader<TmplIterator>::getIterator() 00114 { 00115 if (!isInitialised()) 00116 { 00117 initialise(); 00118 } 00119 return (*(m_iteratorPtr)); 00120 } 00121 }; 00122 };