void flowgraph::operator = ( const flowgraph& f ) { if( this != &f ) { destructor d( &b ); visitnodes( d, &b, &e ); b. pred. clear( ); b. succ. clear( ); e. pred. clear( ); e. succ. clear( ); n = f. n; c = f. c; copy_from(f); } }
void Graph :: visitnodes(GraphNode * g){ //void visitNodes(GraphNode * g){ if (g->isVisited()) { return; } else{ g->visited(true); vector<GraphNode *> children = g->nodesvec(); //printf("visited node: %s, children %d \n", g->getLabel().c_str(), (int)children.size()); for (int c=0; c<children.size(); c++) { visitnodes(children.at(c)); } //for_each (children.begin(), children.end(), Graph :: visitnodes); } }
void flowgraph::copy_from( const flowgraph& f ) { copier cop( &f, this ); visitnodes( cop, const_cast< flowgraph::node* > ( & ( f.b )), &( f.e )); ASSERT( cop. moved. size( ) == n ); // It remains to update the connections: for( std::map< const node* , node* > :: const_iterator p = cop. moved. begin( ); p != cop. moved. end( ); ++ p ) { cop. copy( p -> first -> pred, p -> second -> pred ); cop. copy( p -> first -> succ, p -> second -> succ ); } cop. copy( f. b. pred, b. pred ); cop. copy( f. b. succ, b. succ ); }
flowgraph::~flowgraph( ) { destructor d( &b ); visitnodes( d, &b, &e ); }
void Graph::connectedcomponent(string strid){ vector<GraphNode *> newnodes; vector<GraphEdge *> newedges; //make sure all the nodes are unmarked for (int a=0; a<adjlist.size(); a++) { adjlist.at(a)->visited(false); } //find connected nodes to a specified node //find the specified node GraphNode * thenode; for (int a=0; a<adjlist.size(); a++) { if(strid == adjlist.at(a)->getstrid()){ thenode = adjlist.at(a); break; } } if(!thenode){ printf("Graph::connectedcomponent, ERROR FINDING NODE \n"); } else{ //mark all connected nodes as visited visitnodes(thenode); for (int a=0; a<adjlist.size(); a++) { if(adjlist.at(a)->isVisited()){ adjlist.at(a)->setClr(space::Vec3f(1.0, 1.0, 0.0)); newnodes.push_back(adjlist.at(a)); } } adjlist = newnodes; for (int a=0; a<adjlist.size(); a++) { vector<GraphEdge* > adeges = adjlist.at(a)->edgesvec(); for(int d=0; d<adeges.size(); d++) { //check if the edge has already been deleted GraphEdge * edg = adeges.at(d); int pos = std::find(newedges.begin(), newedges.end(), edg) - newedges.begin(); if( pos < newedges.size() ){ //printf("pos: %d \n", pos); } else { newedges.push_back(edg); } } } edgelist = newedges; //make sure all the nodes are unmarked //reset index number as the pos in the adjacency vector for (int a=0; a<adjlist.size(); a++) { adjlist.at(a)->visited(false); adjlist.at(a)->setnodeid(a); } } }