393 /// \warning An Arc pointing to a removed item |
393 /// \warning An Arc pointing to a removed item |
394 /// could become valid again later if new nodes are |
394 /// could become valid again later if new nodes are |
395 /// added to the graph. |
395 /// added to the graph. |
396 bool valid(Arc a) const { return Parent::valid(a); } |
396 bool valid(Arc a) const { return Parent::valid(a); } |
397 |
397 |
398 /// Change the target of \c e to \c n |
398 /// Change the target of \c a to \c n |
399 |
399 |
400 /// Change the target of \c e to \c n |
400 /// Change the target of \c a to \c n |
401 /// |
401 /// |
402 ///\note The <tt>ArcIt</tt>s and <tt>OutArcIt</tt>s referencing |
402 ///\note The <tt>ArcIt</tt>s and <tt>OutArcIt</tt>s referencing |
403 ///the changed arc remain valid. However <tt>InArcIt</tt>s are |
403 ///the changed arc remain valid. However <tt>InArcIt</tt>s are |
404 ///invalidated. |
404 ///invalidated. |
405 /// |
405 /// |
406 ///\warning This functionality cannot be used together with the Snapshot |
406 ///\warning This functionality cannot be used together with the Snapshot |
407 ///feature. |
407 ///feature. |
408 void changeTarget(Arc e, Node n) { |
408 void changeTarget(Arc a, Node n) { |
409 Parent::changeTarget(e,n); |
409 Parent::changeTarget(a,n); |
410 } |
410 } |
411 /// Change the source of \c e to \c n |
411 /// Change the source of \c a to \c n |
412 |
412 |
413 /// Change the source of \c e to \c n |
413 /// Change the source of \c a to \c n |
414 /// |
414 /// |
415 ///\note The <tt>ArcIt</tt>s and <tt>InArcIt</tt>s referencing |
415 ///\note The <tt>InArcIt</tt>s referencing the changed arc remain |
416 ///the changed arc remain valid. However <tt>OutArcIt</tt>s are |
416 ///valid. However the <tt>ArcIt<tt>s and <tt>OutArcIt</tt>s are |
417 ///invalidated. |
417 ///invalidated. |
418 /// |
418 /// |
419 ///\warning This functionality cannot be used together with the Snapshot |
419 ///\warning This functionality cannot be used together with the Snapshot |
420 ///feature. |
420 ///feature. |
421 void changeSource(Arc e, Node n) { |
421 void changeSource(Arc a, Node n) { |
422 Parent::changeSource(e,n); |
422 Parent::changeSource(a,n); |
423 } |
423 } |
424 |
424 |
425 /// Invert the direction of an arc. |
425 /// Invert the direction of an arc. |
426 |
426 |
427 ///\note The <tt>ArcIt</tt>s referencing the changed arc remain |
427 ///\note The <tt>ArcIt</tt>s referencing the changed arc remain |
1135 arcs[2 * e.id].prev_out = -1; |
1135 arcs[2 * e.id].prev_out = -1; |
1136 arcs[2 * e.id].next_out = nodes[n.id].first_out; |
1136 arcs[2 * e.id].next_out = nodes[n.id].first_out; |
1137 nodes[n.id].first_out = 2 * e.id; |
1137 nodes[n.id].first_out = 2 * e.id; |
1138 } |
1138 } |
1139 |
1139 |
1140 void changeSource(Edge e, Node n) { |
1140 void changeU(Edge e, Node n) { |
1141 if(arcs[(2 * e.id) | 1].next_out != -1) { |
1141 if(arcs[(2 * e.id) | 1].next_out != -1) { |
1142 arcs[arcs[(2 * e.id) | 1].next_out].prev_out = |
1142 arcs[arcs[(2 * e.id) | 1].next_out].prev_out = |
1143 arcs[(2 * e.id) | 1].prev_out; |
1143 arcs[(2 * e.id) | 1].prev_out; |
1144 } |
1144 } |
1145 if(arcs[(2 * e.id) | 1].prev_out != -1) { |
1145 if(arcs[(2 * e.id) | 1].prev_out != -1) { |
1258 /// |
1258 /// |
1259 /// \warning A Edge pointing to a removed item |
1259 /// \warning A Edge pointing to a removed item |
1260 /// could become valid again later if new edges are |
1260 /// could become valid again later if new edges are |
1261 /// added to the graph. |
1261 /// added to the graph. |
1262 bool valid(Edge e) const { return Parent::valid(e); } |
1262 bool valid(Edge e) const { return Parent::valid(e); } |
1263 /// \brief Change the source of \c e to \c n |
1263 /// \brief Change the end \c u of \c e to \c n |
1264 /// |
1264 /// |
1265 /// This function changes the source of \c e to \c n. |
1265 /// This function changes the end \c u of \c e to node \c n. |
1266 /// |
1266 /// |
1267 ///\note The <tt>ArcIt</tt>s and <tt>InArcIt</tt>s |
1267 ///\note The <tt>EdgeIt</tt>s and <tt>ArcIt</tt>s referencing the |
1268 ///referencing the changed arc remain |
1268 ///changed edge are invalidated and if the changed node is the |
1269 ///valid. However <tt>OutArcIt</tt>s are invalidated. |
1269 ///base node of an iterator then this iterator is also |
|
1270 ///invalidated. |
1270 /// |
1271 /// |
1271 ///\warning This functionality cannot be used together with the |
1272 ///\warning This functionality cannot be used together with the |
1272 ///Snapshot feature. |
1273 ///Snapshot feature. |
1273 void changeSource(Edge e, Node n) { |
1274 void changeU(Edge e, Node n) { |
1274 Parent::changeSource(e,n); |
1275 Parent::changeU(e,n); |
1275 } |
1276 } |
1276 /// \brief Change the target of \c e to \c n |
1277 /// \brief Change the end \c v of \c e to \c n |
1277 /// |
1278 /// |
1278 /// This function changes the target of \c e to \c n. |
1279 /// This function changes the end \c v of \c e to \c n. |
1279 /// |
1280 /// |
1280 /// \note The <tt>ArcIt</tt>s referencing the changed arc remain |
1281 ///\note The <tt>EdgeIt</tt>s referencing the changed edge remain |
1281 /// valid. However the other iterators may be invalidated. |
1282 ///valid, however <tt>ArcIt</tt>s and if the changed node is the |
|
1283 ///base node of an iterator then this iterator is invalidated. |
1282 /// |
1284 /// |
1283 ///\warning This functionality cannot be used together with the |
1285 ///\warning This functionality cannot be used together with the |
1284 ///Snapshot feature. |
1286 ///Snapshot feature. |
1285 void changeTarget(Edge e, Node n) { |
1287 void changeV(Edge e, Node n) { |
1286 Parent::changeTarget(e,n); |
1288 Parent::changeV(e,n); |
1287 } |
|
1288 /// \brief Change the source of \c e to \c n |
|
1289 /// |
|
1290 /// This function changes the source of \c e to \c n. |
|
1291 /// It also changes the proper node of the represented edge. |
|
1292 /// |
|
1293 ///\note The <tt>ArcIt</tt>s and <tt>InArcIt</tt>s |
|
1294 ///referencing the changed arc remain |
|
1295 ///valid. However <tt>OutArcIt</tt>s are invalidated. |
|
1296 /// |
|
1297 ///\warning This functionality cannot be used together with the |
|
1298 ///Snapshot feature. |
|
1299 void changeSource(Arc e, Node n) { |
|
1300 if (Parent::direction(e)) { |
|
1301 Parent::changeSource(e,n); |
|
1302 } else { |
|
1303 Parent::changeTarget(e,n); |
|
1304 } |
|
1305 } |
|
1306 /// \brief Change the target of \c e to \c n |
|
1307 /// |
|
1308 /// This function changes the target of \c e to \c n. |
|
1309 /// It also changes the proper node of the represented edge. |
|
1310 /// |
|
1311 ///\note The <tt>ArcIt</tt>s and <tt>OutArcIt</tt>s |
|
1312 ///referencing the changed arc remain |
|
1313 ///valid. However <tt>InArcIt</tt>s are invalidated. |
|
1314 /// |
|
1315 ///\warning This functionality cannot be used together with the |
|
1316 ///Snapshot feature. |
|
1317 void changeTarget(Arc e, Node n) { |
|
1318 if (Parent::direction(e)) { |
|
1319 Parent::changeTarget(e,n); |
|
1320 } else { |
|
1321 Parent::changeSource(e,n); |
|
1322 } |
|
1323 } |
1289 } |
1324 /// \brief Contract two nodes. |
1290 /// \brief Contract two nodes. |
1325 /// |
1291 /// |
1326 /// This function contracts two nodes. |
1292 /// This function contracts two nodes. |
1327 /// Node \p b will be removed but instead of deleting |
1293 /// Node \p b will be removed but instead of deleting |