| ... | ... |
@@ -2160,102 +2160,102 @@ |
| 2160 | 2160 |
static CombinedArcMap<const ForwardMap, BackwardMap> |
| 2161 | 2161 |
combinedArcMap(const ForwardMap& forward, BackwardMap& backward) {
|
| 2162 | 2162 |
return CombinedArcMap<const ForwardMap, |
| 2163 | 2163 |
BackwardMap>(forward, backward); |
| 2164 | 2164 |
} |
| 2165 | 2165 |
|
| 2166 | 2166 |
template <typename ForwardMap, typename BackwardMap> |
| 2167 | 2167 |
static CombinedArcMap<ForwardMap, const BackwardMap> |
| 2168 | 2168 |
combinedArcMap(ForwardMap& forward, const BackwardMap& backward) {
|
| 2169 | 2169 |
return CombinedArcMap<ForwardMap, |
| 2170 | 2170 |
const BackwardMap>(forward, backward); |
| 2171 | 2171 |
} |
| 2172 | 2172 |
|
| 2173 | 2173 |
template <typename ForwardMap, typename BackwardMap> |
| 2174 | 2174 |
static CombinedArcMap<const ForwardMap, const BackwardMap> |
| 2175 | 2175 |
combinedArcMap(const ForwardMap& forward, const BackwardMap& backward) {
|
| 2176 | 2176 |
return CombinedArcMap<const ForwardMap, |
| 2177 | 2177 |
const BackwardMap>(forward, backward); |
| 2178 | 2178 |
} |
| 2179 | 2179 |
|
| 2180 | 2180 |
}; |
| 2181 | 2181 |
|
| 2182 | 2182 |
/// \brief Just gives back an undirected view of the given digraph |
| 2183 | 2183 |
/// |
| 2184 | 2184 |
/// Just gives back an undirected view of the given digraph |
| 2185 | 2185 |
template<typename Digraph> |
| 2186 | 2186 |
Undirector<const Digraph> |
| 2187 | 2187 |
undirector(const Digraph& digraph) {
|
| 2188 | 2188 |
return Undirector<const Digraph>(digraph); |
| 2189 | 2189 |
} |
| 2190 | 2190 |
|
| 2191 | 2191 |
template <typename _Graph, typename _DirectionMap> |
| 2192 | 2192 |
class OrienterBase {
|
| 2193 | 2193 |
public: |
| 2194 | 2194 |
|
| 2195 | 2195 |
typedef _Graph Graph; |
| 2196 | 2196 |
typedef _DirectionMap DirectionMap; |
| 2197 | 2197 |
|
| 2198 | 2198 |
typedef typename Graph::Node Node; |
| 2199 | 2199 |
typedef typename Graph::Edge Arc; |
| 2200 | 2200 |
|
| 2201 | 2201 |
void reverseArc(const Arc& arc) {
|
| 2202 | 2202 |
_direction->set(arc, !(*_direction)[arc]); |
| 2203 | 2203 |
} |
| 2204 | 2204 |
|
| 2205 | 2205 |
void first(Node& i) const { _graph->first(i); }
|
| 2206 | 2206 |
void first(Arc& i) const { _graph->first(i); }
|
| 2207 | 2207 |
void firstIn(Arc& i, const Node& n) const {
|
| 2208 |
bool d; |
|
| 2208 |
bool d = true; |
|
| 2209 | 2209 |
_graph->firstInc(i, d, n); |
| 2210 | 2210 |
while (i != INVALID && d == (*_direction)[i]) _graph->nextInc(i, d); |
| 2211 | 2211 |
} |
| 2212 | 2212 |
void firstOut(Arc& i, const Node& n ) const {
|
| 2213 |
bool d; |
|
| 2213 |
bool d = true; |
|
| 2214 | 2214 |
_graph->firstInc(i, d, n); |
| 2215 | 2215 |
while (i != INVALID && d != (*_direction)[i]) _graph->nextInc(i, d); |
| 2216 | 2216 |
} |
| 2217 | 2217 |
|
| 2218 | 2218 |
void next(Node& i) const { _graph->next(i); }
|
| 2219 | 2219 |
void next(Arc& i) const { _graph->next(i); }
|
| 2220 | 2220 |
void nextIn(Arc& i) const {
|
| 2221 | 2221 |
bool d = !(*_direction)[i]; |
| 2222 | 2222 |
_graph->nextInc(i, d); |
| 2223 | 2223 |
while (i != INVALID && d == (*_direction)[i]) _graph->nextInc(i, d); |
| 2224 | 2224 |
} |
| 2225 | 2225 |
void nextOut(Arc& i) const {
|
| 2226 | 2226 |
bool d = (*_direction)[i]; |
| 2227 | 2227 |
_graph->nextInc(i, d); |
| 2228 | 2228 |
while (i != INVALID && d != (*_direction)[i]) _graph->nextInc(i, d); |
| 2229 | 2229 |
} |
| 2230 | 2230 |
|
| 2231 | 2231 |
Node source(const Arc& e) const {
|
| 2232 | 2232 |
return (*_direction)[e] ? _graph->u(e) : _graph->v(e); |
| 2233 | 2233 |
} |
| 2234 | 2234 |
Node target(const Arc& e) const {
|
| 2235 | 2235 |
return (*_direction)[e] ? _graph->v(e) : _graph->u(e); |
| 2236 | 2236 |
} |
| 2237 | 2237 |
|
| 2238 | 2238 |
typedef NodeNumTagIndicator<Graph> NodeNumTag; |
| 2239 | 2239 |
int nodeNum() const { return _graph->nodeNum(); }
|
| 2240 | 2240 |
|
| 2241 | 2241 |
typedef EdgeNumTagIndicator<Graph> ArcNumTag; |
| 2242 | 2242 |
int arcNum() const { return _graph->edgeNum(); }
|
| 2243 | 2243 |
|
| 2244 | 2244 |
typedef FindEdgeTagIndicator<Graph> FindArcTag; |
| 2245 | 2245 |
Arc findArc(const Node& u, const Node& v, |
| 2246 | 2246 |
const Arc& prev = INVALID) {
|
| 2247 | 2247 |
Arc arc = prev; |
| 2248 | 2248 |
bool d = arc == INVALID ? true : (*_direction)[arc]; |
| 2249 | 2249 |
if (d) {
|
| 2250 | 2250 |
arc = _graph->findEdge(u, v, arc); |
| 2251 | 2251 |
while (arc != INVALID && !(*_direction)[arc]) {
|
| 2252 | 2252 |
_graph->findEdge(u, v, arc); |
| 2253 | 2253 |
} |
| 2254 | 2254 |
if (arc != INVALID) return arc; |
| 2255 | 2255 |
} |
| 2256 | 2256 |
_graph->findEdge(v, u, arc); |
| 2257 | 2257 |
while (arc != INVALID && (*_direction)[arc]) {
|
| 2258 | 2258 |
_graph->findEdge(u, v, arc); |
| 2259 | 2259 |
} |
| 2260 | 2260 |
return arc; |
| 2261 | 2261 |
} |
0 comments (0 inline)