Boost logo

Boost Users :

From: Chris Russell (cdr_at_[hidden])
Date: 2002-09-16 10:07:56


Okay - I think I understand this. Since posting I've re-read the property
map documentation online and in the book and am still confused about several
points (forgive me ignorance - I'm learning a lot of new concepts (in the
canonical sense) at once). Will you help me with these follow-up questions
please:

Assertions: (please validate)

1. a property map maps some type (an enum or struct tag) to some other
type.

2. a property map declaration may contain nested property map declarations
but this does not reflect a hierarchy - it's just a template trick.
Effectively the property maps are peers.

3. graph containers like adjacency list will internally create a new
value_type object upon insertion of a vertex (in the case of a vertex
property map) and an edge (in the case of an edge property map).

Assuming the above assertions are correct, I'm still confused about several
points:

1. a boost::get call to return either a property_map<x,y>::type or
property_map<x,y>::const_type by value? I think yes. The question is does
return by value also copy all the value_type's? I'm guessing not because
this would be a huge performance hit. Just the property map itself is
copied. Correct?

2. In the case of my algorithm visitor, I am passed a const reference to a
graph that will result in a boost::get returning a const_type a property
map. I can understand that changing the value_type's of an arbitrary
property map could potentially screw up an algorithm (if the algorithm is
using the specific property that I am trying to write). Is this why the
graph passed to the visitor is const? In the case where I need to write an
internal property map that is not being used by the specific algorithm (in
the case of my dfs search, dfs is using the vertex color and I want to write
another, distinct internal property map that I have registered with my graph
class), I should pass a reference to the specific map into the constructor
of the visitor?

Thank you for your help Jeremy.

- Regards
Chris

"Jeremy Siek" <jsiek_at_[hidden]> wrote in message
news:Pine.GSO.4.44.0209152139410.629-100000_at_zaphod.osl.iu.edu...
> Hi Chris,
>
> On Sun, 15 Sep 2002, Chris Russell wrote:
> cdr> What determines when boost::get(Graph, vertex_myproperty_t) returns a
> cdr> boost::property_map<graph_t, vertex_myproperty>::type vs. a
> cdr> ::const_type?
>
> The constness of the graph object that is passed to get().
>
> cdr> vertex_myproperty_map_t MyMap = get(vertex_myproperty, Graph);
> cdr>
> cdr> ^--- this works as I expected. However, if I try to get a copy of my
> cdr> property map this way inside a dfs visitor method, my compiler tells
> cdr> me that
> cdr> there's no suitable conversion from property_map<graph_t,
> cdr> vertex_myproperty_t>::const_type to property_map<graph_t,
> cdr> vertex_myproperty_t>::type (IA32 6.0 Intel compiler).
>
> You've got a const graph object inside the visitor, so you need to use the
> const property map.
>
> Cheers,
> Jeremy
>
>
> ----------------------------------------------------------------------
> Jeremy Siek http://php.indiana.edu/~jsiek/
> Ph.D. Student, Indiana Univ. B'ton email: jsiek_at_[hidden]
> C++ Booster (http://www.boost.org) office phone: (812) 855-3608
> ----------------------------------------------------------------------
>
>
>


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