1.1 --- a/lemon/dim2.h Thu Jan 03 11:12:27 2008 +0100
1.2 +++ b/lemon/dim2.h Thu Jan 03 11:13:29 2008 +0100
1.3 @@ -34,9 +34,6 @@
1.4 /// can be used to determine
1.5 /// the rectangular bounding box of a set of
1.6 /// \ref lemon::dim2::Point "dim2::Point"'s.
1.7 -///
1.8 -///\author Attila Bernath
1.9 -
1.10
1.11 namespace lemon {
1.12
1.13 @@ -62,9 +59,9 @@
1.14
1.15 typedef T Value;
1.16
1.17 - ///First co-ordinate
1.18 + ///First coordinate
1.19 T x;
1.20 - ///Second co-ordinate
1.21 + ///Second coordinate
1.22 T y;
1.23
1.24 ///Default constructor
1.25 @@ -75,8 +72,8 @@
1.26
1.27 ///The dimension of the vector.
1.28
1.29 - ///This class give back always 2.
1.30 - ///
1.31 + ///The dimension of the vector.
1.32 + ///This function always returns 2.
1.33 int size() const { return 2; }
1.34
1.35 ///Subscripting operator
1.36 @@ -138,7 +135,7 @@
1.37 return b+=u;
1.38 }
1.39
1.40 - ///Return the neg of the vectors
1.41 + ///Return the negative of the vector
1.42 Point<T> operator-() const {
1.43 Point<T> b=*this;
1.44 b.x=-b.x; b.y=-b.y;
1.45 @@ -175,9 +172,9 @@
1.46
1.47 };
1.48
1.49 - ///Return an Point
1.50 + ///Return a Point
1.51
1.52 - ///Return an Point
1.53 + ///Return a Point.
1.54 ///\relates Point
1.55 template <typename T>
1.56 inline Point<T> makePoint(const T& x, const T& y) {
1.57 @@ -186,7 +183,7 @@
1.58
1.59 ///Return a vector multiplied by a scalar
1.60
1.61 - ///Return a vector multiplied by a scalar
1.62 + ///Return a vector multiplied by a scalar.
1.63 ///\relates Point
1.64 template<typename T> Point<T> operator*(const T &u,const Point<T> &x) {
1.65 return x*u;
1.66 @@ -194,7 +191,7 @@
1.67
1.68 ///Read a plainvector from a stream
1.69
1.70 - ///Read a plainvector from a stream
1.71 + ///Read a plainvector from a stream.
1.72 ///\relates Point
1.73 ///
1.74 template<typename T>
1.75 @@ -222,7 +219,7 @@
1.76
1.77 ///Write a plainvector to a stream
1.78
1.79 - ///Write a plainvector to a stream
1.80 + ///Write a plainvector to a stream.
1.81 ///\relates Point
1.82 ///
1.83 template<typename T>
1.84 @@ -234,7 +231,7 @@
1.85
1.86 ///Rotate by 90 degrees
1.87
1.88 - ///Returns its parameter rotated by 90 degrees in positive direction.
1.89 + ///Returns the parameter rotated by 90 degrees in positive direction.
1.90 ///\relates Point
1.91 ///
1.92 template<typename T>
1.93 @@ -245,7 +242,7 @@
1.94
1.95 ///Rotate by 180 degrees
1.96
1.97 - ///Returns its parameter rotated by 180 degrees.
1.98 + ///Returns the parameter rotated by 180 degrees.
1.99 ///\relates Point
1.100 ///
1.101 template<typename T>
1.102 @@ -256,7 +253,7 @@
1.103
1.104 ///Rotate by 270 degrees
1.105
1.106 - ///Returns its parameter rotated by 90 degrees in negative direction.
1.107 + ///Returns the parameter rotated by 90 degrees in negative direction.
1.108 ///\relates Point
1.109 ///
1.110 template<typename T>
1.111 @@ -271,7 +268,6 @@
1.112
1.113 /// A class to calculate or store the bounding box of plainvectors.
1.114 ///
1.115 - ///\author Attila Bernath
1.116 template<typename T>
1.117 class BoundingBox {
1.118 Point<T> bottom_left, top_right;
1.119 @@ -286,9 +282,11 @@
1.120
1.121 ///Construct an instance from two points
1.122
1.123 - ///Construct an instance from two points
1.124 - ///\warning The coordinates of the bottom-left corner must be no more
1.125 - ///than those of the top-right one
1.126 + ///Construct an instance from two points.
1.127 + ///\param a The bottom left corner.
1.128 + ///\param b The top right corner.
1.129 + ///\warning The coordinates of the bottom left corner must be no more
1.130 + ///than those of the top right one.
1.131 BoundingBox(Point<T> a,Point<T> b)
1.132 {
1.133 bottom_left=a;
1.134 @@ -298,9 +296,13 @@
1.135
1.136 ///Construct an instance from four numbers
1.137
1.138 - ///Construct an instance from four numbers
1.139 - ///\warning The coordinates of the bottom-left corner must be no more
1.140 - ///than those of the top-right one
1.141 + ///Construct an instance from four numbers.
1.142 + ///\param l The left side of the box.
1.143 + ///\param b The bottom of the box.
1.144 + ///\param r The right side of the box.
1.145 + ///\param t The top of the box.
1.146 + ///\warning The left side must be no more than the right side and
1.147 + ///bottom must be no more than the top.
1.148 BoundingBox(T l,T b,T r,T t)
1.149 {
1.150 bottom_left=Point<T>(l,b);
1.151 @@ -308,7 +310,12 @@
1.152 _empty = false;
1.153 }
1.154
1.155 - ///Were any points added?
1.156 + ///Return \c true if the bounding box is empty.
1.157 +
1.158 + ///Return \c true if the bounding box is empty (i.e. return \c false
1.159 + ///if at least one point was added to the box or the coordinates of
1.160 + ///the box were set).
1.161 + ///The coordinates of an empty bounding box are not defined.
1.162 bool empty() const {
1.163 return _empty;
1.164 }
1.165 @@ -329,7 +336,7 @@
1.166 ///Set the bottom left corner
1.167
1.168 ///Set the bottom left corner.
1.169 - ///It should only bee used for non-empty box.
1.170 + ///It should only be used for non-empty box.
1.171 void bottomLeft(Point<T> p) {
1.172 bottom_left = p;
1.173 }
1.174 @@ -345,7 +352,7 @@
1.175 ///Set the top right corner
1.176
1.177 ///Set the top right corner.
1.178 - ///It should only bee used for non-empty box.
1.179 + ///It should only be used for non-empty box.
1.180 void topRight(Point<T> p) {
1.181 top_right = p;
1.182 }
1.183 @@ -361,7 +368,7 @@
1.184 ///Set the bottom right corner
1.185
1.186 ///Set the bottom right corner.
1.187 - ///It should only bee used for non-empty box.
1.188 + ///It should only be used for non-empty box.
1.189 void bottomRight(Point<T> p) {
1.190 top_right.x = p.x;
1.191 bottom_left.y = p.y;
1.192 @@ -378,7 +385,7 @@
1.193 ///Set the top left corner
1.194
1.195 ///Set the top left corner.
1.196 - ///It should only bee used for non-empty box.
1.197 + ///It should only be used for non-empty box.
1.198 void topLeft(Point<T> p) {
1.199 top_right.y = p.y;
1.200 bottom_left.x = p.x;
1.201 @@ -395,7 +402,7 @@
1.202 ///Set the bottom of the box
1.203
1.204 ///Set the bottom of the box.
1.205 - ///It should only bee used for non-empty box.
1.206 + ///It should only be used for non-empty box.
1.207 void bottom(T t) {
1.208 bottom_left.y = t;
1.209 }
1.210 @@ -411,7 +418,7 @@
1.211 ///Set the top of the box
1.212
1.213 ///Set the top of the box.
1.214 - ///It should only bee used for non-empty box.
1.215 + ///It should only be used for non-empty box.
1.216 void top(T t) {
1.217 top_right.y = t;
1.218 }
1.219 @@ -427,7 +434,7 @@
1.220 ///Set the left side of the box
1.221
1.222 ///Set the left side of the box.
1.223 - ///It should only bee used for non-empty box
1.224 + ///It should only be used for non-empty box.
1.225 void left(T t) {
1.226 bottom_left.x = t;
1.227 }
1.228 @@ -443,7 +450,7 @@
1.229 ///Set the right side of the box
1.230
1.231 ///Set the right side of the box.
1.232 - ///It should only bee used for non-empty box
1.233 + ///It should only be used for non-empty box.
1.234 void right(T t) {
1.235 top_right.x = t;
1.236 }
1.237 @@ -465,7 +472,7 @@
1.238 }
1.239
1.240 ///Checks whether a point is inside a bounding box
1.241 - bool inside(const Point<T>& u){
1.242 + bool inside(const Point<T>& u) const {
1.243 if (_empty)
1.244 return false;
1.245 else{
1.246 @@ -475,6 +482,9 @@
1.247 }
1.248
1.249 ///Increments a bounding box with a point
1.250 +
1.251 + ///Increments a bounding box with a point.
1.252 + ///
1.253 BoundingBox& add(const Point<T>& u){
1.254 if (_empty){
1.255 bottom_left=top_right=u;
1.256 @@ -489,7 +499,10 @@
1.257 return *this;
1.258 }
1.259
1.260 - ///Increments a bounding to contain another bounding box
1.261 + ///Increments a bounding box to contain another bounding box
1.262 +
1.263 + ///Increments a bounding box to contain another bounding box.
1.264 + ///
1.265 BoundingBox& add(const BoundingBox &u){
1.266 if ( !u.empty() ){
1.267 this->add(u.bottomLeft());
1.268 @@ -499,24 +512,31 @@
1.269 }
1.270
1.271 ///Intersection of two bounding boxes
1.272 - BoundingBox operator &(const BoundingBox& u){
1.273 +
1.274 + ///Intersection of two bounding boxes.
1.275 + ///
1.276 + BoundingBox operator&(const BoundingBox& u) const {
1.277 BoundingBox b;
1.278 - b.bottom_left.x=std::max(this->bottom_left.x,u.bottom_left.x);
1.279 - b.bottom_left.y=std::max(this->bottom_left.y,u.bottom_left.y);
1.280 - b.top_right.x=std::min(this->top_right.x,u.top_right.x);
1.281 - b.top_right.y=std::min(this->top_right.y,u.top_right.y);
1.282 - b._empty = this->_empty || u._empty ||
1.283 - b.bottom_left.x>top_right.x && b.bottom_left.y>top_right.y;
1.284 + if (this->_empty || u._empty) {
1.285 + b._empty = true;
1.286 + } else {
1.287 + b.bottom_left.x = std::max(this->bottom_left.x,u.bottom_left.x);
1.288 + b.bottom_left.y = std::max(this->bottom_left.y,u.bottom_left.y);
1.289 + b.top_right.x = std::min(this->top_right.x,u.top_right.x);
1.290 + b.top_right.y = std::min(this->top_right.y,u.top_right.y);
1.291 + b._empty = b.bottom_left.x > b.top_right.x ||
1.292 + b.bottom_left.y > b.top_right.y;
1.293 + }
1.294 return b;
1.295 }
1.296
1.297 };//class Boundingbox
1.298
1.299
1.300 - ///Map of x-coordinates of a dim2::Point<>-map
1.301 + ///Map of x-coordinates of a \ref Point "Point"-map
1.302
1.303 ///\ingroup maps
1.304 - ///Map of x-coordinates of a dim2::Point<>-map
1.305 + ///Map of x-coordinates of a \ref Point "Point"-map.
1.306 ///
1.307 template<class M>
1.308 class XMap
1.309 @@ -570,7 +590,7 @@
1.310
1.311 ///Returns a \ref ConstXMap class
1.312
1.313 - ///This function just returns an \ref ConstXMap class.
1.314 + ///This function just returns a \ref ConstXMap class.
1.315 ///
1.316 ///\ingroup maps
1.317 ///\relates ConstXMap
1.318 @@ -580,10 +600,10 @@
1.319 return ConstXMap<M>(m);
1.320 }
1.321
1.322 - ///Map of y-coordinates of a dim2::Point<>-map
1.323 + ///Map of y-coordinates of a \ref Point "Point"-map
1.324
1.325 ///\ingroup maps
1.326 - ///Map of y-coordinates of a dim2::Point<>-map
1.327 + ///Map of y-coordinates of a \ref Point "Point"-map.
1.328 ///
1.329 template<class M>
1.330 class YMap
1.331 @@ -599,9 +619,9 @@
1.332 void set(Key k,Value v) {_map.set(k,typename M::Value(_map[k].x,v));}
1.333 };
1.334
1.335 - ///Returns an \ref YMap class
1.336 + ///Returns a \ref YMap class
1.337
1.338 - ///This function just returns an \ref YMap class.
1.339 + ///This function just returns a \ref YMap class.
1.340 ///
1.341 ///\ingroup maps
1.342 ///\relates YMap
1.343 @@ -637,7 +657,7 @@
1.344
1.345 ///Returns a \ref ConstYMap class
1.346
1.347 - ///This function just returns an \ref ConstYMap class.
1.348 + ///This function just returns a \ref ConstYMap class.
1.349 ///
1.350 ///\ingroup maps
1.351 ///\relates ConstYMap
1.352 @@ -649,10 +669,10 @@
1.353
1.354
1.355 ///\brief Map of the \ref Point::normSquare() "normSquare()"
1.356 - ///of an \ref Point "Point"-map
1.357 + ///of a \ref Point "Point"-map
1.358 ///
1.359 ///Map of the \ref Point::normSquare() "normSquare()"
1.360 - ///of an \ref Point "Point"-map
1.361 + ///of a \ref Point "Point"-map.
1.362 ///\ingroup maps
1.363 ///
1.364 template<class M>
1.365 @@ -670,7 +690,7 @@
1.366
1.367 ///Returns a \ref NormSquareMap class
1.368
1.369 - ///This function just returns an \ref NormSquareMap class.
1.370 + ///This function just returns a \ref NormSquareMap class.
1.371 ///
1.372 ///\ingroup maps
1.373 ///\relates NormSquareMap