src/work/alpar/emptygraph.h
author alpar
Tue, 03 Feb 2004 12:41:29 +0000
changeset 52 a4fc9c5dcee5
child 53 cc5eb73a3a93
permissions -rw-r--r--
An empty Graph class.
alpar@52
     1
// -*-mode: c++; -*-
alpar@52
     2
alpar@52
     3
template <class N, class E>
alpar@52
     4
class Graph
alpar@52
     5
{
alpar@52
     6
public:
alpar@52
     7
  typedef E EdgeType;
alpar@52
     8
  typedef N NodeType;
alpar@52
     9
  
alpar@52
    10
  class EdgeIt {};
alpar@52
    11
  
alpar@52
    12
  class InEdgeIt : public EdgeIt
alpar@52
    13
  class OutEdgeIt : public EdgeIt {};
alpar@52
    14
  class SymEdgeIt : public EdgeIt {};
alpar@52
    15
  class EachEdgeIt : public EdgeIt {};
alpar@52
    16
alpar@52
    17
  class NodeIt {};
alpar@52
    18
    
alpar@52
    19
  NodeIt &getFirst(NodeIt &);
alpar@52
    20
  InEdgeIt &getFirst(InEdgeIt &,const NodeIt &);
alpar@52
    21
  OutEdgeIt &getFirst(OutEdgeIt &,const NodeIt &);
alpar@52
    22
  SymEdgeIt &getFirst(SymEdgeIt &,const NodeIt &);
alpar@52
    23
  EachEdgeIt &getFirst(EachEdgeIt &);
alpar@52
    24
alpar@52
    25
  NodeIt next(const NodeIt &);
alpar@52
    26
  InEdgeIt next(const InEdgeIt &);
alpar@52
    27
  OutEdgeIt next(const OutEdgeIt &);
alpar@52
    28
  SymEdgeIt next(const SymEdgeIt &);
alpar@52
    29
  EachEdgeIt next(const EachEdgeIt &);
alpar@52
    30
alpar@52
    31
  NodeIt &goNext(const NodeIt &);
alpar@52
    32
  InEdgeIt &goNext(const InEdgeIt &);
alpar@52
    33
  OutEdgeIt &goNext(const OutEdgeIt &);
alpar@52
    34
  SymEdgeIt &goNext(const SymEdgeIt &);
alpar@52
    35
  EachEdgeIt &goNext(const EachEdgeIt &);
alpar@52
    36
alpar@52
    37
  bool valid(const NodeIt &n);
alpar@52
    38
  bool valid(const EdgeIt &n);
alpar@52
    39
alpar@52
    40
  void setInvalid(const NodeIt &n);
alpar@52
    41
  void setInvalid(const EdgeIt &n);
alpar@52
    42
  
alpar@52
    43
  NodeIt addNode();
alpar@52
    44
  EdgeIt addEdge(const NodeIt from,const NodeIt to);
alpar@52
    45
    
alpar@52
    46
  void delete(NodeIt n);
alpar@52
    47
  void delete(EdgeIt e);
alpar@52
    48
alpar@52
    49
  void clean();
alpar@52
    50
alpar@52
    51
  template<class T> class NodeMap
alpar@52
    52
  {
alpar@52
    53
  public:
alpar@52
    54
    typedef T value_type;
alpar@52
    55
    void set(const NodeIt i, const T &t);
alpar@52
    56
    T get(const NodeIt i) const;
alpar@52
    57
    T operator[](const NodeIt i);
alpar@52
    58
      
alpar@52
    59
    NodeMap(const Graph &G);
alpar@52
    60
  };
alpar@52
    61
alpar@52
    62
  template<class T> class EdgeMap
alpar@52
    63
  {
alpar@52
    64
  public:
alpar@52
    65
    typedef T value_type;
alpar@52
    66
    void set(const EdgeIt i, const T &t);
alpar@52
    67
    T get(const EdgeIt i) const;
alpar@52
    68
    T operator[](const EdgeIt i);
alpar@52
    69
      
alpar@52
    70
    EdgeMap(const Graph &G);
alpar@52
    71
  };
alpar@52
    72
};