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);
   }
}
Esempio n. 2
0
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 );
}
Esempio n. 5
0
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);
		}
	}
}