void ChangeQueue::DelNode(Layout::Node *n) { insN.erase(n); modN.erase(n); delN.insert(n); n = current->find(n); // remove edges that are currently inserted for(Layout::nodeedge_iter i = n->alledges().begin(); i!=n->alledges().end(); ++i) DelEdge(*i); }
// delete all edges between the two nodes void TNEANet::DelEdge(const int& SrcNId, const int& DstNId, const bool& IsDir) { int EId = 0; bool Edge = IsEdge(SrcNId, DstNId, EId, IsDir); IAssert(Edge); // there is at least one edge while (Edge) { DelEdge(EId); Edge = IsEdge(SrcNId, DstNId, EId, IsDir); } }
ChangeQueue &ChangeQueue::operator+=(ChangeQueue &Q) { assert(client==Q.client); Layout::node_iter ni; Layout::graphedge_iter ei; for(ni = Q.insN.nodes().begin(); ni!=Q.insN.nodes().end(); ++ni) InsNode(*ni); for(ei = Q.insE.edges().begin(); ei!=Q.insE.edges().end(); ++ei) InsEdge(*ei); for(ni = Q.modN.nodes().begin(); ni!=Q.modN.nodes().end(); ++ni) ModNode(*ni,igd<Update>(*ni)); for(ei = Q.modE.edges().begin(); ei!=Q.modE.edges().end(); ++ei) ModEdge(*ei,igd<Update>(*ei)); for(ni = Q.delN.nodes().begin(); ni!=Q.delN.nodes().end(); ++ni) DelNode(*ni); for(ei = Q.delE.edges().begin(); ei!=Q.delE.edges().end(); ++ei) DelEdge(*ei); GraphUpdateFlags() |= Q.GraphUpdateFlags(); return *this; }