Boost logo

Boost :

From: Douglas Gregor (gregod_at_[hidden])
Date: 2003-05-10 21:31:29


I just finished writing out a BGL algorithm that requires 9 utility property
maps (!), and I found that I didn't want to separately allocate 9 vectors for
use with iterator property maps. Instead, I packaged all the data for the
separate property maps (all vertex property maps) into a single data
structure and wrote a property map adaptor that projects from a data
structure to a member. Now I only have to allocate a single vector of this
data bundle, and create a few projection property maps to each of the
members.

Here's the projection_property_map class template. Anyone need it in
boost/property_map.hpp?

template<typename PropertyMap, typename T, typename Class, T Class::*Member>
struct projection_property_map
  : put_get_helper<T&, projection_property_map<PropertyMap, T, Class, Member>
>
{
  typedef T value_type;
  typedef typename property_traits<PropertyMap>::key_type key_type;
  typedef value_type& reference;
  typedef lvalue_property_map_tag category;

  explicit projection_property_map(PropertyMap pmap) : pmap(pmap) {}

  reference operator[](const key_type& key) const
  {
    Class& c = const_cast<Class&>(pmap[key]);
    return c.*Member;
  }

private:
  PropertyMap pmap;
};

        Doug


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk