// 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 namespace boost { namespace geometry { namespace index { namespace detail { namespace rtree { template class scoped_deallocator { typedef boost::container::allocator_traits 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