Changeset 774:f4b5c2d5449d in lemon-main
- Timestamp:
- 08/25/09 13:58:43 (15 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/static_graph.h
r773 r774 33 33 34 34 StaticDigraphBase() 35 : node_num(-1), arc_num(0),35 : built(false), node_num(0), arc_num(0), 36 36 node_first_out(NULL), node_first_in(NULL), 37 37 arc_source(NULL), arc_target(NULL), … … 39 39 40 40 ~StaticDigraphBase() { 41 if ( node_num != -1) {41 if (built) { 42 42 delete[] node_first_out; 43 43 delete[] node_first_in; … … 129 129 typedef True BuildTag; 130 130 131 template <typename Digraph, typename NodeRefMap, typename ArcRefMap> 132 void build(const Digraph& digraph, NodeRefMap& nodeRef, ArcRefMap& arcRef) { 133 134 if (node_num != -1) { 131 void clear() { 132 if (built) { 135 133 delete[] node_first_out; 136 134 delete[] node_first_in; … … 140 138 delete[] arc_next_in; 141 139 } 142 140 built = false; 141 node_num = 0; 142 arc_num = 0; 143 } 144 145 template <typename Digraph, typename NodeRefMap, typename ArcRefMap> 146 void build(const Digraph& digraph, NodeRefMap& nodeRef, ArcRefMap& arcRef) { 143 147 typedef typename Digraph::Node GNode; 144 148 typedef typename Digraph::Arc GArc; 149 150 built = true; 145 151 146 152 node_num = countNodes(digraph); … … 206 212 } 207 213 208 private: 214 protected: 215 bool built; 209 216 int node_num; 210 217 int arc_num; … … 224 231 225 232 typedef ExtendedStaticDigraphBase Parent; 233 234 public: 235 236 template <typename Digraph, typename NodeRefMap, typename ArcRefMap> 237 void build(const Digraph& digraph, NodeRefMap& nodeRef, ArcRefMap& arcRef) { 238 if (built) Parent::clear(); 239 Parent::build(digraph, nodeRef, arcRef); 240 } 241 226 242 227 243 protected: … … 262 278 }; 263 279 280 Node baseNode(const OutArcIt &arc) const { 281 return Parent::source(static_cast<const Arc&>(arc)); 282 } 283 284 Node runningNode(const OutArcIt &arc) const { 285 return Parent::target(static_cast<const Arc&>(arc)); 286 } 287 288 Node baseNode(const InArcIt &arc) const { 289 return Parent::target(static_cast<const Arc&>(arc)); 290 } 291 292 Node runningNode(const InArcIt &arc) const { 293 return Parent::source(static_cast<const Arc&>(arc)); 294 } 295 264 296 }; 265 297 -
test/digraph_test.cc
r440 r774 20 20 #include <lemon/list_graph.h> 21 21 #include <lemon/smart_graph.h> 22 #include <lemon/static_graph.h> 22 23 #include <lemon/full_graph.h> 23 24 … … 318 319 checkConcept<ClearableDigraphComponent<>, SmartDigraph>(); 319 320 } 321 { // Checking StaticDigraph 322 checkConcept<Digraph, StaticDigraph>(); 323 checkConcept<ClearableDigraphComponent<>, StaticDigraph>(); 324 } 320 325 { // Checking FullDigraph 321 326 checkConcept<Digraph, FullDigraph>(); … … 371 376 check(!g.valid(g.nodeFromId(-1)), "Wrong validity check"); 372 377 check(!g.valid(g.arcFromId(-1)), "Wrong validity check"); 378 } 379 380 void checkStaticDigraph() { 381 SmartDigraph g; 382 SmartDigraph::NodeMap<StaticDigraph::Node> nref(g); 383 SmartDigraph::ArcMap<StaticDigraph::Arc> aref(g); 384 385 StaticDigraph G; 386 387 checkGraphNodeList(G, 0); 388 checkGraphArcList(G, 0); 389 390 G.build(g, nref, aref); 391 392 checkGraphNodeList(G, 0); 393 checkGraphArcList(G, 0); 394 395 SmartDigraph::Node 396 n1 = g.addNode(), 397 n2 = g.addNode(), 398 n3 = g.addNode(); 399 400 G.build(g, nref, aref); 401 402 checkGraphNodeList(G, 3); 403 checkGraphArcList(G, 0); 404 405 SmartDigraph::Arc a1 = g.addArc(n1, n2); 406 407 G.build(g, nref, aref); 408 409 check(G.source(aref[a1]) == nref[n1] && G.target(aref[a1]) == nref[n2], 410 "Wrong arc or wrong references"); 411 checkGraphNodeList(G, 3); 412 checkGraphArcList(G, 1); 413 414 checkGraphOutArcList(G, nref[n1], 1); 415 checkGraphOutArcList(G, nref[n2], 0); 416 checkGraphOutArcList(G, nref[n3], 0); 417 418 checkGraphInArcList(G, nref[n1], 0); 419 checkGraphInArcList(G, nref[n2], 1); 420 checkGraphInArcList(G, nref[n3], 0); 421 422 checkGraphConArcList(G, 1); 423 424 SmartDigraph::Arc 425 a2 = g.addArc(n2, n1), 426 a3 = g.addArc(n2, n3), 427 a4 = g.addArc(n2, n3); 428 429 digraphCopy(g, G).nodeRef(nref).run(); 430 431 checkGraphNodeList(G, 3); 432 checkGraphArcList(G, 4); 433 434 checkGraphOutArcList(G, nref[n1], 1); 435 checkGraphOutArcList(G, nref[n2], 3); 436 checkGraphOutArcList(G, nref[n3], 0); 437 438 checkGraphInArcList(G, nref[n1], 1); 439 checkGraphInArcList(G, nref[n2], 1); 440 checkGraphInArcList(G, nref[n3], 2); 441 442 checkGraphConArcList(G, 4); 443 444 checkNodeIds(G); 445 checkArcIds(G); 446 checkGraphNodeMap(G); 447 checkGraphArcMap(G); 373 448 } 374 449 … … 420 495 checkDigraphValidity<SmartDigraph>(); 421 496 } 497 { // Checking StaticDigraph 498 checkStaticDigraph(); 499 } 422 500 { // Checking FullDigraph 423 501 checkFullDigraph(8);
Note: See TracChangeset
for help on using the changeset viewer.