| ... | ... |
@@ -54,63 +54,66 @@ |
| 54 | 54 |
bool forward; |
| 55 | 55 |
|
| 56 | 56 |
Arc(const Edge &ue, bool _forward) : |
| 57 | 57 |
Edge(ue), forward(_forward) {}
|
| 58 | 58 |
|
| 59 | 59 |
public: |
| 60 | 60 |
Arc() {}
|
| 61 | 61 |
|
| 62 |
// |
|
| 62 |
// Invalid arc constructor |
|
| 63 | 63 |
Arc(Invalid i) : Edge(i), forward(true) {}
|
| 64 | 64 |
|
| 65 | 65 |
bool operator==(const Arc &that) const {
|
| 66 | 66 |
return forward==that.forward && Edge(*this)==Edge(that); |
| 67 | 67 |
} |
| 68 | 68 |
bool operator!=(const Arc &that) const {
|
| 69 | 69 |
return forward!=that.forward || Edge(*this)!=Edge(that); |
| 70 | 70 |
} |
| 71 | 71 |
bool operator<(const Arc &that) const {
|
| 72 | 72 |
return forward<that.forward || |
| 73 | 73 |
(!(that.forward<forward) && Edge(*this)<Edge(that)); |
| 74 | 74 |
} |
| 75 | 75 |
}; |
| 76 | 76 |
|
| 77 |
/// First node of the edge |
|
| 78 |
Node u(const Edge &e) const {
|
|
| 79 |
return Parent::source(e); |
|
| 80 |
} |
|
| 77 | 81 |
|
| 78 |
|
|
| 79 |
using Parent::source; |
|
| 80 |
|
|
| 81 |
/// Source of the given Arc. |
|
| 82 |
/// Source of the given arc |
|
| 82 | 83 |
Node source(const Arc &e) const {
|
| 83 | 84 |
return e.forward ? Parent::source(e) : Parent::target(e); |
| 84 | 85 |
} |
| 85 | 86 |
|
| 86 |
|
|
| 87 |
/// Second node of the edge |
|
| 88 |
Node v(const Edge &e) const {
|
|
| 89 |
return Parent::target(e); |
|
| 90 |
} |
|
| 87 | 91 |
|
| 88 |
/// Target of the given |
|
| 92 |
/// Target of the given arc |
|
| 89 | 93 |
Node target(const Arc &e) const {
|
| 90 | 94 |
return e.forward ? Parent::target(e) : Parent::source(e); |
| 91 | 95 |
} |
| 92 | 96 |
|
| 93 | 97 |
/// \brief Directed arc from an edge. |
| 94 | 98 |
/// |
| 95 |
/// Returns a directed arc corresponding to the specified Edge. |
|
| 96 |
/// If the given bool is true the given edge and the |
|
| 97 |
/// returned arc have the same source node. |
|
| 98 |
static Arc direct(const Edge &ue, bool d) {
|
|
| 99 |
|
|
| 99 |
/// Returns a directed arc corresponding to the specified edge. |
|
| 100 |
/// If the given bool is true, the first node of the given edge and |
|
| 101 |
/// the source node of the returned arc are the same. |
|
| 102 |
static Arc direct(const Edge &e, bool d) {
|
|
| 103 |
return Arc(e, d); |
|
| 100 | 104 |
} |
| 101 | 105 |
|
| 102 |
/// Returns whether the given directed arc is same orientation as the |
|
| 103 |
/// corresponding edge. |
|
| 106 |
/// Returns whether the given directed arc has the same orientation |
|
| 107 |
/// as the corresponding edge. |
|
| 104 | 108 |
/// |
| 105 | 109 |
/// \todo reference to the corresponding point of the undirected digraph |
| 106 | 110 |
/// concept. "What does the direction of an edge mean?" |
| 107 |
static bool direction(const Arc &e) { return e.forward; }
|
|
| 108 |
|
|
| 111 |
static bool direction(const Arc &a) { return a.forward; }
|
|
| 109 | 112 |
|
| 110 | 113 |
using Parent::first; |
| 111 | 114 |
using Parent::next; |
| 112 | 115 |
|
| 113 | 116 |
void first(Arc &e) const {
|
| 114 | 117 |
Parent::first(e); |
| 115 | 118 |
e.forward=true; |
| 116 | 119 |
} |
| ... | ... |
@@ -224,17 +227,16 @@ |
| 224 | 227 |
int maxArcId() const {
|
| 225 | 228 |
return 2 * Parent::maxArcId() + 1; |
| 226 | 229 |
} |
| 227 | 230 |
|
| 228 | 231 |
int maxEdgeId() const {
|
| 229 | 232 |
return Parent::maxArcId(); |
| 230 | 233 |
} |
| 231 | 234 |
|
| 232 |
|
|
| 233 | 235 |
int arcNum() const {
|
| 234 | 236 |
return 2 * Parent::arcNum(); |
| 235 | 237 |
} |
| 236 | 238 |
|
| 237 | 239 |
int edgeNum() const {
|
| 238 | 240 |
return Parent::arcNum(); |
| 239 | 241 |
} |
| 240 | 242 |
|
0 comments (0 inline)