-// (C) Copyright Jeremy Siek 1999-2001. Permission to copy, use, modify,
-// sell and distribute this software is granted provided this
-// copyright notice appears in all copies. This software is provided
-// "as is" without express or implied warranty, and with no claim as
-// to its suitability for any purpose.
+// (C) Copyright Jeremy Siek 1999-2001.
+// 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)
+
+// See http://www.boost.org/libs/property_map for documentation.
#ifndef BOOST_PROPERTY_MAP_HPP
#define BOOST_PROPERTY_MAP_HPP
#include <cassert>
-#include <iterator>
#include <boost/config.hpp>
#include <boost/pending/cstddef.hpp>
+#include <boost/detail/iterator.hpp>
#include <boost/concept_check.hpp>
#include <boost/concept_archetype.hpp>
};
template <typename K, typename V>
const typename readable_property_map_archetype<K,V>::reference&
- get(const readable_property_map_archetype<K,V>&, const K&) {
+ get(const readable_property_map_archetype<K,V>&,
+ const typename readable_property_map_archetype<K,V>::key_type&)
+ {
typedef typename readable_property_map_archetype<K,V>::reference R;
return static_object<R>::get();
}
typedef writable_property_map_tag category;
};
template <typename K, typename V>
- void put(const writable_property_map_archetype<K,V>&, const K&, const V&) { }
+ void put(const writable_property_map_archetype<K,V>&,
+ const typename writable_property_map_archetype<K,V>::key_type&,
+ const typename writable_property_map_archetype<K,V>::value_type&) { }
template <class PMap, class Key>
void constraints() {
function_requires< ReadablePropertyMapConcept<PMap, Key> >();
function_requires< ConvertibleConcept<Category, LvalueTag> >();
-
+
+ typedef typename property_traits<PMap>::value_type value_type;
typedef typename require_same<
- const typename property_traits<PMap>::value_type&,
- reference>::type req;
+ const value_type&, reference>::type req;
reference ref = pmap[k];
ignore_unused_variable_warning(ref);
void constraints() {
boost::function_requires< ReadWritePropertyMapConcept<PMap, Key> >();
boost::function_requires<ConvertibleConcept<Category, LvalueTag> >();
+
+ typedef typename property_traits<PMap>::value_type value_type;
typedef typename require_same<
- typename property_traits<PMap>::value_type&,
+ value_type&,
reference>::type req;
reference ref = pmap[k];
typedef boost::lvalue_property_map_tag category;
inline safe_iterator_property_map(
- RandomAccessIterator first = RandomAccessIterator(),
- std::size_t n = 0,
+ RandomAccessIterator first,
+ std::size_t n_ = 0,
const IndexMap& _id = IndexMap() )
- : iter(first), n(n), index(_id) { }
+ : iter(first), n(n_), index(_id) { }
+ inline safe_iterator_property_map() { }
inline R operator[](key_type v) const {
assert(get(index, v) < n);
return *(iter + get(index, v)) ;
template <class RAIter, class ID>
inline safe_iterator_property_map<
RAIter, ID,
- typename std::iterator_traits<RAIter>::value_type,
- typename std::iterator_traits<RAIter>::reference>
+ typename boost::detail::iterator_traits<RAIter>::value_type,
+ typename boost::detail::iterator_traits<RAIter>::reference>
make_safe_iterator_property_map(RAIter iter, std::size_t n, ID id) {
function_requires< RandomAccessIteratorConcept<RAIter> >();
typedef safe_iterator_property_map<
RAIter, ID,
- typename std::iterator_traits<RAIter>::value_type,
- typename std::iterator_traits<RAIter>::reference> PA;
+ typename boost::detail::iterator_traits<RAIter>::value_type,
+ typename boost::detail::iterator_traits<RAIter>::reference> PA;
return PA(iter, n, id);
}
#endif
const_associative_property_map() : m_c(0) { }
const_associative_property_map(const C& c) : m_c(&c) { }
reference operator[](const key_type& k) const {
- return (*m_c)[k];
+ return m_c->find(k)->second;
}
private:
C const* m_c;