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_LSMSTLITERATOR_H 00015 #define ESYS_LSMSTLITERATOR_H 00016 00017 #include <string> 00018 #include <vector> 00019 #include <sstream> 00020 00021 namespace esys 00022 { 00023 namespace lsm 00024 { 00025 template <typename TmplIteratable> 00026 class ForwardConstIterator; 00027 00028 template <typename TmplIteratable> 00029 class ForwardIterator 00030 { 00031 public: 00032 typedef typename TmplIteratable::value_type value_type; 00033 typedef typename TmplIteratable::reference reference; 00034 typedef typename TmplIteratable::iterator iterator; 00035 00036 inline ForwardIterator(TmplIteratable &container) 00037 : m_it(container.begin()), 00038 m_end(container.end()) 00039 { 00040 } 00041 00042 inline ForwardIterator(const iterator &begin, const iterator &end) 00043 : m_it(begin), 00044 m_end(end) 00045 { 00046 } 00047 00048 inline bool hasNext() const 00049 { 00050 return (m_it != m_end); 00051 } 00052 00053 inline reference current() const 00054 { 00055 iterator it = m_it; 00056 it--; 00057 return *(it); 00058 } 00059 00060 inline reference next() 00061 { 00062 reference ref = (*m_it); 00063 m_it++; 00064 return ref; 00065 } 00066 00067 friend class ForwardConstIterator<TmplIteratable>; 00068 00069 private: 00070 iterator m_it; 00071 iterator m_end; 00072 }; 00073 00074 template <typename TmplIteratable> 00075 class ForwardConstIterator 00076 { 00077 public: 00078 typedef typename TmplIteratable::value_type value_type; 00079 typedef typename TmplIteratable::const_reference reference; 00080 typedef typename TmplIteratable::const_iterator iterator; 00081 00082 inline ForwardConstIterator(const TmplIteratable &container) 00083 : m_it(container.begin()), 00084 m_end(container.end()) 00085 { 00086 } 00087 00088 inline ForwardConstIterator(const iterator &begin, const iterator &end) 00089 : m_it(begin), 00090 m_end(end) 00091 { 00092 } 00093 00094 inline ForwardConstIterator(const ForwardIterator<TmplIteratable> &it) 00095 : m_it(it.m_it), 00096 m_end(it.m_end) 00097 { 00098 } 00099 00100 inline bool hasNext() const 00101 { 00102 return (m_it != m_end); 00103 } 00104 00105 inline reference current() const 00106 { 00107 iterator it = m_it; 00108 it--; 00109 return *(it); 00110 } 00111 00112 inline reference next() 00113 { 00114 reference ref = (*m_it); 00115 m_it++; 00116 return ref; 00117 } 00118 00119 private: 00120 iterator m_it; 00121 iterator m_end; 00122 }; 00123 } 00124 } 00125 00126 #endif