]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/smart_ptr/include/boost/smart_ptr/detail/array_count_impl.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / smart_ptr / include / boost / smart_ptr / detail / array_count_impl.hpp
CommitLineData
7c673cae
FG
1/*
2 * Copyright (c) 2014 Glen Joseph Fernandes
3 * glenfe at live dot com
4 *
5 * Distributed under the Boost Software License,
6 * Version 1.0. (See accompanying file LICENSE_1_0.txt
7 * or copy at http://boost.org/LICENSE_1_0.txt)
8 */
9#ifndef BOOST_SMART_PTR_DETAIL_ARRAY_COUNT_IMPL_HPP
10#define BOOST_SMART_PTR_DETAIL_ARRAY_COUNT_IMPL_HPP
11
12#include <boost/smart_ptr/detail/array_allocator.hpp>
13#include <boost/smart_ptr/detail/sp_counted_impl.hpp>
14
15namespace boost {
16 namespace detail {
17 template<class P, class A>
18 class sp_counted_impl_pda<P, ms_in_allocator_tag, A>
19 : public sp_counted_base {
20 typedef ms_in_allocator_tag D;
21 typedef sp_counted_impl_pda<P, D, A> Y;
22 public:
23 sp_counted_impl_pda(P, D, const A& allocator_)
24 : allocator(allocator_) {
25 }
26
27 virtual void dispose() {
28 allocator();
29 }
30
31 virtual void destroy() {
32#if !defined(BOOST_NO_CXX11_ALLOCATOR)
33 typedef typename std::allocator_traits<A>::
34 template rebind_alloc<Y> YA;
35 typedef typename std::allocator_traits<A>::
36 template rebind_traits<Y> YT;
37#else
38 typedef typename A::template rebind<Y>::other YA;
39#endif
40 YA a1(allocator);
41#if !defined(BOOST_NO_CXX11_ALLOCATOR)
42 YT::destroy(a1, this);
43 YT::deallocate(a1, this, 1);
44#else
45 this->~Y();
46 a1.deallocate(this, 1);
47#endif
48 }
49
50 virtual void* get_deleter(const sp_typeinfo&) {
51 return &reinterpret_cast<char&>(allocator);
52 }
53
54 virtual void* get_untyped_deleter() {
55 return &reinterpret_cast<char&>(allocator);
56 }
57
58 private:
59 sp_counted_impl_pda(const sp_counted_impl_pda&);
60 sp_counted_impl_pda& operator=(const sp_counted_impl_pda&);
61
62 A allocator;
63 };
64 }
65}
66
67#endif