lemon/graph_adaptor.h
changeset 2384 805c5a2a36dd
parent 2340 03c71d754990
child 2386 81b47fc5c444
equal deleted inserted replaced
42:685f1667d96e 43:b970e4c777ab
   130       return graph->maxEdgeId();
   130       return graph->maxEdgeId();
   131     }
   131     }
   132 
   132 
   133     typedef typename ItemSetTraits<Graph, Node>::ItemNotifier NodeNotifier;
   133     typedef typename ItemSetTraits<Graph, Node>::ItemNotifier NodeNotifier;
   134 
   134 
   135     NodeNotifier& getNotifier(Node) const {
   135     NodeNotifier& notifier(Node) const {
   136       return graph->getNotifier(Node());
   136       return graph->notifier(Node());
   137     } 
   137     } 
   138 
   138 
   139     typedef typename ItemSetTraits<Graph, Edge>::ItemNotifier EdgeNotifier;
   139     typedef typename ItemSetTraits<Graph, Edge>::ItemNotifier EdgeNotifier;
   140 
   140 
   141     EdgeNotifier& getNotifier(Edge) const {
   141     EdgeNotifier& notifier(Edge) const {
   142       return graph->getNotifier(Edge());
   142       return graph->notifier(Edge());
   143     } 
   143     } 
   144     
   144     
   145     template <typename _Value>
   145     template <typename _Value>
   146     class NodeMap : public Graph::template NodeMap<_Value> {
   146     class NodeMap : public Graph::template NodeMap<_Value> {
   147     public:
   147     public:
  1180     AlterableUndirGraphAdaptor() 
  1180     AlterableUndirGraphAdaptor() 
  1181       : Parent(), edge_notifier(*this), edge_notifier_proxy(*this) {}
  1181       : Parent(), edge_notifier(*this), edge_notifier_proxy(*this) {}
  1182 
  1182 
  1183     void setGraph(_Graph& graph) {
  1183     void setGraph(_Graph& graph) {
  1184       Parent::setGraph(graph);
  1184       Parent::setGraph(graph);
  1185       edge_notifier_proxy.setNotifier(graph.getNotifier(GraphEdge()));
  1185       edge_notifier_proxy.setNotifier(graph.notifier(GraphEdge()));
  1186     }
  1186     }
  1187 
  1187 
  1188   public:
  1188   public:
  1189 
  1189 
  1190     ~AlterableUndirGraphAdaptor() {
  1190     ~AlterableUndirGraphAdaptor() {
  1194     typedef typename Parent::UEdge UEdge;
  1194     typedef typename Parent::UEdge UEdge;
  1195     typedef typename Parent::Edge Edge;
  1195     typedef typename Parent::Edge Edge;
  1196 
  1196 
  1197     typedef typename Parent::EdgeNotifier UEdgeNotifier;
  1197     typedef typename Parent::EdgeNotifier UEdgeNotifier;
  1198 
  1198 
  1199     using Parent::getNotifier;
  1199     using Parent::notifier;
  1200 
  1200 
  1201     typedef AlterationNotifier<AlterableUndirGraphAdaptor, 
  1201     typedef AlterationNotifier<AlterableUndirGraphAdaptor, 
  1202                                Edge> EdgeNotifier;
  1202                                Edge> EdgeNotifier;
  1203     EdgeNotifier& getNotifier(Edge) const { return edge_notifier; }
  1203     EdgeNotifier& notifier(Edge) const { return edge_notifier; }
  1204 
  1204 
  1205   protected:
  1205   protected:
  1206 
  1206 
  1207     class NotifierProxy : public Graph::EdgeNotifier::ObserverBase {
  1207     class NotifierProxy : public Graph::EdgeNotifier::ObserverBase {
  1208     public:
  1208     public:
  1229 
  1229 
  1230       virtual void add(const GraphEdge& ge) {
  1230       virtual void add(const GraphEdge& ge) {
  1231         std::vector<Edge> edges;
  1231         std::vector<Edge> edges;
  1232         edges.push_back(AdaptorBase::Parent::direct(ge, true));
  1232         edges.push_back(AdaptorBase::Parent::direct(ge, true));
  1233         edges.push_back(AdaptorBase::Parent::direct(ge, false));
  1233         edges.push_back(AdaptorBase::Parent::direct(ge, false));
  1234         adaptor->getNotifier(Edge()).add(edges);
  1234         adaptor->notifier(Edge()).add(edges);
  1235       }
  1235       }
  1236       virtual void add(const std::vector<GraphEdge>& ge) {
  1236       virtual void add(const std::vector<GraphEdge>& ge) {
  1237         std::vector<Edge> edges;
  1237         std::vector<Edge> edges;
  1238         for (int i = 0; i < (int)ge.size(); ++i) { 
  1238         for (int i = 0; i < (int)ge.size(); ++i) { 
  1239           edges.push_back(AdaptorBase::Parent::direct(ge[i], true));
  1239           edges.push_back(AdaptorBase::Parent::direct(ge[i], true));
  1240           edges.push_back(AdaptorBase::Parent::direct(ge[i], false));
  1240           edges.push_back(AdaptorBase::Parent::direct(ge[i], false));
  1241         }
  1241         }
  1242         adaptor->getNotifier(Edge()).add(edges);
  1242         adaptor->notifier(Edge()).add(edges);
  1243       }
  1243       }
  1244       virtual void erase(const GraphEdge& ge) {
  1244       virtual void erase(const GraphEdge& ge) {
  1245         std::vector<Edge> edges;
  1245         std::vector<Edge> edges;
  1246         edges.push_back(AdaptorBase::Parent::direct(ge, true));
  1246         edges.push_back(AdaptorBase::Parent::direct(ge, true));
  1247         edges.push_back(AdaptorBase::Parent::direct(ge, false));
  1247         edges.push_back(AdaptorBase::Parent::direct(ge, false));
  1248         adaptor->getNotifier(Edge()).erase(edges);
  1248         adaptor->notifier(Edge()).erase(edges);
  1249       }
  1249       }
  1250       virtual void erase(const std::vector<GraphEdge>& ge) {
  1250       virtual void erase(const std::vector<GraphEdge>& ge) {
  1251         std::vector<Edge> edges;
  1251         std::vector<Edge> edges;
  1252         for (int i = 0; i < (int)ge.size(); ++i) { 
  1252         for (int i = 0; i < (int)ge.size(); ++i) { 
  1253           edges.push_back(AdaptorBase::Parent::direct(ge[i], true));
  1253           edges.push_back(AdaptorBase::Parent::direct(ge[i], true));
  1254           edges.push_back(AdaptorBase::Parent::direct(ge[i], false));
  1254           edges.push_back(AdaptorBase::Parent::direct(ge[i], false));
  1255         }
  1255         }
  1256         adaptor->getNotifier(Edge()).erase(edges);
  1256         adaptor->notifier(Edge()).erase(edges);
  1257       }
  1257       }
  1258       virtual void build() {
  1258       virtual void build() {
  1259         adaptor->getNotifier(Edge()).build();
  1259         adaptor->notifier(Edge()).build();
  1260       }
  1260       }
  1261       virtual void clear() {
  1261       virtual void clear() {
  1262         adaptor->getNotifier(Edge()).clear();
  1262         adaptor->notifier(Edge()).clear();
  1263       }
  1263       }
  1264 
  1264 
  1265       const AdaptorBase* adaptor;
  1265       const AdaptorBase* adaptor;
  1266     };
  1266     };
  1267 
  1267 
  2141     AlterableSplitGraphAdaptor() 
  2141     AlterableSplitGraphAdaptor() 
  2142       : Parent(), node_notifier(*this), node_notifier_proxy(*this) {}
  2142       : Parent(), node_notifier(*this), node_notifier_proxy(*this) {}
  2143 
  2143 
  2144     void setGraph(_Graph& graph) {
  2144     void setGraph(_Graph& graph) {
  2145       Parent::setGraph(graph);
  2145       Parent::setGraph(graph);
  2146       node_notifier_proxy.setNotifier(graph.getNotifier(GraphNode()));
  2146       node_notifier_proxy.setNotifier(graph.notifier(GraphNode()));
  2147     }
  2147     }
  2148 
  2148 
  2149   public:
  2149   public:
  2150 
  2150 
  2151     ~AlterableSplitGraphAdaptor() {
  2151     ~AlterableSplitGraphAdaptor() {
  2153     }
  2153     }
  2154 
  2154 
  2155     typedef AlterationNotifier<AlterableSplitGraphAdaptor, Node> NodeNotifier;
  2155     typedef AlterationNotifier<AlterableSplitGraphAdaptor, Node> NodeNotifier;
  2156     typedef InvalidType EdgeNotifier;
  2156     typedef InvalidType EdgeNotifier;
  2157 
  2157 
  2158     NodeNotifier& getNotifier(Node) const { return node_notifier; }
  2158     NodeNotifier& notifier(Node) const { return node_notifier; }
  2159 
  2159 
  2160   protected:
  2160   protected:
  2161 
  2161 
  2162     class NodeNotifierProxy : public Graph::NodeNotifier::ObserverBase {
  2162     class NodeNotifierProxy : public Graph::NodeNotifier::ObserverBase {
  2163     public:
  2163     public:
  2184 
  2184 
  2185       virtual void add(const GraphNode& gn) {
  2185       virtual void add(const GraphNode& gn) {
  2186         std::vector<Node> nodes;
  2186         std::vector<Node> nodes;
  2187         nodes.push_back(AdaptorBase::Parent::inNode(gn));
  2187         nodes.push_back(AdaptorBase::Parent::inNode(gn));
  2188         nodes.push_back(AdaptorBase::Parent::outNode(gn));
  2188         nodes.push_back(AdaptorBase::Parent::outNode(gn));
  2189         adaptor->getNotifier(Node()).add(nodes);
  2189         adaptor->notifier(Node()).add(nodes);
  2190       }
  2190       }
  2191 
  2191 
  2192       virtual void add(const std::vector<GraphNode>& gn) {
  2192       virtual void add(const std::vector<GraphNode>& gn) {
  2193         std::vector<Node> nodes;
  2193         std::vector<Node> nodes;
  2194         for (int i = 0; i < (int)gn.size(); ++i) {
  2194         for (int i = 0; i < (int)gn.size(); ++i) {
  2195           nodes.push_back(AdaptorBase::Parent::inNode(gn[i]));
  2195           nodes.push_back(AdaptorBase::Parent::inNode(gn[i]));
  2196           nodes.push_back(AdaptorBase::Parent::outNode(gn[i]));
  2196           nodes.push_back(AdaptorBase::Parent::outNode(gn[i]));
  2197         }
  2197         }
  2198         adaptor->getNotifier(Node()).add(nodes);
  2198         adaptor->notifier(Node()).add(nodes);
  2199       }
  2199       }
  2200 
  2200 
  2201       virtual void erase(const GraphNode& gn) {
  2201       virtual void erase(const GraphNode& gn) {
  2202         std::vector<Node> nodes;
  2202         std::vector<Node> nodes;
  2203         nodes.push_back(AdaptorBase::Parent::inNode(gn));
  2203         nodes.push_back(AdaptorBase::Parent::inNode(gn));
  2204         nodes.push_back(AdaptorBase::Parent::outNode(gn));
  2204         nodes.push_back(AdaptorBase::Parent::outNode(gn));
  2205         adaptor->getNotifier(Node()).erase(nodes);
  2205         adaptor->notifier(Node()).erase(nodes);
  2206       }
  2206       }
  2207 
  2207 
  2208       virtual void erase(const std::vector<GraphNode>& gn) {
  2208       virtual void erase(const std::vector<GraphNode>& gn) {
  2209         std::vector<Node> nodes;
  2209         std::vector<Node> nodes;
  2210         for (int i = 0; i < (int)gn.size(); ++i) {
  2210         for (int i = 0; i < (int)gn.size(); ++i) {
  2211           nodes.push_back(AdaptorBase::Parent::inNode(gn[i]));
  2211           nodes.push_back(AdaptorBase::Parent::inNode(gn[i]));
  2212           nodes.push_back(AdaptorBase::Parent::outNode(gn[i]));
  2212           nodes.push_back(AdaptorBase::Parent::outNode(gn[i]));
  2213         }
  2213         }
  2214         adaptor->getNotifier(Node()).erase(nodes);
  2214         adaptor->notifier(Node()).erase(nodes);
  2215       }
  2215       }
  2216       virtual void build() {
  2216       virtual void build() {
  2217         adaptor->getNotifier(Node()).build();
  2217         adaptor->notifier(Node()).build();
  2218       }
  2218       }
  2219       virtual void clear() {
  2219       virtual void clear() {
  2220         adaptor->getNotifier(Node()).clear();
  2220         adaptor->notifier(Node()).clear();
  2221       }
  2221       }
  2222 
  2222 
  2223       const AdaptorBase* adaptor;
  2223       const AdaptorBase* adaptor;
  2224     };
  2224     };
  2225 
  2225 
  2253       : Parent(), node_notifier(*this), edge_notifier(*this), 
  2253       : Parent(), node_notifier(*this), edge_notifier(*this), 
  2254         node_notifier_proxy(*this), edge_notifier_proxy(*this) {}
  2254         node_notifier_proxy(*this), edge_notifier_proxy(*this) {}
  2255     
  2255     
  2256     void setGraph(_Graph& graph) {
  2256     void setGraph(_Graph& graph) {
  2257       Parent::setGraph(graph);
  2257       Parent::setGraph(graph);
  2258       node_notifier_proxy.setNotifier(graph.getNotifier(GraphNode()));
  2258       node_notifier_proxy.setNotifier(graph.notifier(GraphNode()));
  2259       edge_notifier_proxy.setNotifier(graph.getNotifier(GraphEdge()));
  2259       edge_notifier_proxy.setNotifier(graph.notifier(GraphEdge()));
  2260     }
  2260     }
  2261 
  2261 
  2262   public:
  2262   public:
  2263 
  2263 
  2264     ~AlterableSplitGraphAdaptor() {
  2264     ~AlterableSplitGraphAdaptor() {
  2267     }
  2267     }
  2268 
  2268 
  2269     typedef AlterationNotifier<AlterableSplitGraphAdaptor, Node> NodeNotifier;
  2269     typedef AlterationNotifier<AlterableSplitGraphAdaptor, Node> NodeNotifier;
  2270     typedef AlterationNotifier<AlterableSplitGraphAdaptor, Edge> EdgeNotifier;
  2270     typedef AlterationNotifier<AlterableSplitGraphAdaptor, Edge> EdgeNotifier;
  2271 
  2271 
  2272     NodeNotifier& getNotifier(Node) const { return node_notifier; }
  2272     NodeNotifier& notifier(Node) const { return node_notifier; }
  2273     EdgeNotifier& getNotifier(Edge) const { return edge_notifier; }
  2273     EdgeNotifier& notifier(Edge) const { return edge_notifier; }
  2274 
  2274 
  2275   protected:
  2275   protected:
  2276 
  2276 
  2277     class NodeNotifierProxy : public Graph::NodeNotifier::ObserverBase {
  2277     class NodeNotifierProxy : public Graph::NodeNotifier::ObserverBase {
  2278     public:
  2278     public:
  2299 
  2299 
  2300       virtual void add(const GraphNode& gn) {
  2300       virtual void add(const GraphNode& gn) {
  2301         std::vector<Node> nodes;
  2301         std::vector<Node> nodes;
  2302         nodes.push_back(AdaptorBase::Parent::inNode(gn));
  2302         nodes.push_back(AdaptorBase::Parent::inNode(gn));
  2303         nodes.push_back(AdaptorBase::Parent::outNode(gn));
  2303         nodes.push_back(AdaptorBase::Parent::outNode(gn));
  2304         adaptor->getNotifier(Node()).add(nodes);
  2304         adaptor->notifier(Node()).add(nodes);
  2305         adaptor->getNotifier(Edge()).add(AdaptorBase::Parent::edge(gn));
  2305         adaptor->notifier(Edge()).add(AdaptorBase::Parent::edge(gn));
  2306       }
  2306       }
  2307       virtual void add(const std::vector<GraphNode>& gn) {
  2307       virtual void add(const std::vector<GraphNode>& gn) {
  2308         std::vector<Node> nodes;
  2308         std::vector<Node> nodes;
  2309         std::vector<Edge> edges;
  2309         std::vector<Edge> edges;
  2310         for (int i = 0; i < (int)gn.size(); ++i) {
  2310         for (int i = 0; i < (int)gn.size(); ++i) {
  2311           edges.push_back(AdaptorBase::Parent::edge(gn[i]));
  2311           edges.push_back(AdaptorBase::Parent::edge(gn[i]));
  2312           nodes.push_back(AdaptorBase::Parent::inNode(gn[i]));
  2312           nodes.push_back(AdaptorBase::Parent::inNode(gn[i]));
  2313           nodes.push_back(AdaptorBase::Parent::outNode(gn[i]));
  2313           nodes.push_back(AdaptorBase::Parent::outNode(gn[i]));
  2314         }
  2314         }
  2315         adaptor->getNotifier(Node()).add(nodes);
  2315         adaptor->notifier(Node()).add(nodes);
  2316         adaptor->getNotifier(Edge()).add(edges);
  2316         adaptor->notifier(Edge()).add(edges);
  2317       }
  2317       }
  2318       virtual void erase(const GraphNode& gn) {
  2318       virtual void erase(const GraphNode& gn) {
  2319         adaptor->getNotifier(Edge()).erase(AdaptorBase::Parent::edge(gn));
  2319         adaptor->notifier(Edge()).erase(AdaptorBase::Parent::edge(gn));
  2320         std::vector<Node> nodes;
  2320         std::vector<Node> nodes;
  2321         nodes.push_back(AdaptorBase::Parent::inNode(gn));
  2321         nodes.push_back(AdaptorBase::Parent::inNode(gn));
  2322         nodes.push_back(AdaptorBase::Parent::outNode(gn));
  2322         nodes.push_back(AdaptorBase::Parent::outNode(gn));
  2323         adaptor->getNotifier(Node()).erase(nodes);
  2323         adaptor->notifier(Node()).erase(nodes);
  2324       }
  2324       }
  2325       virtual void erase(const std::vector<GraphNode>& gn) {
  2325       virtual void erase(const std::vector<GraphNode>& gn) {
  2326         std::vector<Node> nodes;
  2326         std::vector<Node> nodes;
  2327         std::vector<Edge> edges;
  2327         std::vector<Edge> edges;
  2328         for (int i = 0; i < (int)gn.size(); ++i) {
  2328         for (int i = 0; i < (int)gn.size(); ++i) {
  2329           edges.push_back(AdaptorBase::Parent::edge(gn[i]));
  2329           edges.push_back(AdaptorBase::Parent::edge(gn[i]));
  2330           nodes.push_back(AdaptorBase::Parent::inNode(gn[i]));
  2330           nodes.push_back(AdaptorBase::Parent::inNode(gn[i]));
  2331           nodes.push_back(AdaptorBase::Parent::outNode(gn[i]));
  2331           nodes.push_back(AdaptorBase::Parent::outNode(gn[i]));
  2332         }
  2332         }
  2333         adaptor->getNotifier(Edge()).erase(edges);
  2333         adaptor->notifier(Edge()).erase(edges);
  2334         adaptor->getNotifier(Node()).erase(nodes);
  2334         adaptor->notifier(Node()).erase(nodes);
  2335       }
  2335       }
  2336       virtual void build() {
  2336       virtual void build() {
  2337         std::vector<Edge> edges;
  2337         std::vector<Edge> edges;
  2338         const typename Parent::Notifier* notifier = Parent::getNotifier();
  2338         const typename Parent::Notifier* notifier = Parent::notifier();
  2339         GraphNode it;
  2339         GraphNode it;
  2340         for (notifier->first(it); it != INVALID; notifier->next(it)) {
  2340         for (notifier->first(it); it != INVALID; notifier->next(it)) {
  2341           edges.push_back(AdaptorBase::Parent::edge(it));
  2341           edges.push_back(AdaptorBase::Parent::edge(it));
  2342         }
  2342         }
  2343         adaptor->getNotifier(Node()).build();
  2343         adaptor->notifier(Node()).build();
  2344         adaptor->getNotifier(Edge()).add(edges);        
  2344         adaptor->notifier(Edge()).add(edges);        
  2345       }
  2345       }
  2346       virtual void clear() {
  2346       virtual void clear() {
  2347         std::vector<Edge> edges;
  2347         std::vector<Edge> edges;
  2348         const typename Parent::Notifier* notifier = Parent::getNotifier();
  2348         const typename Parent::Notifier* notifier = Parent::notifier();
  2349         GraphNode it;
  2349         GraphNode it;
  2350         for (notifier->first(it); it != INVALID; notifier->next(it)) {
  2350         for (notifier->first(it); it != INVALID; notifier->next(it)) {
  2351           edges.push_back(AdaptorBase::Parent::edge(it));
  2351           edges.push_back(AdaptorBase::Parent::edge(it));
  2352         }
  2352         }
  2353         adaptor->getNotifier(Edge()).erase(edges);        
  2353         adaptor->notifier(Edge()).erase(edges);        
  2354         adaptor->getNotifier(Node()).clear();
  2354         adaptor->notifier(Node()).clear();
  2355       }
  2355       }
  2356 
  2356 
  2357       const AdaptorBase* adaptor;
  2357       const AdaptorBase* adaptor;
  2358     };
  2358     };
  2359 
  2359 
  2379 
  2379 
  2380       
  2380       
  2381     protected:
  2381     protected:
  2382 
  2382 
  2383       virtual void add(const GraphEdge& ge) {
  2383       virtual void add(const GraphEdge& ge) {
  2384         adaptor->getNotifier(Edge()).add(AdaptorBase::edge(ge));
  2384         adaptor->notifier(Edge()).add(AdaptorBase::edge(ge));
  2385       }
  2385       }
  2386       virtual void add(const std::vector<GraphEdge>& ge) {
  2386       virtual void add(const std::vector<GraphEdge>& ge) {
  2387         std::vector<Edge> edges;
  2387         std::vector<Edge> edges;
  2388         for (int i = 0; i < (int)ge.size(); ++i) {
  2388         for (int i = 0; i < (int)ge.size(); ++i) {
  2389           edges.push_back(AdaptorBase::edge(ge[i]));
  2389           edges.push_back(AdaptorBase::edge(ge[i]));
  2390         }
  2390         }
  2391         adaptor->getNotifier(Edge()).add(edges);
  2391         adaptor->notifier(Edge()).add(edges);
  2392       }
  2392       }
  2393       virtual void erase(const GraphEdge& ge) {
  2393       virtual void erase(const GraphEdge& ge) {
  2394         adaptor->getNotifier(Edge()).erase(AdaptorBase::edge(ge));
  2394         adaptor->notifier(Edge()).erase(AdaptorBase::edge(ge));
  2395       }
  2395       }
  2396       virtual void erase(const std::vector<GraphEdge>& ge) {
  2396       virtual void erase(const std::vector<GraphEdge>& ge) {
  2397         std::vector<Edge> edges;
  2397         std::vector<Edge> edges;
  2398         for (int i = 0; i < (int)ge.size(); ++i) {
  2398         for (int i = 0; i < (int)ge.size(); ++i) {
  2399           edges.push_back(AdaptorBase::edge(ge[i]));
  2399           edges.push_back(AdaptorBase::edge(ge[i]));
  2400         }
  2400         }
  2401         adaptor->getNotifier(Edge()).erase(edges);
  2401         adaptor->notifier(Edge()).erase(edges);
  2402       }
  2402       }
  2403       virtual void build() {
  2403       virtual void build() {
  2404         std::vector<Edge> edges;
  2404         std::vector<Edge> edges;
  2405         const typename Parent::Notifier* notifier = Parent::getNotifier();
  2405         const typename Parent::Notifier* notifier = Parent::notifier();
  2406         GraphEdge it;
  2406         GraphEdge it;
  2407         for (notifier->first(it); it != INVALID; notifier->next(it)) {
  2407         for (notifier->first(it); it != INVALID; notifier->next(it)) {
  2408           edges.push_back(AdaptorBase::Parent::edge(it));
  2408           edges.push_back(AdaptorBase::Parent::edge(it));
  2409         }
  2409         }
  2410         adaptor->getNotifier(Edge()).add(edges);
  2410         adaptor->notifier(Edge()).add(edges);
  2411       }
  2411       }
  2412       virtual void clear() {
  2412       virtual void clear() {
  2413         std::vector<Edge> edges;
  2413         std::vector<Edge> edges;
  2414         const typename Parent::Notifier* notifier = Parent::getNotifier();
  2414         const typename Parent::Notifier* notifier = Parent::notifier();
  2415         GraphEdge it;
  2415         GraphEdge it;
  2416         for (notifier->first(it); it != INVALID; notifier->next(it)) {
  2416         for (notifier->first(it); it != INVALID; notifier->next(it)) {
  2417           edges.push_back(AdaptorBase::Parent::edge(it));
  2417           edges.push_back(AdaptorBase::Parent::edge(it));
  2418         }
  2418         }
  2419         adaptor->getNotifier(Edge()).erase(edges);
  2419         adaptor->notifier(Edge()).erase(edges);
  2420       }
  2420       }
  2421 
  2421 
  2422       const AdaptorBase* adaptor;
  2422       const AdaptorBase* adaptor;
  2423     };
  2423     };
  2424 
  2424