Ejemplo n.º 1
0
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);
		}
	}

}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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]);
		}
	}
}
Ejemplo n.º 4
0
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;
}
Ejemplo n.º 5
0
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]);
		}
	}
}
Ejemplo n.º 6
0
// 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;
}     
Ejemplo n.º 7
0
// 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;
}     
Ejemplo n.º 8
0
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";
	}
}