53 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| //  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
 | 
