Imagine++
Coords.h
1// ===========================================================================
2// Imagine++ Libraries
3// Copyright (C) Imagine
4// For detailed information: http://imagine.enpc.fr/software
5// ===========================================================================
6
7namespace Imagine {
10
11
16 template <int dim> class Coords : public FVector<int,dim> {
17 private:
18 typedef FVector<int,dim> Base;
19 public:
25 Coords() : Base() {}
32 Coords(const Base& v) : Base(v) {}
40 Coords(const int v[dim]): Base(v) {}
47 Coords(int v) : Base(v) {}
55 Coords(int x,int y) : Base(x,y) {}
64 Coords(int x,int y,int z) : Base(x,y,z) {}
71 size_t prod() const {
72 size_t p=1;
73 for (int i=0;i<dim;i++)
74 p*=(*this)[i];
75 return p;
76 }
77 };
78
83 template <int dim> class CoordsIterator {
85 Coords<dim> _a;
87 Coords<dim> _b;
89 Coords<dim> _pos;
91 bool _stop;
92 public:
93 typedef std::input_iterator_tag iterator_category;
95 typedef int difference_type;
98
105 CoordsIterator() : _stop(true) {}
112 CoordsIterator(const Coords<dim>& a, const Coords<dim>& b) : _a(a), _b(b), _pos(a), _stop(false) {}
121 _a = it._a;
122 _b = it._b;
123 _pos = it._pos;
124 _stop = it._stop;
125 return *this;
126 }
127
136 bool operator == (const CoordsIterator& it) const {
137 return (_stop ? it._stop : !it._stop && _pos == it._pos);
138 }
139
146 bool operator != (const CoordsIterator& it) const {
147 return (_stop ? !it._stop : it._stop || _pos != it._pos);
148 }
149
157 for (int i=0;i<dim;i++) {
158 if (_pos[i]!=_b[i]) {
159 _pos[i]++;
160 return *this;
161 }
162 _pos[i]=_a[i];
163 }
164 _stop = true;
165 return *this;
166 }
167
175 CoordsIterator tmp(*this);
176 ++(*this);
177 return tmp;
178 }
179
187 return _pos;
188 }
189
196 const Coords<dim>* operator -> () const {
197 return &_pos;
198 }
199 };
200
201
203}
Coordinates.
Definition Coords.h:16
size_t prod() const
Product of coordinates.
Definition Coords.h:71
Coords(int x, int y, int z)
3D alias.
Definition Coords.h:64
Coords(int x, int y)
2D alias.
Definition Coords.h:55
Coords(const int v[dim])
Constructor from C array.
Definition Coords.h:40
Coords(int v)
Constructor with constant value.
Definition Coords.h:47
Coords()
Empty constructor.
Definition Coords.h:25
Coords(const Base &v)
Copy constructor Constructs from anit Coords.
Definition Coords.h:32
Coords< dim > * pointer
Standard for iterator.
Definition Coords.h:96
std::input_iterator_tag iterator_category
Standard for iterator.
Definition Coords.h:93
Coords< dim > & reference
Standard for iterator.
Definition Coords.h:97
Coords< dim > value_type
Standard for iterator.
Definition Coords.h:94
CoordsIterator & operator++()
Pre-increment.
Definition Coords.h:156
bool operator!=(const CoordsIterator &it) const
Inequality test.
Definition Coords.h:146
CoordsIterator()
Empty constructor.
Definition Coords.h:105
CoordsIterator(const Coords< dim > &a, const Coords< dim > &b)
Constructor.
Definition Coords.h:112
int difference_type
Standard for iterator.
Definition Coords.h:95
CoordsIterator & operator=(const CoordsIterator &it)
Assignment.
Definition Coords.h:120
bool operator==(const CoordsIterator &it) const
Equality test.
Definition Coords.h:136
const Coords< dim > * operator->() const
Member selection.
Definition Coords.h:196
Coords< dim > operator*() const
Dereference.
Definition Coords.h:186
const int & z() const
Definition FVector.h:132
const int & y() const
Definition FVector.h:118
FVector()
Definition FVector.h:25
const int & x() const
Definition FVector.h:104
Imagine++ namespace.