
On Thu, 2007-04-12 at 23:50 +0300, Peter Dimov wrote:
void add_Component ( Component::ptr_t obj_ptr ) { bool no_duplicate; IdVertexMap_t::iterator pos; Vertex_t node;
if ( obj_ptr.get() == 0 ) { std::cerr << boost::format("Exception throw in %s at line %d") % __FILE__ % __LINE__ << std::endl;
return; }
boost::tie (pos, no_duplicate) = m_index.insert (std::make_pair(obj_ptr->get_ID(), node));
MSVC 8 says that you're using an uninitialized 'node' variable here. Is this intended?
The code needs to be changed to creating and fully initializing a node before adding it. If you read the rest of the function you will notice that I add the unitialized Vertex, grab a handle to it and then fill it in. I see the add_vertex function that takes in a const VertexProperties. So I can probably do something like: // CREATE property A to contain vertex_index and integer for id // CREATE property B to contain vertex_name and obj_ptr and A reference as base // CALL add_vertex ( property B, m_graph ) void add_Component ( Component::ptr_t obj_ptr ) { if ( obj_ptr.get() == 0 ) { std::cerr << boost::format("Exception throw in %s at line %d") % __FILE__ % __LINE__ << std::endl; return; } // Search to see if the ID is already in the index map IdVertexMap_t::iterator pos = m_index.find ( obj_ptr->get_ID() ); if ( pos == m_index.end() ) { // Insertion was successful VertexProperty_t comp_index_property ( obj_ptr->get_ID() ); boost::property< boost::vertex_name_t, boost::shared_ptr<Component> > comp_property ( obj_ptr, comp_index_property ); // Make a new vertex and return handle to 'node' node = add_vertex ( comp_index_property, m_graph ); // Add vertex to id map m_index.insert ( std::make_pair ( obj_ptr->get_ID(), node ) ); for ( std::mapboost::uint32_t,bool::const_iterator cpos = obj_ptr->get_Source_List_Begin(); cpos != obj_ptr->get_Source_List_End(); ++cpos ) { this->add_Child ( (*cpos).first, obj_ptr ); } } else { std::cerr << "ERROR: Duplicate source found. Skipping Component" << std::endl; return; } } } Now I have not compiled this since I am unsure I am understanding the boost::property constructors correctly. If my VertexProperties_t is define as follows am I correct or do I have the order reverse? Is this the best way to initialize a property? typedef property< vertex_index_t, uint32_t, property< vertex_name_t, boost::shared_ptr<Component> > > VertexProperty_t; Stephen