29 #ifndef _ARRAY_ALLOCATOR_H 
   30 #define _ARRAY_ALLOCATOR_H 1 
   37 #if __cplusplus >= 201103L 
   41 namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
 
   43 _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   49  template<
typename _Tp>
 
   53       typedef size_t        size_type;
 
   54       typedef ptrdiff_t     difference_type;
 
   56       typedef const _Tp*    const_pointer;
 
   57       typedef _Tp&          reference;
 
   58       typedef const _Tp&    const_reference;
 
   59       typedef _Tp           value_type;
 
   62       address(reference __x) 
const _GLIBCXX_NOEXCEPT
 
   66       address(const_reference __x) 
const _GLIBCXX_NOEXCEPT
 
   70       deallocate(pointer, size_type)
 
   76       max_size() 
const _GLIBCXX_USE_NOEXCEPT 
 
   77       { 
return size_t(-1) / 
sizeof(_Tp); }
 
   79 #if __cplusplus >= 201103L 
   80       template<
typename _Up, 
typename... _Args>
 
   82         construct(_Up* __p, _Args&&... __args)
 
   83     { ::new((
void *)__p) _Up(std::forward<_Args>(__args)...); }
 
   85       template<
typename _Up>
 
   87         destroy(_Up* __p) { __p->~_Up(); }
 
   92       construct(pointer __p, 
const _Tp& __val) 
 
   93       { ::new((
void *)__p) value_type(__val); }
 
   96       destroy(pointer __p) { __p->~_Tp(); }
 
  105   template<
typename _Tp, 
typename _Array = std::tr1::array<_Tp, 1> >
 
  109       typedef size_t        size_type;
 
  110       typedef ptrdiff_t     difference_type;
 
  111       typedef _Tp*          pointer;
 
  112       typedef const _Tp*    const_pointer;
 
  113       typedef _Tp&          reference;
 
  114       typedef const _Tp&    const_reference;
 
  115       typedef _Tp           value_type;
 
  116       typedef _Array        array_type;
 
  118 #if __cplusplus >= 201103L 
  125       array_type*   _M_array;
 
  129      template<
typename _Tp1, 
typename _Array1 = _Array>
 
  133       array_allocator(array_type* __array = 0) _GLIBCXX_USE_NOEXCEPT 
 
  134       : _M_array(__array), _M_used(size_type()) { }
 
  136       array_allocator(
const array_allocator& __o) _GLIBCXX_USE_NOEXCEPT 
 
  137       : _M_array(__o._M_array), _M_used(__o._M_used) { }
 
  139       template<
typename _Tp1, 
typename _Array1>
 
  140         array_allocator(
const array_allocator<_Tp1, _Array1>&)
 
  141     _GLIBCXX_USE_NOEXCEPT
 
  142     : _M_array(0), _M_used(size_type()) { }
 
  144       ~array_allocator() _GLIBCXX_USE_NOEXCEPT { }
 
  147       allocate(size_type __n, 
const void* = 0)
 
  149     if (_M_array == 0 || _M_used + __n > _M_array->size())
 
  150       std::__throw_bad_alloc();
 
  151     pointer __ret = _M_array->begin() + _M_used;
 
  157   template<
typename _Tp, 
typename _Array>
 
  159     operator==(
const array_allocator<_Tp, _Array>&,
 
  160            const array_allocator<_Tp, _Array>&)
 
  163   template<
typename _Tp, 
typename _Array>
 
  165     operator!=(
const array_allocator<_Tp, _Array>&, 
 
  166            const array_allocator<_Tp, _Array>&)
 
  169 _GLIBCXX_END_NAMESPACE_VERSION
 
An allocator that uses previously allocated memory. This memory can be externally, globally, or otherwise allocated. 
 
_Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.