Boost logo

Boost Users :

Subject: Re: [Boost-users] [Graph] Labeled graph bug
From: Kikohs xxx (kikohs.x_at_[hidden])
Date: 2012-12-07 09:05:18


Hello,

I have created a labeled graph:

*typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS,
*
* Item, Link > UnGraph;*

My labels are uint64_t, I want to have my own ids on the graph.

If I add a node: m_g.add_vertex(nodeId, Item(nodeId));
Everything is fine, but there is a bug with find_labeled_vertex.

I want to check if a label is in my graph:

*auto BUnGraph::exists( nid source ) const -> bool*
*{*
* if( m_g.vertex(source) == UnGraph::null_vertex() )*
* return false;*
* else*
* return true;*
*}*

But the method vertex(source) gives me false results, and returns me a
default constructed vertex_descriptor when a node is not in the graph
instead of a null_vertex().

I have isolated the method.

labeled_graph.hpp
* /** @name Find Labeled Vertex */*
* //@{*
* // Tag dispatch for sequential maps (i.e., vectors).*
* template <typename Container, typename Graph, typename Label>*
* typename graph_traits<Graph>::vertex_descriptor*
* find_labeled_vertex(Container const& c, Graph const&, Label const& l,*
* random_access_container_tag)*
* { return l < c.size() ? c[l] : graph_traits<Graph>::null_vertex(); }*

I have checked the internal map.
If I add a single node in the graph, map.size() == 42. Instead of 1 !
If I add 5 nodes size() == 248.

*So any label number inferior to map.size() will give false results ...*

What's going on ?

Thank you.



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net