1 // Boost.Geometry Index
2 //
3 // R-tree scoped deallocator
4 //
5 // Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland.
6 //
7 // Use, modification and distribution is subject to the Boost Software License,
8 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
9 // http://www.boost.org/LICENSE_1_0.txt)
10 
11 #ifndef BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_SCOPED_DEALLOCATOR_HPP
12 #define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_SCOPED_DEALLOCATOR_HPP
13 
14 namespace boost { namespace geometry { namespace index {
15 
16 namespace detail { namespace rtree {
17 
18 template <typename Alloc>
19 class scoped_deallocator
20 {
21     scoped_deallocator(scoped_deallocator const&);
22     scoped_deallocator & operator=(scoped_deallocator const&);
23 public:
24     typedef typename Alloc::pointer pointer;
scoped_deallocator(pointer p,Alloc & a)25     inline scoped_deallocator(pointer p, Alloc & a)
26         : m_ptr(p), m_alloc(a)
27     {}
~scoped_deallocator()28     inline ~scoped_deallocator()
29     {
30         if ( m_ptr )
31         {
32             boost::container::allocator_traits<Alloc>::deallocate(m_alloc, m_ptr, 1);
33         }
34     }
release()35     inline void release()
36     {
37         m_ptr = 0;
38     }
39 private:
40     pointer m_ptr;
41     Alloc & m_alloc;
42 };
43 
44 }} // namespace detail::rtree
45 
46 }}} // namespace boost::geometry::index
47 
48 #endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_SCOPED_DEALLOCATOR_HPP
49