9 #include "AlgoIterator.hpp"
10 #include "TrIterator.hpp"
30 typedef ptrdiff_t difference_type;
33 typedef std::input_iterator_tag iterator_category;
43 { m_sum = accumulate(range); }
54 m_range = that.m_range;
64 return (m_range==that.m_range);
68 return (!
operator==(that));
78 virtual bool operator<(const TrIterator<T>& it)
const
88 return (m_range<that.m_range);
90 bool operator>(
const SumIterator& that)
const
92 return !(m_range<that.m_range);
94 bool operator<=(
const SumIterator& that)
const
96 return (!
operator>(that));
98 bool operator>=(
const SumIterator& that)
const
100 return !(m_range<that.m_range);
126 {
return m_range.begin() < m_range.end() ? m_range.begin() : m_range.end(); }
129 {
return m_range.end() > m_range.begin() ? m_range.end() : m_range.begin(); }
132 void IncrementalUpdate()
140 T old_begin_val = *(m_range.begin());
141 T old_end_val = *(m_range.end());
143 m_sum -= old_begin_val;
144 m_sum += old_end_val;
150 T accumulate(
const TrRange<T>& range)
153 TrIterator<T> it = range.begin();
154 while (it<range.end()) {
164 ClassDef(SumIterator,0);