/
usr
/
include
/
boost
/
container
/
detail
/
/usr/include/boost/container/detail
mkdir
upload
Name
Size
Mode
Actions
adaptive_node_pool.hpp
5569
0644
edit
dl
rm
adaptive_node_pool_impl.hpp
54088
0644
edit
dl
rm
addressof.hpp
1063
0644
edit
dl
rm
advanced_insert_int.hpp
17668
0644
edit
dl
rm
algorithm.hpp
3880
0644
edit
dl
rm
allocation_type.hpp
2017
0644
edit
dl
rm
allocator_version_traits.hpp
5632
0644
edit
dl
rm
alloc_helpers.hpp
1867
0644
edit
dl
rm
alloc_lib.h
11742
0644
edit
dl
rm
auto_link.hpp
1657
0644
edit
dl
rm
block_list.hpp
4199
0644
edit
dl
rm
block_slist.hpp
4503
0644
edit
dl
rm
compare_functors.hpp
3992
0644
edit
dl
rm
config_begin.hpp
3637
0644
edit
dl
rm
config_end.hpp
480
0644
edit
dl
rm
construct_in_place.hpp
2952
0644
edit
dl
rm
container_or_allocator_rebind.hpp
1743
0644
edit
dl
rm
container_rebind.hpp
6610
0644
edit
dl
rm
copy_move_algo.hpp
38531
0644
edit
dl
rm
destroyers.hpp
9338
0644
edit
dl
rm
dispatch_uses_allocator.hpp
19733
0644
edit
dl
rm
dlmalloc.hpp
3444
0644
edit
dl
rm
flat_tree.hpp
61663
0644
edit
dl
rm
function_detector.hpp
3558
0644
edit
dl
rm
is_container.hpp
2213
0644
edit
dl
rm
is_contiguous_container.hpp
1712
0644
edit
dl
rm
is_sorted.hpp
1465
0644
edit
dl
rm
iterator.hpp
2590
0644
edit
dl
rm
iterators.hpp
29882
0644
edit
dl
rm
iterator_to_raw_pointer.hpp
971
0644
edit
dl
rm
math_functions.hpp
3872
0644
edit
dl
rm
minimal_char_traits_header.hpp
1057
0644
edit
dl
rm
min_max.hpp
997
0644
edit
dl
rm
mpl.hpp
3834
0644
edit
dl
rm
multiallocation_chain.hpp
10317
0644
edit
dl
rm
mutex.hpp
8665
0644
edit
dl
rm
next_capacity.hpp
2140
0644
edit
dl
rm
node_alloc_holder.hpp
17651
0644
edit
dl
rm
node_pool.hpp
4808
0644
edit
dl
rm
node_pool_impl.hpp
13171
0644
edit
dl
rm
pair.hpp
21281
0644
edit
dl
rm
pair_key_mapped_of_value.hpp
1466
0644
edit
dl
rm
placement_new.hpp
914
0644
edit
dl
rm
pool_common.hpp
1606
0644
edit
dl
rm
pool_common_alloc.hpp
2730
0644
edit
dl
rm
pool_resource.hpp
7744
0644
edit
dl
rm
singleton.hpp
4465
0644
edit
dl
rm
std_fwd.hpp
1450
0644
edit
dl
rm
thread_mutex.hpp
4449
0644
edit
dl
rm
transform_iterator.hpp
5103
0644
edit
dl
rm
tree.hpp
57038
0644
edit
dl
rm
type_traits.hpp
2714
0644
edit
dl
rm
value_functors.hpp
1118
0644
edit
dl
rm
value_init.hpp
1135
0644
edit
dl
rm
variadic_templates_tools.hpp
4959
0644
edit
dl
rm
version_type.hpp
2416
0644
edit
dl
rm
workaround.hpp
4501
0644
edit
dl
rm
Edit:
/usr/include/boost/container/detail/destroyers.hpp
(9338B)
////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Ion Gaztanaga 2005-2013. // // Distributed under 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) // // See http://www.boost.org/libs/container for documentation. // ////////////////////////////////////////////////////////////////////////////// #ifndef BOOST_CONTAINER_DESTROYERS_HPP #define BOOST_CONTAINER_DESTROYERS_HPP #ifndef BOOST_CONFIG_HPP # include <boost/config.hpp> #endif #if defined(BOOST_HAS_PRAGMA_ONCE) # pragma once #endif #include <boost/container/detail/config_begin.hpp> #include <boost/container/detail/workaround.hpp> #include <boost/container/allocator_traits.hpp> #include <boost/move/detail/to_raw_pointer.hpp> #include <boost/container/detail/version_type.hpp> namespace boost { namespace container { namespace dtl { //!A deleter for scoped_ptr that deallocates the memory //!allocated for an object using a STL allocator. template <class Allocator> struct scoped_deallocator { typedef allocator_traits<Allocator> allocator_traits_type; typedef typename allocator_traits_type::pointer pointer; typedef dtl::integral_constant<unsigned, boost::container::dtl:: version<Allocator>::value> alloc_version; private: void priv_deallocate(version_1) { m_alloc.deallocate(m_ptr, 1); } void priv_deallocate(version_2) { m_alloc.deallocate_one(m_ptr); } BOOST_MOVABLE_BUT_NOT_COPYABLE(scoped_deallocator) public: pointer m_ptr; Allocator& m_alloc; scoped_deallocator(pointer p, Allocator& a) : m_ptr(p), m_alloc(a) {} ~scoped_deallocator() { if (m_ptr)priv_deallocate(alloc_version()); } scoped_deallocator(BOOST_RV_REF(scoped_deallocator) o) : m_ptr(o.m_ptr), m_alloc(o.m_alloc) { o.release(); } pointer get() const { return m_ptr; } void set(const pointer &p) { m_ptr = p; } void release() { m_ptr = 0; } }; template <class Allocator> struct null_scoped_deallocator { typedef boost::container::allocator_traits<Allocator> AllocTraits; typedef typename AllocTraits::pointer pointer; typedef typename AllocTraits::size_type size_type; null_scoped_deallocator(pointer, Allocator&, size_type) {} void release() {} pointer get() const { return pointer(); } void set(const pointer &) {} }; //!A deleter for scoped_ptr that deallocates the memory //!allocated for an array of objects using a STL allocator. template <class Allocator> struct scoped_array_deallocator { typedef boost::container::allocator_traits<Allocator> AllocTraits; typedef typename AllocTraits::pointer pointer; typedef typename AllocTraits::size_type size_type; scoped_array_deallocator(pointer p, Allocator& a, size_type length) : m_ptr(p), m_alloc(a), m_length(length) {} ~scoped_array_deallocator() { if (m_ptr) m_alloc.deallocate(m_ptr, m_length); } void release() { m_ptr = 0; } private: pointer m_ptr; Allocator& m_alloc; size_type m_length; }; template <class Allocator> struct null_scoped_array_deallocator { typedef boost::container::allocator_traits<Allocator> AllocTraits; typedef typename AllocTraits::pointer pointer; typedef typename AllocTraits::size_type size_type; null_scoped_array_deallocator(pointer, Allocator&, size_type) {} void release() {} }; template <class Allocator> struct scoped_destroy_deallocator { typedef boost::container::allocator_traits<Allocator> AllocTraits; typedef typename AllocTraits::pointer pointer; typedef typename AllocTraits::size_type size_type; typedef dtl::integral_constant<unsigned, boost::container::dtl:: version<Allocator>::value> alloc_version; scoped_destroy_deallocator(pointer p, Allocator& a) : m_ptr(p), m_alloc(a) {} ~scoped_destroy_deallocator() { if(m_ptr){ AllocTraits::destroy(m_alloc, boost::movelib::to_raw_pointer(m_ptr)); priv_deallocate(m_ptr, alloc_version()); } } void release() { m_ptr = 0; } private: void priv_deallocate(const pointer &p, version_1) { AllocTraits::deallocate(m_alloc, p, 1); } void priv_deallocate(const pointer &p, version_2) { m_alloc.deallocate_one(p); } pointer m_ptr; Allocator& m_alloc; }; //!A deleter for scoped_ptr that destroys //!an object using a STL allocator. template <class Allocator> struct scoped_destructor_n { typedef boost::container::allocator_traits<Allocator> AllocTraits; typedef typename AllocTraits::pointer pointer; typedef typename AllocTraits::value_type value_type; typedef typename AllocTraits::size_type size_type; scoped_destructor_n(pointer p, Allocator& a, size_type n) : m_p(p), m_a(a), m_n(n) {} void release() { m_p = 0; } void increment_size(size_type inc) { m_n += inc; } void increment_size_backwards(size_type inc) { m_n += inc; m_p -= inc; } void shrink_forward(size_type inc) { m_n -= inc; m_p += inc; } ~scoped_destructor_n() { if(!m_p) return; value_type *raw_ptr = boost::movelib::to_raw_pointer(m_p); while(m_n--){ AllocTraits::destroy(m_a, raw_ptr++); } } private: pointer m_p; Allocator & m_a; size_type m_n; }; //!A deleter for scoped_ptr that destroys //!an object using a STL allocator. template <class Allocator> struct null_scoped_destructor_n { typedef boost::container::allocator_traits<Allocator> AllocTraits; typedef typename AllocTraits::pointer pointer; typedef typename AllocTraits::size_type size_type; null_scoped_destructor_n(pointer, Allocator&, size_type) {} void increment_size(size_type) {} void increment_size_backwards(size_type) {} void shrink_forward(size_type) {} void release() {} }; template<class Allocator> class scoped_destructor { typedef boost::container::allocator_traits<Allocator> AllocTraits; public: typedef typename Allocator::value_type value_type; scoped_destructor(Allocator &a, value_type *pv) : pv_(pv), a_(a) {} ~scoped_destructor() { if(pv_){ AllocTraits::destroy(a_, pv_); } } void release() { pv_ = 0; } void set(value_type *ptr) { pv_ = ptr; } value_type *get() const { return pv_; } private: value_type *pv_; Allocator &a_; }; template<class Allocator, class Value = typename Allocator::value_type> class value_destructor { typedef boost::container::allocator_traits<Allocator> AllocTraits; public: typedef Value value_type; value_destructor(Allocator &a, value_type &rv) : rv_(rv), a_(a) {} ~value_destructor() { AllocTraits::destroy(a_, &rv_); } private: value_type &rv_; Allocator &a_; }; template <class Allocator> class allocator_destroyer { typedef boost::container::allocator_traits<Allocator> AllocTraits; typedef typename AllocTraits::value_type value_type; typedef typename AllocTraits::pointer pointer; typedef dtl::integral_constant<unsigned, boost::container::dtl:: version<Allocator>::value> alloc_version; private: Allocator & a_; private: void priv_deallocate(const pointer &p, version_1) { AllocTraits::deallocate(a_,p, 1); } void priv_deallocate(const pointer &p, version_2) { a_.deallocate_one(p); } public: explicit allocator_destroyer(Allocator &a) : a_(a) {} void operator()(const pointer &p) { AllocTraits::destroy(a_, boost::movelib::to_raw_pointer(p)); this->priv_deallocate(p, alloc_version()); } }; template <class Allocator> class allocator_destroyer_and_chain_builder { typedef allocator_traits<Allocator> allocator_traits_type; typedef typename allocator_traits_type::value_type value_type; typedef typename Allocator::multiallocation_chain multiallocation_chain; Allocator & a_; multiallocation_chain &c_; public: allocator_destroyer_and_chain_builder(Allocator &a, multiallocation_chain &c) : a_(a), c_(c) {} void operator()(const typename Allocator::pointer &p) { allocator_traits<Allocator>::destroy(a_, boost::movelib::to_raw_pointer(p)); c_.push_back(p); } }; template <class Allocator> class allocator_multialloc_chain_node_deallocator { typedef allocator_traits<Allocator> allocator_traits_type; typedef typename allocator_traits_type::value_type value_type; typedef typename Allocator::multiallocation_chain multiallocation_chain; typedef allocator_destroyer_and_chain_builder<Allocator> chain_builder; Allocator & a_; multiallocation_chain c_; public: allocator_multialloc_chain_node_deallocator(Allocator &a) : a_(a), c_() {} chain_builder get_chain_builder() { return chain_builder(a_, c_); } ~allocator_multialloc_chain_node_deallocator() { a_.deallocate_individual(c_); } }; } //namespace dtl { } //namespace container { } //namespace boost { #include <boost/container/detail/config_end.hpp> #endif //#ifndef BOOST_CONTAINER_DESTROYERS_HPP
Save
cmd:
run