X-Git-Url: http://plrg.eecs.uci.edu/git/?p=c11tester.git;a=blobdiff_plain;f=cyclegraph.cc;h=eaddc8e1714629f8834a5b11c891f8009b2e1237;hp=3bb5ab84a88c240d11ee5b7ae1ed01d2ab7c7207;hb=62dbff8dbca80ded5959e88ec9c177bef9108546;hpb=4da2859902f1096053a2d9857df502d3bb94e6e4 diff --git a/cyclegraph.cc b/cyclegraph.cc index 3bb5ab84..eaddc8e1 100644 --- a/cyclegraph.cc +++ b/cyclegraph.cc @@ -168,13 +168,16 @@ bool CycleGraph::mergeNodes(CycleNode *w_node, CycleNode *p_node, * Adds an edge between two CycleNodes. * @param fromnode The edge comes from this CycleNode * @param tonode The edge points to this CycleNode + * @return True, if new edge(s) are added; otherwise false */ -void CycleGraph::addNodeEdge(CycleNode *fromnode, CycleNode *tonode) +bool CycleGraph::addNodeEdge(CycleNode *fromnode, CycleNode *tonode) { + bool added; + if (!hasCycles) hasCycles = checkReachable(tonode, fromnode); - if (fromnode->addEdge(tonode)) + if ((added = fromnode->addEdge(tonode))) rollbackvector.push_back(fromnode); /* @@ -186,9 +189,12 @@ void CycleGraph::addNodeEdge(CycleNode *fromnode, CycleNode *tonode) if (!hasCycles) hasCycles = checkReachable(tonode, rmwnode); - if (rmwnode->addEdge(tonode)) + if (rmwnode->addEdge(tonode)) { rollbackvector.push_back(rmwnode); + added = true; + } } + return added; } /**