Skip to content

[API] Add convenience headers for property maps #471

@Becheler

Description

@Becheler

Problem

As I am rewriting the documentation for the property map system, I find the current way to navigate headers rather complex:

Header Contents
<boost/graph/properties.hpp> Internal property tags (vertex_index, edge_weight, ...), get(tag, g)
<boost/property_map/property_map.hpp> iterator_property_map, static_property_map, associative_property_map, dummy_property_map
<boost/property_map/vector_property_map.hpp> vector_property_map
<boost/property_map/function_property_map.hpp> make_function_property_map
<boost/property_map/transform_value_property_map.hpp> make_transform_value_property_map
<boost/graph/property_maps/constant_property_map.hpp> constant_property_map, make_constant_property
<boost/graph/property_maps/null_property_map.hpp> null_property_map, make_null_property

Property map types are split across two libraries: boost/graph/ (internal properties, constant/null maps) and boost/property_map/ (the generic adaptors). This split is an implementation detail users should not have to think about.

Solution

I am thinking about a convenience header that pulls those in an uniformize the namespaces. That would reduce the friction for newcomers, and we can leave this previous table in the documentation if more experimented users want to trim dependencies ?

#include <boost/graph/properties.hpp>   // 374 lines pulls the PM library and its BGL extensions
   //   boost/property_map/property_map.hpp (iterator_, static_, assoc_, dummy_)
   //   boost/graph/property_maps/constant_property_map.hpp
   //   boost/graph/property_maps/null_property_map.hpp
#include <boost/property_map/vector_property_map.hpp>  // 96 lines
#include <boost/property_map/function_property_map.hpp>  // 66 lines
#include <boost/property_map/transform_value_property_map.hpp>  // 67 lines

If I understood correctly, all of the underlying types live in the boost:: namespace so we are good namespace-wise.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions