1 #ifndef YASLI_FILL_ITERATOR_H_
2 #define YASLI_FILL_ITERATOR_H_
4 // $Id: yasli_fill_iterator.h 754 2006-10-17 19:59:11Z syntheticpp $
13 class fill_iterator_base
14 : public std::iterator<
15 std::random_access_iterator_tag,
24 class fill_iterator_base<T &>
25 : public std::iterator<
26 std::random_access_iterator_tag,
35 class fill_iterator : public fill_iterator_base<T>
39 ptrdiff_t count_;//////////////////////////////////
42 typedef std::ptrdiff_t difference_type;
43 typedef typename fill_iterator_base<T>::pointer pointer;
44 typedef typename fill_iterator_base<T>::reference reference;
45 //typedef iterator_type;
51 explicit fill_iterator(reference value, difference_type count = 0)
52 : value_(value), count_(count)
57 fill_iterator(const fill_iterator<U>& rhs)
58 : value_(rhs.value_), count_(rhs.count_)
62 reference operator*() const
67 pointer operator->() const
72 fill_iterator &operator++()
78 fill_iterator operator++(int)
80 fill_iterator it(*this);
85 fill_iterator &operator--()
91 fill_iterator operator--(int)
93 fill_iterator it(*this);
98 fill_iterator &operator+=(difference_type d)
104 fill_iterator operator+(difference_type d) const
106 return fill_iterator(*this) += d;
109 fill_iterator &operator-=(difference_type d)
115 fill_iterator operator-(difference_type d) const
117 return fill_iterator(*this) -= d;
120 difference_type operator-(const fill_iterator<T>& rhs) const
122 return count_ - rhs.count_;
125 reference operator[](difference_type) const
131 bool operator==(const fill_iterator<T2>& rhs) const
133 return count_ == rhs.count_;
138 template <class T, class D>
139 inline fill_iterator<T> operator+(D lhs, const fill_iterator<T>& rhs)
145 inline bool operator!=(
146 const fill_iterator<T>& lhs,
147 const fill_iterator<T>& rhs)
149 // test for fill_iterator inequality
150 return !(lhs == rhs);
154 inline bool operator<(
155 const fill_iterator<T>& lhs,
156 const fill_iterator<T>& rhs)
158 return lhs.count_ < rhs.count_;
162 inline bool operator>(
163 const fill_iterator<T>& lhs,
164 const fill_iterator<T>& rhs)
170 inline bool operator<=(
171 const fill_iterator<T>& lhs,
172 const fill_iterator<T>& rhs)
178 inline bool operator>=(
179 const fill_iterator<T>& lhs,
180 const fill_iterator<T>& rhs)
184 } // namespace yasli_nstd