... | ... |
@@ -50,71 +50,74 @@ |
50 | 50 |
class Arc : public Edge { |
51 | 51 |
friend class UndirDigraphExtender; |
52 | 52 |
|
53 | 53 |
protected: |
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 |
} |
117 | 120 |
|
118 | 121 |
void next(Arc &e) const { |
119 | 122 |
if( e.forward ) { |
120 | 123 |
e.forward = false; |
... | ... |
@@ -220,25 +223,24 @@ |
220 | 223 |
int maxNodeId() const { |
221 | 224 |
return Parent::maxNodeId(); |
222 | 225 |
} |
223 | 226 |
|
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 |
|
241 | 243 |
Arc findArc(Node s, Node t, Arc p = INVALID) const { |
242 | 244 |
if (p == INVALID) { |
243 | 245 |
Edge arc = Parent::findArc(s, t); |
244 | 246 |
if (arc != INVALID) return direct(arc, true); |
0 comments (0 inline)