Changes in / [257:8d76a7bf9961:258:0310c8984732] in lemon
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/bfs.h
r257 r258 1262 1262 /// the member functions of the \c Visitor class on every BFS event. 1263 1263 /// 1264 /// This interface of the BFS algorithm should be used in special cases 1265 /// when extra actions have to be performed in connection with certain 1266 /// events of the BFS algorithm. Otherwise consider to use Bfs or bfs() 1267 /// instead. 1268 /// 1264 1269 /// \tparam _Digraph The type of the digraph the algorithm runs on. 1265 1270 /// The default value is -
lemon/bits/base_extender.h
r220 r256 60 60 Arc() {} 61 61 62 // /Invalid arc constructor62 // Invalid arc constructor 63 63 Arc(Invalid i) : Edge(i), forward(true) {} 64 64 … … 75 75 }; 76 76 77 78 79 using Parent::source; 80 81 /// Source of the given Arc. 77 /// First node of the edge 78 Node u(const Edge &e) const { 79 return Parent::source(e); 80 } 81 82 /// Source of the given arc 82 83 Node source(const Arc &e) const { 83 84 return e.forward ? Parent::source(e) : Parent::target(e); 84 85 } 85 86 86 using Parent::target; 87 88 /// Target of the given Arc. 87 /// Second node of the edge 88 Node v(const Edge &e) const { 89 return Parent::target(e); 90 } 91 92 /// Target of the given arc 89 93 Node target(const Arc &e) const { 90 94 return e.forward ? Parent::target(e) : Parent::source(e); … … 93 97 /// \brief Directed arc from an edge. 94 98 /// 95 /// Returns a directed arc corresponding to the specified Edge.96 /// If the given bool is true the given edge and the97 /// returned arc have the same source node.98 static Arc direct(const Edge & ue, bool d) {99 return Arc( ue, d);100 } 101 102 /// Returns whether the given directed arc is same orientation as the103 /// corresponding edge.99 /// Returns a directed arc corresponding to the specified edge. 100 /// If the given bool is true, the first node of the given edge and 101 /// the source node of the returned arc are the same. 102 static Arc direct(const Edge &e, bool d) { 103 return Arc(e, d); 104 } 105 106 /// Returns whether the given directed arc has the same orientation 107 /// as the corresponding edge. 104 108 /// 105 109 /// \todo reference to the corresponding point of the undirected digraph 106 110 /// concept. "What does the direction of an edge mean?" 107 static bool direction(const Arc &e) { return e.forward; } 108 111 static bool direction(const Arc &a) { return a.forward; } 109 112 110 113 using Parent::first; … … 229 232 return Parent::maxArcId(); 230 233 } 231 232 234 233 235 int arcNum() const { -
lemon/dfs.h
r257 r258 1209 1209 /// the member functions of the \c Visitor class on every DFS event. 1210 1210 /// 1211 /// This interface of the DFS algorithm should be used in special cases 1212 /// when extra actions have to be performed in connection with certain 1213 /// events of the DFS algorithm. Otherwise consider to use Dfs or dfs() 1214 /// instead. 1215 /// 1211 1216 /// \tparam _Digraph The type of the digraph the algorithm runs on. 1212 1217 /// The default value is -
lemon/dijkstra.h
r257 r258 1068 1068 //Pointer to the length map 1069 1069 void *_length; 1070 //Pointer to the map of processed nodes. 1071 void *_processed; 1070 1072 //Pointer to the map of predecessors arcs. 1071 1073 void *_pred; … … 1080 1082 /// This constructor does not require parameters, therefore it initiates 1081 1083 /// all of the attributes to default values (0, INVALID). 1082 DijkstraWizardBase() : _g(0), _length(0), _pr ed(0),1084 DijkstraWizardBase() : _g(0), _length(0), _processed(0), _pred(0), 1083 1085 _dist(0), _source(INVALID) {} 1084 1086 … … 1094 1096 _g(reinterpret_cast<void*>(const_cast<GR*>(&g))), 1095 1097 _length(reinterpret_cast<void*>(const_cast<LM*>(&l))), 1096 _pr ed(0), _dist(0), _source(s) {}1098 _processed(0), _pred(0), _dist(0), _source(s) {} 1097 1099 1098 1100 }; … … 1173 1175 dij(*reinterpret_cast<const Digraph*>(Base::_g), 1174 1176 *reinterpret_cast<const LengthMap*>(Base::_length)); 1175 if(Base::_pred) dij.predMap(*reinterpret_cast<PredMap*>(Base::_pred)); 1176 if(Base::_dist) dij.distMap(*reinterpret_cast<DistMap*>(Base::_dist)); 1177 if(Base::_processed) 1178 dij.processedMap(*reinterpret_cast<ProcessedMap*>(Base::_processed)); 1179 if(Base::_pred) 1180 dij.predMap(*reinterpret_cast<PredMap*>(Base::_pred)); 1181 if(Base::_dist) 1182 dij.distMap(*reinterpret_cast<DistMap*>(Base::_dist)); 1177 1183 dij.run(Base::_source); 1178 1184 } -
lemon/dim2.h
r241 r253 29 29 /// a two dimensional vector with the usual operations. 30 30 /// 31 /// The class \ref lemon::dim2::BoundingBox "dim2::BoundingBox" 32 /// can be used to determine 31 /// The class \ref lemon::dim2::Box "dim2::Box" can be used to determine 33 32 /// the rectangular bounding box of a set of 34 33 /// \ref lemon::dim2::Point "dim2::Point"'s. … … 45 44 /// @{ 46 45 47 /// A simple two dimensional vector (plain vector) implementation46 /// Two dimensional vector (plain vector) 48 47 49 48 /// A simple two dimensional vector (plain vector) implementation … … 222 221 inline std::ostream& operator<<(std::ostream &os, const Point<T>& z) 223 222 { 224 os << "(" << z.x << ", 223 os << "(" << z.x << "," << z.y << ")"; 225 224 return os; 226 225 } … … 261 260 262 261 263 /// A class to calculate or store the bounding box of plain vectors.264 265 /// A class to calculate or store the bounding box of plain vectors.266 ///267 268 class BoundingBox {262 /// Bounding box of plain vectors (\ref Point points). 263 264 /// A class to calculate or store the bounding box of plain vectors 265 /// (\ref Point points). 266 template<typename T> 267 class Box { 269 268 Point<T> _bottom_left, _top_right; 270 269 bool _empty; 271 270 public: 272 271 273 ///Default constructor: creates an empty bo unding box274 Bo undingBox() { _empty = true; }275 276 ///Construct a n instancefrom one point277 Bo undingBox(Point<T> a) {272 ///Default constructor: creates an empty box 273 Box() { _empty = true; } 274 275 ///Construct a box from one point 276 Box(Point<T> a) { 278 277 _bottom_left = _top_right = a; 279 278 _empty = false; 280 279 } 281 280 282 ///Construct a n instancefrom two points283 284 ///Construct a n instancefrom two points.281 ///Construct a box from two points 282 283 ///Construct a box from two points. 285 284 ///\param a The bottom left corner. 286 285 ///\param b The top right corner. 287 286 ///\warning The coordinates of the bottom left corner must be no more 288 287 ///than those of the top right one. 289 Bo undingBox(Point<T> a,Point<T> b)288 Box(Point<T> a,Point<T> b) 290 289 { 291 290 _bottom_left = a; … … 294 293 } 295 294 296 ///Construct a n instancefrom four numbers297 298 ///Construct a n instancefrom four numbers.295 ///Construct a box from four numbers 296 297 ///Construct a box from four numbers. 299 298 ///\param l The left side of the box. 300 299 ///\param b The bottom of the box. … … 303 302 ///\warning The left side must be no more than the right side and 304 303 ///bottom must be no more than the top. 305 Bo undingBox(T l,T b,T r,T t)304 Box(T l,T b,T r,T t) 306 305 { 307 306 _bottom_left=Point<T>(l,b); … … 310 309 } 311 310 312 ///Return \c true if the bo unding box is empty.313 314 ///Return \c true if the bo unding box is empty (i.e. return \c false311 ///Return \c true if the box is empty. 312 313 ///Return \c true if the box is empty (i.e. return \c false 315 314 ///if at least one point was added to the box or the coordinates of 316 315 ///the box were set). 317 316 /// 318 ///The coordinates of an empty bo unding box are not defined.317 ///The coordinates of an empty box are not defined. 319 318 bool empty() const { 320 319 return _empty; 321 320 } 322 321 323 ///Make the BoundingBox empty322 ///Make the box empty 324 323 void clear() { 325 324 _empty = true; … … 329 328 330 329 ///Give back the bottom left corner of the box. 331 ///If the bo unding box is empty, then the return value is not defined.330 ///If the box is empty, then the return value is not defined. 332 331 Point<T> bottomLeft() const { 333 332 return _bottom_left; … … 345 344 346 345 ///Give back the top right corner of the box. 347 ///If the bo unding box is empty, then the return value is not defined.346 ///If the box is empty, then the return value is not defined. 348 347 Point<T> topRight() const { 349 348 return _top_right; … … 361 360 362 361 ///Give back the bottom right corner of the box. 363 ///If the bo unding box is empty, then the return value is not defined.362 ///If the box is empty, then the return value is not defined. 364 363 Point<T> bottomRight() const { 365 364 return Point<T>(_top_right.x,_bottom_left.y); … … 378 377 379 378 ///Give back the top left corner of the box. 380 ///If the bo unding box is empty, then the return value is not defined.379 ///If the box is empty, then the return value is not defined. 381 380 Point<T> topLeft() const { 382 381 return Point<T>(_bottom_left.x,_top_right.y); … … 395 394 396 395 ///Give back the bottom of the box. 397 ///If the bo unding box is empty, then the return value is not defined.396 ///If the box is empty, then the return value is not defined. 398 397 T bottom() const { 399 398 return _bottom_left.y; … … 411 410 412 411 ///Give back the top of the box. 413 ///If the bo unding box is empty, then the return value is not defined.412 ///If the box is empty, then the return value is not defined. 414 413 T top() const { 415 414 return _top_right.y; … … 427 426 428 427 ///Give back the left side of the box. 429 ///If the bo unding box is empty, then the return value is not defined.428 ///If the box is empty, then the return value is not defined. 430 429 T left() const { 431 430 return _bottom_left.x; … … 443 442 444 443 /// Give back the right side of the box. 445 ///If the bo unding box is empty, then the return value is not defined.444 ///If the box is empty, then the return value is not defined. 446 445 T right() const { 447 446 return _top_right.x; … … 459 458 460 459 ///Give back the height of the box. 461 ///If the bo unding box is empty, then the return value is not defined.460 ///If the box is empty, then the return value is not defined. 462 461 T height() const { 463 462 return _top_right.y-_bottom_left.y; … … 467 466 468 467 ///Give back the width of the box. 469 ///If the bo unding box is empty, then the return value is not defined.468 ///If the box is empty, then the return value is not defined. 470 469 T width() const { 471 470 return _top_right.x-_bottom_left.x; 472 471 } 473 472 474 ///Checks whether a point is inside a boundingbox473 ///Checks whether a point is inside the box 475 474 bool inside(const Point<T>& u) const { 476 475 if (_empty) … … 482 481 } 483 482 484 ///Increments a boundingbox with a point485 486 ///Increments a boundingbox with a point.483 ///Increments the box with a point 484 485 ///Increments the box with a point. 487 486 /// 488 Bo undingBox& add(const Point<T>& u){487 Box& add(const Point<T>& u){ 489 488 if (_empty) { 490 489 _bottom_left = _top_right = u; … … 500 499 } 501 500 502 ///Increments a bounding box to contain another boundingbox503 504 ///Increments a bounding box to contain another boundingbox.501 ///Increments the box to contain another box 502 503 ///Increments the box to contain another box. 505 504 /// 506 Bo undingBox& add(const BoundingBox &u){505 Box& add(const Box &u){ 507 506 if ( !u.empty() ){ 508 507 add(u._bottom_left); … … 512 511 } 513 512 514 ///Intersection of two bo unding boxes515 516 ///Intersection of two bo unding boxes.513 ///Intersection of two boxes 514 515 ///Intersection of two boxes. 517 516 /// 518 Bo undingBox operator&(const BoundingBox& u) const {519 Bo undingBox b;517 Box operator&(const Box& u) const { 518 Box b; 520 519 if (_empty || u._empty) { 521 520 b._empty = true; … … 531 530 } 532 531 533 };//class Boundingbox 534 532 };//class Box 533 534 535 ///Read a box from a stream 536 537 ///Read a box from a stream. 538 ///\relates Box 539 template<typename T> 540 inline std::istream& operator>>(std::istream &is, Box<T>& b) { 541 char c; 542 Point<T> p; 543 if (is >> c) { 544 if (c != '(') is.putback(c); 545 } else { 546 is.clear(); 547 } 548 if (!(is >> p)) return is; 549 b.bottomLeft(p); 550 if (is >> c) { 551 if (c != ',') is.putback(c); 552 } else { 553 is.clear(); 554 } 555 if (!(is >> p)) return is; 556 b.topRight(p); 557 if (is >> c) { 558 if (c != ')') is.putback(c); 559 } else { 560 is.clear(); 561 } 562 return is; 563 } 564 565 ///Write a box to a stream 566 567 ///Write a box to a stream. 568 ///\relates Box 569 template<typename T> 570 inline std::ostream& operator<<(std::ostream &os, const Box<T>& b) 571 { 572 os << "(" << b.bottomLeft() << "," << b.topRight() << ")"; 573 return os; 574 } 535 575 536 576 ///Map of x-coordinates of a \ref Point "Point"-map -
lemon/graph_to_eps.h
r220 r253 726 726 double diag_len = 1; 727 727 if(!(_absoluteNodeSizes&&_absoluteArcWidths)) { 728 dim2::Bo undingBox<double> bb;728 dim2::Box<double> bb; 729 729 for(NodeIt n(g);n!=INVALID;++n) bb.add(mycoords[n]); 730 730 if (bb.empty()) { 731 bb = dim2::Bo undingBox<double>(dim2::Point<double>(0,0));731 bb = dim2::Box<double>(dim2::Point<double>(0,0)); 732 732 } 733 733 diag_len = std::sqrt((bb.bottomLeft()-bb.topRight()).normSquare()); … … 737 737 } 738 738 739 dim2::Bo undingBox<double> bb;739 dim2::Box<double> bb; 740 740 for(NodeIt n(g);n!=INVALID;++n) { 741 741 double ns=_nodeSizes[n]*_nodeScale; … … 759 759 } 760 760 if (bb.empty()) { 761 bb = dim2::Bo undingBox<double>(dim2::Point<double>(0,0));761 bb = dim2::Box<double>(dim2::Point<double>(0,0)); 762 762 } 763 763 -
test/dim_test.cc
r242 r253 51 51 check(p.x==1 && p.y==2, "Wrong dim2::Point division by a scalar."); 52 52 53 typedef dim2::Bo undingBox<int> BB;54 B Bbox1;55 check(box1.empty(), "Wrong empty() in dim2::Bo undingBox.");53 typedef dim2::Box<int> Box; 54 Box box1; 55 check(box1.empty(), "Wrong empty() in dim2::Box."); 56 56 57 57 box1.add(a); 58 check(!box1.empty(), "Wrong empty() in dim2::Bo undingBox.");58 check(!box1.empty(), "Wrong empty() in dim2::Box."); 59 59 box1.add(b); 60 60 61 61 check(box1.left()==1 && box1.bottom()==2 && 62 62 box1.right()==3 && box1.top()==4, 63 "Wrong addition of points to dim2::Bo undingBox.");63 "Wrong addition of points to dim2::Box."); 64 64 65 check(box1.inside(Point(2,3)), "Wrong inside() in dim2::Bo undingBox.");66 check(box1.inside(Point(1,3)), "Wrong inside() in dim2::Bo undingBox.");67 check(!box1.inside(Point(0,3)), "Wrong inside() in dim2::Bo undingBox.");65 check(box1.inside(Point(2,3)), "Wrong inside() in dim2::Box."); 66 check(box1.inside(Point(1,3)), "Wrong inside() in dim2::Box."); 67 check(!box1.inside(Point(0,3)), "Wrong inside() in dim2::Box."); 68 68 69 B Bbox2(Point(2,2));70 check(!box2.empty(), "Wrong empty() in dim2::Bo undingBox.");71 69 Box box2(Point(2,2)); 70 check(!box2.empty(), "Wrong empty() in dim2::Box."); 71 72 72 box2.bottomLeft(Point(2,0)); 73 73 box2.topRight(Point(5,3)); 74 B Bbox3 = box1 & box2;74 Box box3 = box1 & box2; 75 75 check(!box3.empty() && 76 box3.left()==2 && box3.bottom()==2 && 76 box3.left()==2 && box3.bottom()==2 && 77 77 box3.right()==3 && box3.top()==3, 78 "Wrong intersection of two dim2::Bo undingBox objects.");79 78 "Wrong intersection of two dim2::Box objects."); 79 80 80 box1.add(box2); 81 81 check(!box1.empty() && 82 82 box1.left()==1 && box1.bottom()==0 && 83 83 box1.right()==5 && box1.top()==4, 84 "Wrong addition of two dim2::Bo undingBox objects.");84 "Wrong addition of two dim2::Box objects."); 85 85 86 86 return 0;
Note: See TracChangeset
for help on using the changeset viewer.