1 //=======================================================================
2 // Copyright 2001 Jeremy G. Siek, Andrew Lumsdaine, Lie-Quan Lee,
4 // Distributed under the Boost Software License, Version 1.0. (See
5 // accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt)
7 //=======================================================================
10 #include <boost/property_map/property_map.hpp>
11 #include <boost/concept/assert.hpp>
13 #ifdef BOOST_NO_STD_ITERATOR_TRAITS
14 #error This examples requires a compiler that provides a working std::iterator_traits
20 using namespace boost
;
21 template < class RandomAccessIterator
, class IndexMap
>
22 class iterator_property_map
:public boost::put_get_helper
<
23 typename
std::iterator_traits
< RandomAccessIterator
>::reference
,
24 iterator_property_map
< RandomAccessIterator
, IndexMap
> >
27 typedef std::ptrdiff_t key_type
;
28 typedef typename
std::iterator_traits
< RandomAccessIterator
>::value_type
30 typedef typename
std::iterator_traits
< RandomAccessIterator
>::reference
32 typedef boost::lvalue_property_map_tag category
;
34 iterator_property_map(RandomAccessIterator cc
= RandomAccessIterator(),
35 const IndexMap
& _id
=
36 IndexMap()):iter(cc
), index(_id
)
39 reference
operator[] (std::ptrdiff_t v
) const
41 return *(iter
+ get(index
, v
));
44 RandomAccessIterator iter
;
53 typedef std::vector
< std::string
> vec_t
;
54 typedef foo::iterator_property_map
< vec_t::iterator
,
55 boost::identity_property_map
> pmap_t
;
56 using namespace boost
;
57 BOOST_CONCEPT_ASSERT(( Mutable_LvaluePropertyMapConcept
<pmap_t
, int> ));