diff options
Diffstat (limited to 'utils/lvalue_pmap.h')
-rwxr-xr-x | utils/lvalue_pmap.h | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/utils/lvalue_pmap.h b/utils/lvalue_pmap.h new file mode 100755 index 00000000..03ddf5e7 --- /dev/null +++ b/utils/lvalue_pmap.h @@ -0,0 +1,25 @@ +#ifndef LVALUE_PMAP_H +#define LVALUE_PMAP_H + +#include <boost/property_map/property_map.hpp> + +// i checked: boost provides get and put given [] + +// lvalue property map pmapname<P> that is: P p; valtype &v=p->name; +#define PMAP_MEMBER_INDIRECT(pmapname,valtype,name) template <class P> struct pmapname { \ + typedef P key_type; \ + typedef valtype value_type; \ + typedef value_type & reference; \ + typedef boost::lvalue_property_map_tag category; \ + reference operator[](key_type p) const { return p->name; } \ +}; + +#define PMAP_MEMBER_INDIRECT_2(pmapname,name) template <class P,class R> struct pmapname { \ + typedef P key_type; \ + typedef R value_type; \ + typedef value_type & reference; \ + typedef boost::lvalue_property_map_tag category; \ + reference operator[](key_type p) const { return p->name; } \ +}; + +#endif |