void graph::removeEdge(edge* e) { if (e) { if (isNodeExist(e->start) && isNodeExist(e->end) && edges.find(e) != edges.end()) { e->start->edges.erase(e); e->end->edges.erase(e); edges.erase(e); } } }
bool graph::isConnected(vertex* n1, vertex* n2) const { if (isNodeExist(n1) && isNodeExist(n2)) { for (set<edge*>::const_iterator itr = n1->edges.begin(); itr != n1->edges.end(); ++itr) { if ((*itr)->end == n2) return true; } } return false; }
void graph::removeEdge(vertex *v1, vertex *v2) { if (isNodeExist(v1) || isNodeExist(v2)) { vector<edge*> toRemove; for (set<edge*>::iterator itr = edges.begin(); itr != edges.end(); ++itr) { if ((*itr)->start == v1 && (*itr)->end == v2) { toRemove.push_back(*itr); } } for (unsigned int i = 0; i < toRemove.size(); i++) { removeEdge(toRemove[i]); } } }
bool graph::isNodeExist(const int id) const { map<int, vertex*>::const_iterator itr1 = nodeMap.find(id); if (itr1 != nodeMap.end()) { return isNodeExist(itr1->second); } return false; }
void graph::removeEdge(const int v1, const int v2) { if (isNodeExist(v1) && isNodeExist(v2)) { map<int, vertex*>::iterator itr1 = nodeMap.find(v1); map<int, vertex*>::iterator itr2 = nodeMap.find(v2); vector<edge*> toRemove; for (set<edge*>::iterator itr = edges.begin(); itr != edges.end(); ++itr) { if ((*itr)->start == itr1->second && (*itr)->end == itr2->second) { toRemove.push_back(*itr); } } for (unsigned int i = 0; i < toRemove.size(); i++) { removeEdge(toRemove[i]); } } }
// Add a link LnkFsNode* DirFsNode::mklnk(std::string node_name, FsNode *lnk) { // Check if a node exists with the same name if (isNodeExist(node_name)) { std::cout << __FUNCTION__ << " : " << node_name << " node already exists ! \n"; return nullptr; } LnkFsNode *dnode = new LnkFsNode(node_name, lnk); dnode->setParent(this); nodeList.push_back(dnode); return dnode; }
// Add a File FileFsNode* DirFsNode::fopen(std::string node_name) { // Check if a node exists with the same name if (isNodeExist(node_name)) { std::cout << __FUNCTION__ << " : " << node_name << " node already exists ! \n"; // Return the node is it is a file node. Else return null. return dynamic_cast<FileFsNode *>(getNode(node_name)); } FileFsNode *dnode = new FileFsNode(node_name); dnode->setParent(this); nodeList.push_back(dnode); return dnode; }
void graph::removeVertex(vertex* v) { if (isNodeExist(v)) { vector<edge*> toRemove; for (set<edge*>::iterator itr = edges.begin(); itr != edges.end(); ++itr) { if ((*itr)->start == v || (*itr)->end == v) { toRemove.push_back(*itr); } } for (unsigned int i = 0; i < toRemove.size(); i++) { removeEdge(toRemove[i]); } nodes.erase(v); } else { cout << "\n Node doesn't exist \n"; } }