00001
00002
00030
00031
00032
00033 #include "pbori_defs.h"
00034
00035 #ifndef CVariableIter_h_
00036 #define CVariableIter_h_
00037
00038 BEGIN_NAMESPACE_PBORI
00039
00048 template <class Iterator, class VariableType>
00049 class CVariableIter {
00050 public:
00052 typedef Iterator iterator_type;
00053
00055 typedef VariableType var_type;
00056
00058 typedef typename var_type::ring_type ring_type;
00059
00061 typedef var_type value_type;
00062
00064
00065 typedef typename iterator_type::iterator_category iterator_category;
00066
00067 typedef int difference_type;
00068 typedef void pointer;
00069 typedef value_type reference;
00071
00073 typedef CVariableIter<iterator_type, var_type> self;
00074
00076 CVariableIter(): m_iter(), m_ring() {}
00077
00079 CVariableIter(const iterator_type& rhs, const ring_type& ring):
00080 m_iter(rhs), m_ring(ring) {}
00081
00083 self& operator++() {
00084 ++m_iter;
00085 return *this;
00086 }
00087
00089 self operator++(int) {
00090 self copy=*this;
00091 ++(*this);
00092 return copy; }
00093
00095 reference operator*() const { return var_type(*m_iter, m_ring); }
00096
00098 bool operator==(const self& rhs) const {
00099 return m_iter == rhs.m_iter;
00100 }
00101
00103 bool operator!=(const self& rhs) const {
00104 return m_iter != rhs.m_iter;
00105 }
00106
00107 protected:
00109 iterator_type m_iter;
00110
00112 ring_type m_ring;
00113 };
00114
00115 END_NAMESPACE_PBORI
00116
00117
00118 #endif // CVariableIter_h_