diff options
Diffstat (limited to '')
-rw-r--r-- | src/boost/libs/graph/example/put-get-helper-eg.cpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/boost/libs/graph/example/put-get-helper-eg.cpp b/src/boost/libs/graph/example/put-get-helper-eg.cpp new file mode 100644 index 00000000..9c14e1b9 --- /dev/null +++ b/src/boost/libs/graph/example/put-get-helper-eg.cpp @@ -0,0 +1,59 @@ +//======================================================================= +// Copyright 2001 Jeremy G. Siek, Andrew Lumsdaine, Lie-Quan Lee, +// +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +//======================================================================= +#include <vector> +#include <string> +#include <boost/property_map/property_map.hpp> +#include <boost/concept/assert.hpp> + +#ifdef BOOST_NO_STD_ITERATOR_TRAITS +#error This examples requires a compiler that provides a working std::iterator_traits +#endif + + +namespace foo +{ + using namespace boost; + template < class RandomAccessIterator, class IndexMap > + class iterator_property_map:public boost::put_get_helper < + typename std::iterator_traits < RandomAccessIterator >::reference, + iterator_property_map < RandomAccessIterator, IndexMap > > + { + public: + typedef std::ptrdiff_t key_type; + typedef typename std::iterator_traits < RandomAccessIterator >::value_type + value_type; + typedef typename std::iterator_traits < RandomAccessIterator >::reference + reference; + typedef boost::lvalue_property_map_tag category; + + iterator_property_map(RandomAccessIterator cc = RandomAccessIterator(), + const IndexMap & _id = + IndexMap()):iter(cc), index(_id) + { + } + reference operator[] (std::ptrdiff_t v) const + { + return *(iter + get(index, v)); + } + protected: + RandomAccessIterator iter; + IndexMap index; + }; + +} + +int +main() +{ + typedef std::vector < std::string > vec_t; + typedef foo::iterator_property_map < vec_t::iterator, + boost::identity_property_map > pmap_t; + using namespace boost; + BOOST_CONCEPT_ASSERT(( Mutable_LvaluePropertyMapConcept<pmap_t, int> )); + return 0; +} |