Modifying bundled properties from visitor

Posted by ravenspoint on Stack Overflow See other posts from Stack Overflow or by ravenspoint
Published on 2009-10-02T17:45:07Z Indexed on 2010/04/09 15:23 UTC
Read the original article Hit count: 205

Filed under:

How should I modify the bundled properties of a vertex from inside a visitor?

I would like to use the simple method of sub-scripting the graph, but the graph parameter passed into the visitor is const, so compiler disallows changes.

I can store a reference to the graph in the visitor, but this seems weird.

/**

  A visitor which identifies vertices as leafs or trees

*/
class bfs_vis_leaf_finder:public default_bfs_visitor {

public:
    /**

    Constructor

    @param[in] total reference to int variable to store total number of leaves
    @param[in] g reference to graph ( used to modify bundled properties )

    */
    bfs_vis_leaf_finder( int& total, graph_t& g ) :
      myTotal( total ), myGraph( g )
      {
    	  myTotal = 0;
      }

    /**

    Called when the search finds a new vertex

    If the vertex has no children, it is a leaf and the total leaf count is incremented

    */
    template <typename Vertex, typename Graph>
    void discover_vertex( Vertex u, Graph& g)
    {
    	if( out_edges( u, g ).first == out_edges( u, g ).second ) {
    		myTotal++;
    		//g[u].myLevel = s3d::cV::leaf;
    		myGraph[u].myLevel = s3d::cV::leaf;
    	} else {
    		//g[u].myLevel = s3d::cV::tree;
    		myGraph[u].myLevel = s3d::cV::tree;
    	}
    }

    int& myTotal;
    graph_t& myGraph;
};

© Stack Overflow or respective owner

Related posts about boost-graph