summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/graph/example/put-get-helper-eg.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/boost/libs/graph/example/put-get-helper-eg.cpp59
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;
+}