12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- // Copyright (C) 2009 Trustees of Indiana University
- // Authors: Jeremiah Willcock, Andrew Lumsdaine
- // 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_SHARED_ARRAY_PROPERTY_MAP_HPP
- #define BOOST_SHARED_ARRAY_PROPERTY_MAP_HPP
- #include <boost/smart_ptr/shared_array.hpp>
- #include <boost/property_map/property_map.hpp>
- namespace boost {
- template <class T, class IndexMap>
- class shared_array_property_map
- : public boost::put_get_helper<T&, shared_array_property_map<T, IndexMap> >
- {
- public:
- typedef typename property_traits<IndexMap>::key_type key_type;
- typedef T value_type;
- typedef T& reference;
- typedef boost::lvalue_property_map_tag category;
- inline shared_array_property_map(): data(), index() {}
- explicit inline shared_array_property_map(
- size_t n,
- const IndexMap& _id = IndexMap())
- : data(new T[n]), index(_id) {}
- inline T& operator[](key_type v) const {
- return data[get(index, v)];
- }
- private:
- boost::shared_array<T> data;
- IndexMap index;
- };
- template <class T, class IndexMap>
- shared_array_property_map<T, IndexMap>
- make_shared_array_property_map(size_t n, const T&, const IndexMap& index) {
- return shared_array_property_map<T, IndexMap>(n, index);
- }
- } // end namespace boost
- #endif // BOOST_SHARED_ARRAY_PROPERTY_MAP_HPP
|