29 #ifndef _EXT_ALLOC_TRAITS_H 
   30 #define _EXT_ALLOC_TRAITS_H 1 
   32 #pragma GCC system_header 
   34 #if __cplusplus >= 201103L 
   41 namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
 
   43 _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   45 #if __cplusplus >= 201103L 
   46   template<
typename _Alloc>
 
   47     struct __allocator_always_compares_equal
 
   48     { 
static const bool value = 
false; };
 
   50   template<
typename _Alloc>
 
   51     const bool __allocator_always_compares_equal<_Alloc>::value;
 
   53   template<
typename _Tp>
 
   54     struct __allocator_always_compares_equal<std::allocator<_Tp>>
 
   55     { 
static const bool value = 
true; };
 
   57   template<
typename _Tp>
 
   58     const bool __allocator_always_compares_equal<std::allocator<_Tp>>::value;
 
   62   template<
typename _Tp, 
typename _Array>
 
   64     { 
static const bool value = 
true; };
 
   66   template<
typename _Tp, 
typename _Array>
 
   68     __allocator_always_compares_equal<array_allocator<_Tp, _Array>>::value;
 
   72   template<
typename _Tp>
 
   74     { 
static const bool value = 
true; };
 
   76   template<
typename _Tp>
 
   77     const bool __allocator_always_compares_equal<bitmap_allocator<_Tp>>::value;
 
   81   template<
typename _Tp>
 
   83     { 
static const bool value = 
true; };
 
   85   template<
typename _Tp>
 
   86     const bool __allocator_always_compares_equal<malloc_allocator<_Tp>>::value;
 
   88   template<
typename> 
struct mt_allocator;
 
   90   template<
typename _Tp>
 
   91     struct __allocator_always_compares_equal<mt_allocator<_Tp>>
 
   92     { 
static const bool value = 
true; };
 
   94   template<
typename _Tp>
 
   95     const bool __allocator_always_compares_equal<mt_allocator<_Tp>>::value;
 
   99   template<
typename _Tp>
 
  101     { 
static const bool value = 
true; };
 
  103   template<
typename _Tp>
 
  104     const bool __allocator_always_compares_equal<new_allocator<_Tp>>::value;
 
  106   template<
typename> 
struct pool_allocator;
 
  108   template<
typename _Tp>
 
  109     struct __allocator_always_compares_equal<pool_allocator<_Tp>>
 
  110     { 
static const bool value = 
true; };
 
  112   template<
typename _Tp>
 
  113     const bool __allocator_always_compares_equal<pool_allocator<_Tp>>::value;
 
  120 template<
typename _Alloc>
 
  122 #if __cplusplus >= 201103L
 
  127 #if __cplusplus >= 201103L 
  135     typedef value_type&                             reference;
 
  136     typedef const value_type&                       const_reference;
 
  137     using _Base_type::allocate;
 
  138     using _Base_type::deallocate;
 
  139     using _Base_type::construct;
 
  140     using _Base_type::destroy;
 
  141     using _Base_type::max_size;
 
  144     template<
typename _Ptr>
 
  145       struct __is_custom_pointer
 
  147                                      && !std::is_pointer<_Ptr>::value>
 
  152     template<
typename _Ptr, 
typename... _Args>
 
  153       static typename std::enable_if<__is_custom_pointer<_Ptr>::value>::type
 
  154       construct(_Alloc& __a, _Ptr __p, _Args&&... __args)
 
  157                   std::forward<_Args>(__args)...);
 
  161     template<
typename _Ptr>
 
  162       static typename std::enable_if<__is_custom_pointer<_Ptr>::value>::type
 
  163       destroy(_Alloc& __a, _Ptr __p)
 
  166     static _Alloc _S_select_on_copy(
const _Alloc& __a)
 
  167     { 
return _Base_type::select_on_container_copy_construction(__a); }
 
  169     static void _S_on_swap(_Alloc& __a, _Alloc& __b)
 
  170     { std::__alloc_on_swap(__a, __b); }
 
  172     static constexpr 
bool _S_propagate_on_copy_assign()
 
  173     { 
return _Base_type::propagate_on_container_copy_assignment::value; }
 
  175     static constexpr 
bool _S_propagate_on_move_assign()
 
  176     { 
return _Base_type::propagate_on_container_move_assignment::value; }
 
  178     static constexpr 
bool _S_propagate_on_swap()
 
  179     { 
return _Base_type::propagate_on_container_swap::value; }
 
  181     static constexpr 
bool _S_always_equal()
 
  182     { 
return __allocator_always_compares_equal<_Alloc>::value; }
 
  184     static constexpr 
bool _S_nothrow_move()
 
  185     { 
return _S_propagate_on_move_assign() || _S_always_equal(); }
 
  187     static constexpr 
bool _S_nothrow_swap()
 
  190       return !_S_propagate_on_swap()
 
  191         || noexcept(swap(std::declval<_Alloc&>(), std::declval<_Alloc&>()));
 
  194     template<
typename _Tp>
 
  196       { 
typedef typename _Base_type::template rebind_alloc<_Tp> other; };
 
  199     typedef typename _Alloc::pointer                pointer;
 
  200     typedef typename _Alloc::const_pointer          const_pointer;
 
  201     typedef typename _Alloc::value_type             value_type;
 
  202     typedef typename _Alloc::reference              reference;
 
  203     typedef typename _Alloc::const_reference        const_reference;
 
  204     typedef typename _Alloc::size_type              size_type;
 
  205     typedef typename _Alloc::difference_type        difference_type;
 
  208     allocate(_Alloc& __a, size_type __n)
 
  209     { 
return __a.allocate(__n); }
 
  211     static void deallocate(_Alloc& __a, pointer __p, size_type __n)
 
  212     { __a.deallocate(__p, __n); }
 
  214     template<
typename _Tp>
 
  215       static void construct(_Alloc& __a, pointer __p, 
const _Tp& __arg)
 
  216       { __a.construct(__p, __arg); }
 
  218     static void destroy(_Alloc& __a, pointer __p)
 
  219     { __a.destroy(__p); }
 
  221     static size_type max_size(
const _Alloc& __a)
 
  222     { 
return __a.max_size(); }
 
  224     static const _Alloc& _S_select_on_copy(
const _Alloc& __a) { 
return __a; }
 
  226     static void _S_on_swap(_Alloc& __a, _Alloc& __b)
 
  230       std::__alloc_swap<_Alloc>::_S_do_it(__a, __b);
 
  233     template<
typename _Tp>
 
  235       { 
typedef typename _Alloc::template rebind<_Tp>::other other; };
 
  239 _GLIBCXX_END_NAMESPACE_VERSION
 
__pointer pointer
The allocator's pointer type. 
 
An allocator that uses malloc.This is precisely the allocator defined in the C++ Standard. 
 
Uniform interface to C++98 and C++0x allocators. 
 
Bitmap Allocator, primary template. 
 
_Alloc allocator_type
The allocator type. 
 
_Tp * addressof(_Tp &__r) noexcept
Returns the actual address of the object or function referenced by r, even in the presence of an over...
 
Uniform interface to all allocator types. 
 
An allocator that uses previously allocated memory. This memory can be externally, globally, or otherwise allocated. 
 
__const_pointer const_pointer
The allocator's const pointer type. 
 
An allocator that uses global new, as per [20.4].This is precisely the allocator defined in the C++ S...
 
void swap(function< _Res(_Args...)> &__x, function< _Res(_Args...)> &__y)
Swap the targets of two polymorphic function object wrappers. 
 
__difference_type difference_type
The allocator's difference type. 
 
_Alloc::value_type value_type
The allocated type. 
 
__size_type size_type
The allocator's size type.