1 #ifndef _theplu_yat_utility_container2d_iterator_ 2 #define _theplu_yat_utility_container2d_iterator_ 26 #include "concept_check.h" 27 #include "iterator_traits.h" 28 #include "yat_assert.h" 30 #include <boost/concept_check.hpp> 31 #include <boost/iterator/iterator_adaptor.hpp> 32 #include <boost/iterator/iterator_facade.hpp> 61 template<
typename Container,
typename value,
typename reference = value&>
63 :
public boost::iterator_facade<
64 Container2DIterator<Container, value, reference>
66 , boost::random_access_traversal_tag
102 template<
typename C2,
typename V2,
typename R2>
104 typename boost::enable_if_convertible<C2*, Container*>::type* = 0,
105 typename boost::enable_if_convertible<R2, reference>::type* = 0)
116 Container&
container(
void)
const {
return *container_; }
123 size_t row(
void)
const {
return row(index_); }
133 friend class boost::iterator_core_access;
135 Container* container_;
138 void advance(
int n) { index_+=n; }
140 void decrement(
void) { --index_; }
143 {
return other.index_ - index_; }
145 reference dereference(
void)
const 147 yat_assert<std::out_of_range>(index_ < this->size(),
148 "Container2DIterator::dereference");
149 return container_->operator()(
row(),
column());
153 {
return index_ == other.index_; }
155 void increment(
void) { ++index_; }
157 size_t column(
size_t i)
const 158 {
return i % container_->columns(); }
159 size_t row(
size_t i)
const 160 {
return static_cast<size_t>(i/container_->columns()); }
162 {
return container_->columns()*container_->rows(); }
The Department of Theoretical Physics namespace as we define it.
Concept check for Container2D.
Definition: concept_check.h:65
size_t row(void) const
Definition: Container2DIterator.h:123
Iterator for a Container2D.
Definition: Container2DIterator.h:62
Container2DIterator(Container &container, size_t row, size_t column)
Constructor.
Definition: Container2DIterator.h:88
size_t column(void) const
Definition: Container2DIterator.h:130
Container & container(void) const
Definition: Container2DIterator.h:116
Container2DIterator(Container2DIterator< C2, V2, R2 > other, typename boost::enable_if_convertible< C2 *, Container *>::type *=0, typename boost::enable_if_convertible< R2, reference >::type *=0)
Definition: Container2DIterator.h:103
Container2DIterator(void)
Default Constructor.
Definition: Container2DIterator.h:76