COIN-OR::LEMON - Graph Library

Changeset 821:f4b5c2d5449d in lemon for lemon/static_graph.h


Ignore:
Timestamp:
08/25/09 13:58:43 (15 years ago)
Author:
Peter Kovacs <kpeter@…>
Branch:
default
Phase:
public
Message:

Small improvements + add tests for StaticDigraph? (#68)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lemon/static_graph.h

    r820 r821  
    3333
    3434    StaticDigraphBase()
    35       : node_num(-1), arc_num(0),
     35      : built(false), node_num(0), arc_num(0),
    3636        node_first_out(NULL), node_first_in(NULL),
    3737        arc_source(NULL), arc_target(NULL),
     
    3939   
    4040    ~StaticDigraphBase() {
    41       if (node_num != -1) {
     41      if (built) {
    4242        delete[] node_first_out;
    4343        delete[] node_first_in;
     
    129129    typedef True BuildTag;
    130130   
    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) {
    135133        delete[] node_first_out;
    136134        delete[] node_first_in;
     
    140138        delete[] arc_next_in;
    141139      }
    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) {
    143147      typedef typename Digraph::Node GNode;
    144148      typedef typename Digraph::Arc GArc;
     149
     150      built = true;
    145151
    146152      node_num = countNodes(digraph);
     
    206212    }
    207213
    208   private:
     214  protected:
     215    bool built;
    209216    int node_num;
    210217    int arc_num;
     
    224231
    225232    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 
    226242
    227243  protected:
     
    262278    };
    263279
     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
    264296  };
    265297
Note: See TracChangeset for help on using the changeset viewer.