68 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			68 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * Copyright (c) 2014 Glen Joseph Fernandes 
							 | 
						||
| 
								 | 
							
								 * glenfe at live dot com
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Distributed under the Boost Software License, 
							 | 
						||
| 
								 | 
							
								 * Version 1.0. (See accompanying file LICENSE_1_0.txt 
							 | 
						||
| 
								 | 
							
								 * or copy at http://boost.org/LICENSE_1_0.txt)
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								#ifndef BOOST_SMART_PTR_DETAIL_ARRAY_COUNT_IMPL_HPP
							 | 
						||
| 
								 | 
							
								#define BOOST_SMART_PTR_DETAIL_ARRAY_COUNT_IMPL_HPP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <boost/smart_ptr/detail/array_allocator.hpp>
							 | 
						||
| 
								 | 
							
								#include <boost/smart_ptr/detail/sp_counted_impl.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace boost {
							 | 
						||
| 
								 | 
							
								    namespace detail {
							 | 
						||
| 
								 | 
							
								        template<class P, class A>
							 | 
						||
| 
								 | 
							
								        class sp_counted_impl_pda<P, ms_in_allocator_tag, A>
							 | 
						||
| 
								 | 
							
								            : public sp_counted_base {
							 | 
						||
| 
								 | 
							
								            typedef ms_in_allocator_tag D;
							 | 
						||
| 
								 | 
							
								            typedef sp_counted_impl_pda<P, D, A> Y;
							 | 
						||
| 
								 | 
							
								        public:
							 | 
						||
| 
								 | 
							
								            sp_counted_impl_pda(P, D, const A& allocator_)
							 | 
						||
| 
								 | 
							
								                : allocator(allocator_) {
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            virtual void dispose() {
							 | 
						||
| 
								 | 
							
								                allocator();
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            virtual void destroy() {
							 | 
						||
| 
								 | 
							
								#if !defined(BOOST_NO_CXX11_ALLOCATOR)
							 | 
						||
| 
								 | 
							
								                typedef typename std::allocator_traits<A>::
							 | 
						||
| 
								 | 
							
								                    template rebind_alloc<Y> YA;
							 | 
						||
| 
								 | 
							
								                typedef typename std::allocator_traits<A>::
							 | 
						||
| 
								 | 
							
								                    template rebind_traits<Y> YT;
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								                typedef typename A::template rebind<Y>::other YA;
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								                YA a1(allocator);
							 | 
						||
| 
								 | 
							
								#if !defined(BOOST_NO_CXX11_ALLOCATOR)
							 | 
						||
| 
								 | 
							
								                YT::destroy(a1, this);
							 | 
						||
| 
								 | 
							
								                YT::deallocate(a1, this, 1);
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								                this->~Y();
							 | 
						||
| 
								 | 
							
								                a1.deallocate(this, 1);
							 | 
						||
| 
								 | 
							
								#endif                
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            virtual void* get_deleter(const sp_typeinfo&) {
							 | 
						||
| 
								 | 
							
								                return &reinterpret_cast<char&>(allocator);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            virtual void* get_untyped_deleter() {
							 | 
						||
| 
								 | 
							
								                return &reinterpret_cast<char&>(allocator);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        private:
							 | 
						||
| 
								 | 
							
								            sp_counted_impl_pda(const sp_counted_impl_pda&);
							 | 
						||
| 
								 | 
							
								            sp_counted_impl_pda& operator=(const sp_counted_impl_pda&);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            A allocator;
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |