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 #ifndef ESYS_LSMITERATIVEREADER_H 00015 #define ESYS_LSMITERATIVEREADER_H 00016 00017 #include <sstream> 00018 #include <memory> 00019 00020 namespace esys 00021 { 00022 namespace lsm 00023 { 00027 template <class TmplData> 00028 class IStreamIterator 00029 { 00030 public: 00031 typedef TmplData value_type; 00032 00033 IStreamIterator(std::istream &iStream, int numElements); 00034 00035 virtual ~IStreamIterator(); 00036 00041 bool hasNext() const; 00042 00046 const TmplData &next(); 00047 00051 int getNumRemaining() const; 00052 00053 protected: 00054 IStreamIterator(const IStreamIterator &it); 00055 IStreamIterator &operator=(const IStreamIterator &it); 00056 00057 virtual void readDataFromStream(); 00058 00059 std::istream *m_pIStream; 00060 TmplData m_data; 00061 int m_numRemaining; 00062 }; 00063 00073 template <class TmplIterator> 00074 class IterativeReader 00075 { 00076 public: 00077 typedef TmplIterator Iterator; 00078 00079 IterativeReader(std::istream &iStream); 00080 00081 virtual ~IterativeReader(); 00082 00087 virtual void initialise(); 00088 00092 int getNumElements() const; 00093 00098 bool isInitialised() const; 00099 00100 Iterator &getIterator(); 00101 00102 protected: 00103 typedef std::auto_ptr<Iterator> IteratorAutoPtr; 00104 00105 void setNumElements(int numElements); 00106 00107 std::istream &getIStream(); 00108 00109 const std::istream &getIStream() const; 00110 00115 virtual Iterator *createNewIterator(); 00116 00117 private: 00118 00119 int m_numElements; 00120 std::istream *m_pIStream; 00121 IteratorAutoPtr m_iteratorPtr; 00122 }; 00123 }; 00124 }; 00125 00126 #include "Parallel/IterativeReader.hpp" 00127 00128 #endif