| 252 | //-------------------------------------------------------------------------- |
| 253 | |
| 254 | void graph::del_node(GTL::node n) |
| 255 | { |
| 256 | assert (n.data); |
| 257 | assert (n.data->owner == this); |
| 258 | |
| 259 | // delete edges |
| 260 | |
| 261 | while(n.in_edges_begin() != n.in_edges_end()) |
| 262 | { |
| 263 | del_edge (*n.in_edges_begin()); |
| 264 | } |
| 265 | |
| 266 | while(n.out_edges_begin() != n.out_edges_end()) |
| 267 | { |
| 268 | del_edge (*n.out_edges_begin()); |
| 269 | } |
| 270 | |
| 271 | // |
| 272 | // delete hidden edges adjacent to n. |
| 273 | // |
| 274 | // [ TODO ] This is only a quick fix and should be thought |
| 275 | // over some time or the other. |
| 276 | // |
| 277 | |
| 278 | edges_t::iterator it = hidden_edges.begin(); |
| 279 | edges_t::iterator end = hidden_edges.end(); |
| 280 | |
| 281 | while (it != end) |
| 282 | { |
| 283 | if (it->source() == n || it->target() == n) |
| 284 | { |
| 285 | delete it->data; |
| 286 | it = hidden_edges.erase (it); |
| 287 | } |
| 288 | else |
| 289 | { |
| 290 | ++it; |
| 291 | } |
| 292 | } |
| 293 | |
| 294 | // delete node |
| 295 | |
| 296 | pre_del_node_handler(n); |
| 297 | |
| 298 | nodes.erase(n.data->pos); |
| 299 | --nodes_count; |
| 300 | free_node_ids.push_back(n.data->id); |
| 301 | ++free_node_ids_count; |
| 302 | delete n.data; |
| 303 | |
| 304 | post_del_node_handler(); |
| 305 | } |
| 306 | |
| 307 | void graph::del_edge(GTL::edge e) |
| 308 | { |
no test coverage detected