STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Classes | Public Types | Public Member Functions | Private Types | List of all members
scoped_allocator_adaptor< _Outer, _Inner > Class Template Reference
Inheritance diagram for scoped_allocator_adaptor< _Outer, _Inner >:
_Scoped_base< _Outer, _Inner...>

Classes

struct  rebind
 

Public Types

typedef _Outer outer_allocator_type
 
typedef _Mybase::inner_allocator_type inner_allocator_type
 
typedef _Outer_traits::value_type value_type
 
typedef _Outer_traits::pointer pointer
 
typedef _Outer_traits::const_pointer const_pointer
 
typedef _Outer_traits::void_pointer void_pointer
 
typedef _Outer_traits::const_void_pointer const_void_pointer
 
typedef _Outer_traits::size_type size_type
 
typedef _Outer_traits::difference_type difference_type
 
typedef bool_constant< disjunction< typename allocator_traits< _Outer >::propagate_on_container_copy_assignment, typename allocator_traits< _Inner >::propagate_on_container_copy_assignment...>::value > propagate_on_container_copy_assignment
 
typedef bool_constant< disjunction< typename allocator_traits< _Outer >::propagate_on_container_move_assignment, typename allocator_traits< _Inner >::propagate_on_container_move_assignment...>::value > propagate_on_container_move_assignment
 
typedef bool_constant< disjunction< typename allocator_traits< _Outer >::propagate_on_container_swap, typename allocator_traits< _Inner >::propagate_on_container_swap...>::value > propagate_on_container_swap
 
typedef bool_constant< conjunction< typename allocator_traits< _Outer >::is_always_equal, typename allocator_traits< _Inner >::is_always_equal...>::value > is_always_equal
 

Public Member Functions

 scoped_allocator_adaptor ()=default
 
template<class _Other >
 scoped_allocator_adaptor (_Other &&_Other_arg, const _Inner &..._Inner_args) _NOEXCEPT
 
 scoped_allocator_adaptor (const scoped_allocator_adaptor &_Right) _NOEXCEPT
 
 scoped_allocator_adaptor (scoped_allocator_adaptor &&_Right) _NOEXCEPT
 
template<class _Other , bool _Enabled = sizeof...(_Inner) != 0, class = enable_if_t<_Enabled>>
 scoped_allocator_adaptor (const scoped_allocator_adaptor< _Other, _Inner...> &_Right) _NOEXCEPT
 
template<class _Other , bool _Enabled = sizeof...(_Inner) != 0, class = enable_if_t<_Enabled>>
 scoped_allocator_adaptor (scoped_allocator_adaptor< _Other, _Inner...> &&_Right) _NOEXCEPT
 
scoped_allocator_adaptoroperator= (const scoped_allocator_adaptor &)=default
 
scoped_allocator_adaptoroperator= (scoped_allocator_adaptor &&)=default
 
inner_allocator_typeinner_allocator () _NOEXCEPT
 
const inner_allocator_typeinner_allocator () const _NOEXCEPT
 
outer_allocator_typeouter_allocator () _NOEXCEPT
 
const outer_allocator_typeouter_allocator () const _NOEXCEPT
 
_DECLSPEC_ALLOCATOR pointer allocate (_CRT_GUARDOVERFLOW size_type _Count)
 
_DECLSPEC_ALLOCATOR pointer allocate (_CRT_GUARDOVERFLOW size_type _Count, const_void_pointer _Hint)
 
void deallocate (pointer _Ptr, size_type _Count)
 
size_type max_size () const
 
template<class _Ty , class... _Types>
void _Construct1 (false_type, _Any_tag, _Ty *_Ptr, _Types &&..._Args)
 
template<class _Ty , class... _Types>
void _Construct1 (true_type, true_type, _Ty *_Ptr, _Types &&..._Args)
 
template<class _Ty , class... _Types>
void _Construct1 (true_type, false_type, _Ty *_Ptr, _Types &&..._Args)
 
template<class _Ty , class... _Types>
void construct (_Ty *_Ptr, _Types &&..._Args)
 
template<class _Ty1 , class _Ty2 , class... _Types1, class... _Types2>
void construct (pair< _Ty1, _Ty2 > *_Ptr, piecewise_construct_t, tuple< _Types1...> _Val1, tuple< _Types2...> _Val2)
 
template<class _Ty1 , class _Ty2 >
void construct (pair< _Ty1, _Ty2 > *_Ptr)
 
template<class _Ty1 , class _Ty2 , class _Uy1 , class _Uy2 >
void construct (pair< _Ty1, _Ty2 > *_Ptr, _Uy1 &&_Val1, _Uy2 &&_Val2)
 
template<class _Ty1 , class _Ty2 , class _Uy1 , class _Uy2 >
void construct (pair< _Ty1, _Ty2 > *_Ptr, const pair< _Uy1, _Uy2 > &_Other)
 
template<class _Ty1 , class _Ty2 , class _Uy1 , class _Uy2 >
void construct (pair< _Ty1, _Ty2 > *_Ptr, pair< _Uy1, _Uy2 > &&_Other)
 
template<class _Ty >
void destroy (_Ty *_Ptr)
 

Private Types

typedef _Scoped_base< _Outer, _Inner...> _Mybase
 
typedef allocator_traits< _Outer > _Outer_traits
 

Member Typedef Documentation

template<class _Outer, class... _Inner>
typedef _Scoped_base<_Outer, _Inner...> scoped_allocator_adaptor< _Outer, _Inner >::_Mybase
private
template<class _Outer, class... _Inner>
typedef allocator_traits<_Outer> scoped_allocator_adaptor< _Outer, _Inner >::_Outer_traits
private
template<class _Outer, class... _Inner>
typedef _Outer_traits::const_pointer scoped_allocator_adaptor< _Outer, _Inner >::const_pointer
template<class _Outer, class... _Inner>
typedef _Outer_traits::const_void_pointer scoped_allocator_adaptor< _Outer, _Inner >::const_void_pointer
template<class _Outer, class... _Inner>
typedef _Outer_traits::difference_type scoped_allocator_adaptor< _Outer, _Inner >::difference_type
template<class _Outer, class... _Inner>
typedef _Mybase::inner_allocator_type scoped_allocator_adaptor< _Outer, _Inner >::inner_allocator_type
template<class _Outer, class... _Inner>
typedef bool_constant<conjunction< typename allocator_traits<_Outer>::is_always_equal, typename allocator_traits<_Inner>::is_always_equal...>::value> scoped_allocator_adaptor< _Outer, _Inner >::is_always_equal
template<class _Outer, class... _Inner>
typedef _Outer scoped_allocator_adaptor< _Outer, _Inner >::outer_allocator_type
template<class _Outer, class... _Inner>
typedef _Outer_traits::pointer scoped_allocator_adaptor< _Outer, _Inner >::pointer
template<class _Outer, class... _Inner>
typedef bool_constant<disjunction< typename allocator_traits<_Outer>::propagate_on_container_copy_assignment, typename allocator_traits<_Inner>::propagate_on_container_copy_assignment...>::value> scoped_allocator_adaptor< _Outer, _Inner >::propagate_on_container_copy_assignment
template<class _Outer, class... _Inner>
typedef bool_constant<disjunction< typename allocator_traits<_Outer>::propagate_on_container_move_assignment, typename allocator_traits<_Inner>::propagate_on_container_move_assignment...>::value> scoped_allocator_adaptor< _Outer, _Inner >::propagate_on_container_move_assignment
template<class _Outer, class... _Inner>
typedef bool_constant<disjunction< typename allocator_traits<_Outer>::propagate_on_container_swap, typename allocator_traits<_Inner>::propagate_on_container_swap...>::value> scoped_allocator_adaptor< _Outer, _Inner >::propagate_on_container_swap
template<class _Outer, class... _Inner>
typedef _Outer_traits::size_type scoped_allocator_adaptor< _Outer, _Inner >::size_type
template<class _Outer, class... _Inner>
typedef _Outer_traits::value_type scoped_allocator_adaptor< _Outer, _Inner >::value_type
template<class _Outer, class... _Inner>
typedef _Outer_traits::void_pointer scoped_allocator_adaptor< _Outer, _Inner >::void_pointer

Constructor & Destructor Documentation

template<class _Outer, class... _Inner>
scoped_allocator_adaptor< _Outer, _Inner >::scoped_allocator_adaptor ( )
default
template<class _Outer, class... _Inner>
template<class _Other >
scoped_allocator_adaptor< _Outer, _Inner >::scoped_allocator_adaptor ( _Other &&  _Other_arg,
const _Inner &...  _Inner_args 
)
inline
270  : _Mybase(_STD forward<_Other>(_Other_arg),
271  _Inner_args...)
272  { // construct from (_Other, _Inner...)
273  // also handles rebinding construction when sizeof...(_Inner) == 0
274  }
_Scoped_base< _Outer, _Inner...> _Mybase
Definition: scoped_allocator:222
template<class _Outer, class... _Inner>
scoped_allocator_adaptor< _Outer, _Inner >::scoped_allocator_adaptor ( const scoped_allocator_adaptor< _Outer, _Inner > &  _Right)
inline
277  : _Mybase(_Right)
278  { // construct from _Right
279  }
_Scoped_base< _Outer, _Inner...> _Mybase
Definition: scoped_allocator:222
template<class _Outer, class... _Inner>
scoped_allocator_adaptor< _Outer, _Inner >::scoped_allocator_adaptor ( scoped_allocator_adaptor< _Outer, _Inner > &&  _Right)
inline
282  : _Mybase(_STD move(_Right))
283  { // construct from _Right
284  }
_Scoped_base< _Outer, _Inner...> _Mybase
Definition: scoped_allocator:222
constexpr remove_reference< _Ty >::type && move(_Ty &&_Arg) _NOEXCEPT
Definition: type_traits:1349
template<class _Outer, class... _Inner>
template<class _Other , bool _Enabled = sizeof...(_Inner) != 0, class = enable_if_t<_Enabled>>
scoped_allocator_adaptor< _Outer, _Inner >::scoped_allocator_adaptor ( const scoped_allocator_adaptor< _Other, _Inner...> &  _Right)
inline
291  : _Mybase(_Right.outer_allocator(),
292  _Right.inner_allocator())
293  { // construct from const adaptor<_Other, _Inner...>&
294  }
outer_allocator_type & outer_allocator() _NOEXCEPT
Definition: scoped_allocator:319
_Scoped_base< _Outer, _Inner...> _Mybase
Definition: scoped_allocator:222
inner_allocator_type & inner_allocator() _NOEXCEPT
Definition: scoped_allocator:309
template<class _Outer, class... _Inner>
template<class _Other , bool _Enabled = sizeof...(_Inner) != 0, class = enable_if_t<_Enabled>>
scoped_allocator_adaptor< _Outer, _Inner >::scoped_allocator_adaptor ( scoped_allocator_adaptor< _Other, _Inner...> &&  _Right)
inline
301  : _Mybase(_STD move(_Right.outer_allocator()),
302  _STD move(_Right.inner_allocator()))
303  { // construct from adaptor<_Other, _Inner...>&&
304  }
outer_allocator_type & outer_allocator() _NOEXCEPT
Definition: scoped_allocator:319
_Scoped_base< _Outer, _Inner...> _Mybase
Definition: scoped_allocator:222
inner_allocator_type & inner_allocator() _NOEXCEPT
Definition: scoped_allocator:309
constexpr remove_reference< _Ty >::type && move(_Ty &&_Arg) _NOEXCEPT
Definition: type_traits:1349

Member Function Documentation

template<class _Outer, class... _Inner>
template<class _Ty , class... _Types>
void scoped_allocator_adaptor< _Outer, _Inner >::_Construct1 ( false_type  ,
_Any_tag  ,
_Ty *  _Ptr,
_Types &&...  _Args 
)
inline
355  { // construct with uses_allocator<T, inner_allocator_type> == false
357  "N4582 20.16.4 [allocator.adaptor.members]/9 requires "
358  "is_constructible<T, Args...> "
359  "when uses_allocator<T, inner_allocator_type> is false");
361  _Scoped_outermost(*this),
362  _Ptr,
363  _STD forward<_Types>(_Args)...);
364  }
Definition: type_traits:554
static void construct(_Alloc &_Al, _Ty *_Ptr, _Types &&..._Args)
Definition: xmemory0:724
decltype(auto) _Scoped_outermost(_Alloc &_Al)
Definition: scoped_allocator:48
template<class _Outer, class... _Inner>
template<class _Ty , class... _Types>
void scoped_allocator_adaptor< _Outer, _Inner >::_Construct1 ( true_type  ,
true_type  ,
_Ty *  _Ptr,
_Types &&...  _Args 
)
inline
369  { // construct with uses_allocator<_Ty, inner_allocator_type> and
370  // is_constructible<_Ty, allocator_arg_t, inner_allocator_type&, _Types...>
372  _Scoped_outermost(*this),
373  _Ptr,
375  inner_allocator(),
376  _STD forward<_Types>(_Args)...);
377  }
constexpr allocator_arg_t allocator_arg
Definition: xutility:3777
inner_allocator_type & inner_allocator() _NOEXCEPT
Definition: scoped_allocator:309
static void construct(_Alloc &_Al, _Ty *_Ptr, _Types &&..._Args)
Definition: xmemory0:724
decltype(auto) _Scoped_outermost(_Alloc &_Al)
Definition: scoped_allocator:48
template<class _Outer, class... _Inner>
template<class _Ty , class... _Types>
void scoped_allocator_adaptor< _Outer, _Inner >::_Construct1 ( true_type  ,
false_type  ,
_Ty *  _Ptr,
_Types &&...  _Args 
)
inline
382  { // construct with uses_allocator<_Ty, inner_allocator_type> and
383  // is_constructible<_Ty, _Types..., inner_allocator_type&>
385  "N4582 20.16.4 [allocator.adaptor.members]/9 requires "
386  "is_constructible<T, allocator_arg_t, inner_allocator_type&, Args...> or "
387  "is_constructible<T, Args..., inner_allocator_type&> "
388  "when uses_allocator<T, inner_allocator_type> == true");
390  _Scoped_outermost(*this),
391  _Ptr,
392  _STD forward<_Types>(_Args)...,
393  inner_allocator());
394  }
Definition: type_traits:554
inner_allocator_type & inner_allocator() _NOEXCEPT
Definition: scoped_allocator:309
static void construct(_Alloc &_Al, _Ty *_Ptr, _Types &&..._Args)
Definition: xmemory0:724
decltype(auto) _Scoped_outermost(_Alloc &_Al)
Definition: scoped_allocator:48
template<class _Outer, class... _Inner>
_DECLSPEC_ALLOCATOR pointer scoped_allocator_adaptor< _Outer, _Inner >::allocate ( _CRT_GUARDOVERFLOW size_type  _Count)
inline
330  { // allocate array of _Count elements, ignore hint
332  _Count));
333  }
outer_allocator_type & outer_allocator() _NOEXCEPT
Definition: scoped_allocator:319
static _DECLSPEC_ALLOCATOR pointer allocate(_Alloc &_Al, _CRT_GUARDOVERFLOW size_type _Count)
Definition: xmemory0:688
_Diff _Count
Definition: algorithm:1941
template<class _Outer, class... _Inner>
_DECLSPEC_ALLOCATOR pointer scoped_allocator_adaptor< _Outer, _Inner >::allocate ( _CRT_GUARDOVERFLOW size_type  _Count,
const_void_pointer  _Hint 
)
inline
336  { // allocate array of _Count elements, with hint
338  _Count, _Hint));
339  }
outer_allocator_type & outer_allocator() _NOEXCEPT
Definition: scoped_allocator:319
static _DECLSPEC_ALLOCATOR pointer allocate(_Alloc &_Al, _CRT_GUARDOVERFLOW size_type _Count)
Definition: xmemory0:688
_Diff _Count
Definition: algorithm:1941
template<class _Outer, class... _Inner>
template<class _Ty , class... _Types>
void scoped_allocator_adaptor< _Outer, _Inner >::construct ( _Ty *  _Ptr,
_Types &&...  _Args 
)
inline
399  { // construct with varying allocator styles
400  _Construct1(
401  uses_allocator<_Ty, inner_allocator_type>(),
402  typename is_constructible<
403  _Ty, allocator_arg_t, inner_allocator_type&, _Types...>::type(),
404  _Ptr,
405  _STD forward<_Types>(_Args)...);
406  }
_Mybase::inner_allocator_type inner_allocator_type
Definition: scoped_allocator:227
Definition: xutility:3773
Definition: type_traits:554
void _Construct1(false_type, _Any_tag, _Ty *_Ptr, _Types &&..._Args)
Definition: scoped_allocator:354
template<class _Outer, class... _Inner>
template<class _Ty1 , class _Ty2 , class... _Types1, class... _Types2>
void scoped_allocator_adaptor< _Outer, _Inner >::construct ( pair< _Ty1, _Ty2 > *  _Ptr,
piecewise_construct_t  ,
tuple< _Types1...>  _Val1,
tuple< _Types2...>  _Val2 
)
inline
414  { // construct pair from tuples
416  _Scoped_outermost(*this),
417  _Ptr,
419  _Scoped_construct_tuple<_Ty1>(inner_allocator(),
420  uses_allocator<_Ty1, inner_allocator_type>(),
421  typename is_constructible<
422  _Ty1, allocator_arg_t, inner_allocator_type&, _Types1...>::type(),
423  _STD move(_Val1)),
424  _Scoped_construct_tuple<_Ty2>(inner_allocator(),
425  uses_allocator<_Ty2, inner_allocator_type>(),
426  typename is_constructible<
427  _Ty2, allocator_arg_t, inner_allocator_type&, _Types2...>::type(),
428  _STD move(_Val2)));
429  }
_Mybase::inner_allocator_type inner_allocator_type
Definition: scoped_allocator:227
Definition: xutility:3773
constexpr piecewise_construct_t piecewise_construct
Definition: utility:84
Definition: type_traits:554
inner_allocator_type & inner_allocator() _NOEXCEPT
Definition: scoped_allocator:309
static void construct(_Alloc &_Al, _Ty *_Ptr, _Types &&..._Args)
Definition: xmemory0:724
constexpr remove_reference< _Ty >::type && move(_Ty &&_Arg) _NOEXCEPT
Definition: type_traits:1349
decltype(auto) _Scoped_outermost(_Alloc &_Al)
Definition: scoped_allocator:48
template<class _Outer, class... _Inner>
template<class _Ty1 , class _Ty2 >
void scoped_allocator_adaptor< _Outer, _Inner >::construct ( pair< _Ty1, _Ty2 > *  _Ptr)
inline
434  { // construct pair from pointer to other pair
435  this->construct(_Ptr, piecewise_construct,
436  tuple<>(),
437  tuple<>());
438  }
void construct(_Ty *_Ptr, _Types &&..._Args)
Definition: scoped_allocator:398
constexpr piecewise_construct_t piecewise_construct
Definition: utility:84
Definition: tuple:223
template<class _Outer, class... _Inner>
template<class _Ty1 , class _Ty2 , class _Uy1 , class _Uy2 >
void scoped_allocator_adaptor< _Outer, _Inner >::construct ( pair< _Ty1, _Ty2 > *  _Ptr,
_Uy1 &&  _Val1,
_Uy2 &&  _Val2 
)
inline
446  { // construct pair from two movable values
447  this->construct(_Ptr, piecewise_construct,
448  _STD forward_as_tuple(_STD forward<_Uy1>(_Val1)),
449  _STD forward_as_tuple(_STD forward<_Uy2>(_Val2)));
450  }
constexpr tuple< _Types &&...> forward_as_tuple(_Types &&..._Args) _NOEXCEPT
Definition: tuple:910
void construct(_Ty *_Ptr, _Types &&..._Args)
Definition: scoped_allocator:398
constexpr piecewise_construct_t piecewise_construct
Definition: utility:84
template<class _Outer, class... _Inner>
template<class _Ty1 , class _Ty2 , class _Uy1 , class _Uy2 >
void scoped_allocator_adaptor< _Outer, _Inner >::construct ( pair< _Ty1, _Ty2 > *  _Ptr,
const pair< _Uy1, _Uy2 > &  _Other 
)
inline
458  { // construct pair from copyable pair
459  this->construct(_Ptr, piecewise_construct,
460  _STD forward_as_tuple(_Other.first),
461  _STD forward_as_tuple(_Other.second));
462  }
_Ty2 second
Definition: utility:271
constexpr tuple< _Types &&...> forward_as_tuple(_Types &&..._Args) _NOEXCEPT
Definition: tuple:910
void construct(_Ty *_Ptr, _Types &&..._Args)
Definition: scoped_allocator:398
constexpr piecewise_construct_t piecewise_construct
Definition: utility:84
_Ty1 first
Definition: utility:270
template<class _Outer, class... _Inner>
template<class _Ty1 , class _Ty2 , class _Uy1 , class _Uy2 >
void scoped_allocator_adaptor< _Outer, _Inner >::construct ( pair< _Ty1, _Ty2 > *  _Ptr,
pair< _Uy1, _Uy2 > &&  _Other 
)
inline
470  { // construct pair from movable pair
471  this->construct(_Ptr, piecewise_construct,
472  _STD forward_as_tuple(_STD forward<_Uy1>(_Other.first)),
473  _STD forward_as_tuple(_STD forward<_Uy2>(_Other.second)));
474  }
_Ty2 second
Definition: utility:271
constexpr tuple< _Types &&...> forward_as_tuple(_Types &&..._Args) _NOEXCEPT
Definition: tuple:910
void construct(_Ty *_Ptr, _Types &&..._Args)
Definition: scoped_allocator:398
constexpr piecewise_construct_t piecewise_construct
Definition: utility:84
_Ty1 first
Definition: utility:270
template<class _Outer, class... _Inner>
void scoped_allocator_adaptor< _Outer, _Inner >::deallocate ( pointer  _Ptr,
size_type  _Count 
)
inline
342  { // deallocate object at _Ptr, with size
344  _Ptr, _Count));
345  }
outer_allocator_type & outer_allocator() _NOEXCEPT
Definition: scoped_allocator:319
_Diff _Count
Definition: algorithm:1941
static void deallocate(_Alloc &_Al, pointer _Ptr, size_type _Count)
Definition: xmemory0:699
template<class _Outer, class... _Inner>
template<class _Ty >
void scoped_allocator_adaptor< _Outer, _Inner >::destroy ( _Ty *  _Ptr)
inline
478  { // destroy object at _Ptr
480  _Scoped_outermost(*this), _Ptr);
481  }
static void destroy(_Alloc &_Al, _Ty *_Ptr)
Definition: xmemory0:744
decltype(auto) _Scoped_outermost(_Alloc &_Al)
Definition: scoped_allocator:48
template<class _Outer, class... _Inner>
inner_allocator_type& scoped_allocator_adaptor< _Outer, _Inner >::inner_allocator ( )
inline
310  { // get reference to inner allocator
311  return (this->_Get_inner_object(*this));
312  }
template<class _Outer, class... _Inner>
const inner_allocator_type& scoped_allocator_adaptor< _Outer, _Inner >::inner_allocator ( ) const
inline
315  { // get reference to inner allocator
316  return (this->_Get_inner_object(*this));
317  }
template<class _Outer, class... _Inner>
size_type scoped_allocator_adaptor< _Outer, _Inner >::max_size ( ) const
inline
348  { // estimate maximum array size
350  }
static size_type max_size(const _Alloc &_Al) _NOEXCEPT
Definition: xmemory0:749
outer_allocator_type & outer_allocator() _NOEXCEPT
Definition: scoped_allocator:319
template<class _Outer, class... _Inner>
scoped_allocator_adaptor& scoped_allocator_adaptor< _Outer, _Inner >::operator= ( const scoped_allocator_adaptor< _Outer, _Inner > &  )
default
template<class _Outer, class... _Inner>
scoped_allocator_adaptor& scoped_allocator_adaptor< _Outer, _Inner >::operator= ( scoped_allocator_adaptor< _Outer, _Inner > &&  )
default
template<class _Outer, class... _Inner>
outer_allocator_type& scoped_allocator_adaptor< _Outer, _Inner >::outer_allocator ( )
inline
320  { // get reference to outer allocator
321  return (static_cast<_Outer&>(*this));
322  }
template<class _Outer, class... _Inner>
const outer_allocator_type& scoped_allocator_adaptor< _Outer, _Inner >::outer_allocator ( ) const
inline
325  { // get reference to outer allocator
326  return (static_cast<const _Outer&>(*this));
327  }

The documentation for this class was generated from the following file: