// Copyright 2016, University of Freiburg, // Chair of Algorithms and Data Structures. // Authors: Patrick Brosi // _____________________________________________________________________________ template Graph::~Graph() { for (auto n : _nodes) delete n; } // _____________________________________________________________________________ template Edge* Graph::addEdg(Node* from, Node* to) { return addEdg(from, to, E()); } // _____________________________________________________________________________ template const std::set*>& Graph::getNds() const { return _nodes; } // _____________________________________________________________________________ template typename std::set*>::iterator Graph::delNd(Node* n) { return delNd(_nodes.find(n)); } // _____________________________________________________________________________ template typename std::set*>::iterator Graph::delNd( typename std::set*>::iterator i) { delete *i; return _nodes.erase(i); } // _____________________________________________________________________________ template void Graph::delEdg(Node* from, Node* to) { Edge* toDel = getEdg(from, to); if (!toDel) return; from->removeEdge(toDel); to->removeEdge(toDel); assert(!getEdg(from, to)); delete toDel; } // _____________________________________________________________________________ template Edge* Graph::getEdg(Node* from, Node* to) { for (auto e : from->getAdjList()) { if (e->getOtherNd(from) == to) return e; } return 0; } // _____________________________________________________________________________ template Node* Graph::sharedNode(const Edge* a, const Edge* b) { Node* r = 0; if (a->getFrom() == b->getFrom() || a->getFrom() == b->getTo()) r = a->getFrom(); if (a->getTo() == b->getFrom() || a->getTo() == b->getTo()) r = a->getTo(); return r; } // _____________________________________________________________________________ template const Edge* Graph::getEdg(const Node* from, const Node* to) const { for (auto e : from->getAdjList()) { if (e->getOtherNd(from) == to) return e; } return 0; }