123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- // Boost.Geometry Index
- //
- // R-tree scoped deallocator
- //
- // Copyright (c) 2011-2018 Adam Wulkiewicz, Lodz, Poland.
- //
- // This file was modified by Oracle on 2021.
- // Modifications copyright (c) 2021 Oracle and/or its affiliates.
- // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
- //
- // Use, modification and distribution is subject to 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)
- #ifndef BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_SCOPED_DEALLOCATOR_HPP
- #define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_SCOPED_DEALLOCATOR_HPP
- #include <boost/container/allocator_traits.hpp>
- namespace boost { namespace geometry { namespace index {
- namespace detail { namespace rtree {
- template <typename Alloc>
- class scoped_deallocator
- {
- typedef boost::container::allocator_traits<Alloc> alloc_traits;
- scoped_deallocator(scoped_deallocator const&);
- scoped_deallocator & operator=(scoped_deallocator const&);
- public:
- typedef typename alloc_traits::pointer pointer;
- inline scoped_deallocator(pointer p, Alloc & a)
- : m_ptr(p), m_alloc(a)
- {}
- inline ~scoped_deallocator()
- {
- if ( m_ptr )
- {
- alloc_traits::deallocate(m_alloc, m_ptr, 1);
- }
- }
- inline void release()
- {
- m_ptr = 0;
- }
- private:
- pointer m_ptr;
- Alloc & m_alloc;
- };
- }} // namespace detail::rtree
- }}} // namespace boost::geometry::index
- #endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_SCOPED_DEALLOCATOR_HPP
|