COIN-OR::LEMON - Graph Library

Ticket #363: lemon_rev981_873b8d0104e7.patch

File lemon_rev981_873b8d0104e7.patch, 4.4 KB (added by gyorokp, 10 years ago)
  • lemon/planar_graph.h

    # HG changeset patch
    # User gyorokp
    # Date 1270891385 -7200
    # Node ID 873b8d0104e73ab66cacb90ff7e6e2de6122eb81
    # Parent  c8e6952a00ebefcb7d775719f45101faebf81ea4
    Rewrote CommonNodesIt and CommonFacesIt using std::set (#363)
    
    diff -r c8e6952a00eb -r 873b8d0104e7 lemon/planar_graph.h
    a b  
    3030
    3131#include <vector>
    3232#include <list>
     33#include <set>
    3334
    3435#ifdef REMOVE_BEFORE_RELEASE
    3536#include <iostream>
     
    12831284  class CommonFacesIt : public Face {
    12841285      const Graph* _graph;
    12851286      const Node _n1, _n2;
    1286       Arc _i1, _i2;
     1287      Arc _i2;
     1288      std::set<Face> _f1;
    12871289    public:
    12881290
    12891291      CommonFacesIt() {}
     
    12911293      CommonFacesIt(Invalid i) : Face(i) { }
    12921294
    12931295      explicit CommonFacesIt(const Graph& graph, Node n1, Node n2) : _graph(
    1294         &graph), _n1(n1), _n2(n2), _i1(), _i2(){
     1296        &graph), _n1(n1), _n2(n2), _i2(), _f1(){
     1297        Arc _i1;
    12951298        _graph->firstOut(_i1,_n1);
     1299        while (_i1 != INVALID) {
     1300          _f1.insert(_graph->leftFace(_i1));
     1301          _graph->nextOut(_i1);
     1302        }
    12961303        _graph->firstOut(_i2,_n2);
    1297         while (_i1 != INVALID && _graph->leftFace(_i1) != _graph->leftFace(_i2))
    1298         {
     1304        _graph->firstOut(_i2,_n2);
     1305        while (_i2 != INVALID && _f1.count(_graph->leftFace(_i2)) == 0)
    12991306          _graph->nextOut(_i2);
    1300           if (_i2 == INVALID) {
    1301             _graph->nextOut(_i1);
    1302             _graph->firstOut(_i2,_n2);
    1303           }
    1304         }
    1305         static_cast<Face&>(*this) = (_i1 != INVALID)?_graph->leftFace(_i1):
     1307        static_cast<Face&>(*this) = (_i2 != INVALID)?_graph->leftFace(_i2):
    13061308          INVALID;
    13071309      }
    13081310
    13091311      CommonFacesIt& operator++() {
    13101312        _graph->nextOut(_i2);
    1311         if (_i2 == INVALID) {
    1312           _graph->nextOut(_i1);
    1313           _graph->firstOut(_i2,_n2);
    1314         }
    1315         while (_i1 != INVALID && _graph->leftFace(_i1) != _graph->leftFace(_i2))
    1316         {
     1313        while (_i2 != INVALID && _f1.count(_graph->leftFace(_i2)) == 0)
    13171314          _graph->nextOut(_i2);
    1318           if (_i2 == INVALID) {
    1319             _graph->nextOut(_i1);
    1320             _graph->firstOut(_i2,_n2);
    1321           }
    1322         }
    1323         static_cast<Face&>(*this) = (_i1 != INVALID)?_graph->leftFace(_i1):
     1315        static_cast<Face&>(*this) = (_i2 != INVALID)?_graph->leftFace(_i2):
    13241316          INVALID;
    13251317        return *this;
    13261318      }
     
    13331325  class CommonNodesIt : public Node {
    13341326      const Graph* _graph;
    13351327      const Face _f1, _f2;
    1336       Arc _i1, _i2;
     1328      Arc _i2;
     1329      std::set<Node> _ns;
    13371330    public:
    13381331
    13391332      CommonNodesIt() {}
     
    13411334      CommonNodesIt(Invalid i) : Face(i) { }
    13421335
    13431336      explicit CommonNodesIt(const Graph& graph, Face f1, Face f2) : _graph(
    1344         &graph), _f1(f1), _f2(f2), _i1(), _i2(){
     1337        &graph), _f1(f1), _f2(f2), _i2(), _ns(){
     1338        Arc _i1;
    13451339        _graph->firstCwF(_i1,_f1);
     1340        while (_i1 != INVALID) {
     1341          _ns.insert(_graph->source(_i1));
     1342          _graph->nextCwF(_i1);
     1343        }
     1344
    13461345        _graph->firstCwF(_i2,_f2);
    1347         while (_i1 != INVALID && _graph->source(_i1) != _graph->source(_i2))
    1348         {
     1346        while (_i2 != INVALID && _ns.count(_graph->source(_i2)) == 0)
    13491347          _graph->nextCwF(_i2);
    1350           if (_i2 == INVALID) {
    1351             _graph->nextCwF(_i1);
    1352             _graph->firstCwF(_i2,_f2);
    1353           }
    1354         }
    1355         static_cast<Node&>(*this) = (_i1 != INVALID)?_graph->source(_i1):
     1348        static_cast<Node&>(*this) = (_i2 != INVALID)?_graph->source(_i2):
    13561349          INVALID;
    13571350      }
    13581351
    13591352      CommonNodesIt& operator++() {
    13601353        _graph->nextCwF(_i2);
    1361         if (_i2 == INVALID) {
    1362           _graph->nextCwF(_i1);
    1363           _graph->firstCwF(_i2,_f2);
    1364         }
    1365         while (_i1 != INVALID && _graph->source(_i1) != _graph->source(_i2))
    1366         {
     1354        while (_i2 != INVALID && _ns.count(_graph->source(_i2)) == 0)
    13671355          _graph->nextCwF(_i2);
    1368           if (_i2 == INVALID) {
    1369             _graph->nextCwF(_i1);
    1370             _graph->firstCwF(_i2,_f2);
    1371           }
    1372         }
    1373         static_cast<Node&>(*this) = (_i1 != INVALID)?_graph->source(_i1):
     1356        static_cast<Node&>(*this) = (_i2 != INVALID)?_graph->source(_i2):
    13741357          INVALID;
    13751358        return *this;
    13761359      }