author | alpar |
Tue, 03 Feb 2004 12:41:29 +0000 | |
changeset 52 | a4fc9c5dcee5 |
child 53 | cc5eb73a3a93 |
permissions | -rw-r--r-- |
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 |
}; |