mirror of
https://github.com/boostorg/container.git
synced 2025-08-02 14:04:26 +02:00
Merge branch 'develop'
This commit is contained in:
@@ -4,8 +4,8 @@
|
|||||||
// @date Aug 14, 2011
|
// @date Aug 14, 2011
|
||||||
// @author Andrew Hundt <ATHundt@gmail.com>
|
// @author Andrew Hundt <ATHundt@gmail.com>
|
||||||
//
|
//
|
||||||
// (C) 2011-2013 Andrew Hundt <ATHundt@gmail.com>
|
// (C) Copyright 2011-2013 Andrew Hundt <ATHundt@gmail.com>
|
||||||
// (C) 2013-2013 Ion Gaztanaga
|
// (C) Copyright 2013-2013 Ion Gaztanaga
|
||||||
//
|
//
|
||||||
// Distributed under the Boost Software License, Version 1.0. (See
|
// Distributed under the Boost Software License, Version 1.0. (See
|
||||||
// accompanying file LICENSE_1_0.txt or copy at
|
// accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
@@ -549,7 +549,7 @@ shortly after new elements are added to the container.
|
|||||||
|
|
||||||
[*Boost.Container] offers two new members for `vector`, `static_vector` and `stable_vector`:
|
[*Boost.Container] offers two new members for `vector`, `static_vector` and `stable_vector`:
|
||||||
`explicit container::container(size_type n, default_init_t)` and
|
`explicit container::container(size_type n, default_init_t)` and
|
||||||
`explicit container::resize(size_type n, default_init_t)`, where new elements are constructed
|
`container::resize(size_type n, default_init_t)`, where new elements are constructed
|
||||||
using [@http://en.cppreference.com/w/cpp/language/default_initialization default initialization].
|
using [@http://en.cppreference.com/w/cpp/language/default_initialization default initialization].
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
@@ -1213,6 +1213,14 @@ use [*Boost.Container]? There are several reasons for that:
|
|||||||
|
|
||||||
[section:release_notes Release Notes]
|
[section:release_notes Release Notes]
|
||||||
|
|
||||||
|
|
||||||
|
[section:release_notes_boost_1_64_00 Boost 1.64 Release]
|
||||||
|
|
||||||
|
* Fixed bugs:
|
||||||
|
* [@https://svn.boost.org/trac/boost/ticket/12749 Trac #12749 : ['"container::pmr::polymorphic_allocator compilation error"]].
|
||||||
|
|
||||||
|
[endsect]
|
||||||
|
|
||||||
[section:release_notes_boost_1_63_00 Boost 1.63 Release]
|
[section:release_notes_boost_1_63_00 Boost 1.63 Release]
|
||||||
|
|
||||||
* Fixed bugs:
|
* Fixed bugs:
|
||||||
|
@@ -289,18 +289,18 @@ struct allocator_traits
|
|||||||
|
|
||||||
//! <b>Returns</b>: <code>a.allocate(n)</code>
|
//! <b>Returns</b>: <code>a.allocate(n)</code>
|
||||||
//!
|
//!
|
||||||
static pointer allocate(Allocator &a, size_type n)
|
BOOST_CONTAINER_FORCEINLINE static pointer allocate(Allocator &a, size_type n)
|
||||||
{ return a.allocate(n); }
|
{ return a.allocate(n); }
|
||||||
|
|
||||||
//! <b>Returns</b>: <code>a.deallocate(p, n)</code>
|
//! <b>Returns</b>: <code>a.deallocate(p, n)</code>
|
||||||
//!
|
//!
|
||||||
//! <b>Throws</b>: Nothing
|
//! <b>Throws</b>: Nothing
|
||||||
static void deallocate(Allocator &a, pointer p, size_type n)
|
BOOST_CONTAINER_FORCEINLINE static void deallocate(Allocator &a, pointer p, size_type n)
|
||||||
{ a.deallocate(p, n); }
|
{ a.deallocate(p, n); }
|
||||||
|
|
||||||
//! <b>Effects</b>: calls <code>a.allocate(n, p)</code> if that call is well-formed;
|
//! <b>Effects</b>: calls <code>a.allocate(n, p)</code> if that call is well-formed;
|
||||||
//! otherwise, invokes <code>a.allocate(n)</code>
|
//! otherwise, invokes <code>a.allocate(n)</code>
|
||||||
static pointer allocate(Allocator &a, size_type n, const_void_pointer p)
|
BOOST_CONTAINER_FORCEINLINE static pointer allocate(Allocator &a, size_type n, const_void_pointer p)
|
||||||
{
|
{
|
||||||
const bool value = boost::container::container_detail::
|
const bool value = boost::container::container_detail::
|
||||||
has_member_function_callable_with_allocate
|
has_member_function_callable_with_allocate
|
||||||
@@ -312,7 +312,7 @@ struct allocator_traits
|
|||||||
//! <b>Effects</b>: calls <code>a.destroy(p)</code> if that call is well-formed;
|
//! <b>Effects</b>: calls <code>a.destroy(p)</code> if that call is well-formed;
|
||||||
//! otherwise, invokes <code>p->~T()</code>.
|
//! otherwise, invokes <code>p->~T()</code>.
|
||||||
template<class T>
|
template<class T>
|
||||||
static void destroy(Allocator &a, T*p) BOOST_NOEXCEPT_OR_NOTHROW
|
BOOST_CONTAINER_FORCEINLINE static void destroy(Allocator &a, T*p) BOOST_NOEXCEPT_OR_NOTHROW
|
||||||
{
|
{
|
||||||
typedef T* destroy_pointer;
|
typedef T* destroy_pointer;
|
||||||
const bool value = boost::container::container_detail::
|
const bool value = boost::container::container_detail::
|
||||||
@@ -324,7 +324,7 @@ struct allocator_traits
|
|||||||
|
|
||||||
//! <b>Returns</b>: <code>a.max_size()</code> if that expression is well-formed; otherwise,
|
//! <b>Returns</b>: <code>a.max_size()</code> if that expression is well-formed; otherwise,
|
||||||
//! <code>numeric_limits<size_type>::max()</code>.
|
//! <code>numeric_limits<size_type>::max()</code>.
|
||||||
static size_type max_size(const Allocator &a) BOOST_NOEXCEPT_OR_NOTHROW
|
BOOST_CONTAINER_FORCEINLINE static size_type max_size(const Allocator &a) BOOST_NOEXCEPT_OR_NOTHROW
|
||||||
{
|
{
|
||||||
const bool value = allocator_traits_detail::has_max_size<Allocator, size_type (Allocator::*)() const>::value;
|
const bool value = allocator_traits_detail::has_max_size<Allocator, size_type (Allocator::*)() const>::value;
|
||||||
container_detail::bool_<value> flag;
|
container_detail::bool_<value> flag;
|
||||||
@@ -333,7 +333,7 @@ struct allocator_traits
|
|||||||
|
|
||||||
//! <b>Returns</b>: <code>a.select_on_container_copy_construction()</code> if that expression is well-formed;
|
//! <b>Returns</b>: <code>a.select_on_container_copy_construction()</code> if that expression is well-formed;
|
||||||
//! otherwise, a.
|
//! otherwise, a.
|
||||||
static BOOST_CONTAINER_DOC1ST(Allocator,
|
BOOST_CONTAINER_FORCEINLINE static BOOST_CONTAINER_DOC1ST(Allocator,
|
||||||
typename container_detail::if_c
|
typename container_detail::if_c
|
||||||
< allocator_traits_detail::has_select_on_container_copy_construction<Allocator BOOST_MOVE_I Allocator (Allocator::*)() const>::value
|
< allocator_traits_detail::has_select_on_container_copy_construction<Allocator BOOST_MOVE_I Allocator (Allocator::*)() const>::value
|
||||||
BOOST_MOVE_I Allocator BOOST_MOVE_I const Allocator & >::type)
|
BOOST_MOVE_I Allocator BOOST_MOVE_I const Allocator & >::type)
|
||||||
@@ -349,7 +349,7 @@ struct allocator_traits
|
|||||||
//! <b>Effects</b>: calls <code>a.construct(p, std::forward<Args>(args)...)</code> if that call is well-formed;
|
//! <b>Effects</b>: calls <code>a.construct(p, std::forward<Args>(args)...)</code> if that call is well-formed;
|
||||||
//! otherwise, invokes <code>::new (static_cast<void*>(p)) T(std::forward<Args>(args)...)</code>
|
//! otherwise, invokes <code>::new (static_cast<void*>(p)) T(std::forward<Args>(args)...)</code>
|
||||||
template <class T, class ...Args>
|
template <class T, class ...Args>
|
||||||
static void construct(Allocator & a, T* p, BOOST_FWD_REF(Args)... args)
|
BOOST_CONTAINER_FORCEINLINE static void construct(Allocator & a, T* p, BOOST_FWD_REF(Args)... args)
|
||||||
{
|
{
|
||||||
static const bool value = ::boost::move_detail::and_
|
static const bool value = ::boost::move_detail::and_
|
||||||
< container_detail::is_not_std_allocator<Allocator>
|
< container_detail::is_not_std_allocator<Allocator>
|
||||||
@@ -363,7 +363,7 @@ struct allocator_traits
|
|||||||
|
|
||||||
//! <b>Returns</b>: <code>a.storage_is_unpropagable(p)</code> if is_partially_propagable::value is true; otherwise,
|
//! <b>Returns</b>: <code>a.storage_is_unpropagable(p)</code> if is_partially_propagable::value is true; otherwise,
|
||||||
//! <code>false</code>.
|
//! <code>false</code>.
|
||||||
static bool storage_is_unpropagable(const Allocator &a, pointer p) BOOST_NOEXCEPT_OR_NOTHROW
|
BOOST_CONTAINER_FORCEINLINE static bool storage_is_unpropagable(const Allocator &a, pointer p) BOOST_NOEXCEPT_OR_NOTHROW
|
||||||
{
|
{
|
||||||
container_detail::bool_<is_partially_propagable::value> flag;
|
container_detail::bool_<is_partially_propagable::value> flag;
|
||||||
return allocator_traits::priv_storage_is_unpropagable(flag, a, p);
|
return allocator_traits::priv_storage_is_unpropagable(flag, a, p);
|
||||||
@@ -371,7 +371,7 @@ struct allocator_traits
|
|||||||
|
|
||||||
//! <b>Returns</b>: <code>true</code> if <code>is_always_equal::value == true</code>, otherwise,
|
//! <b>Returns</b>: <code>true</code> if <code>is_always_equal::value == true</code>, otherwise,
|
||||||
//! <code>a == b</code>.
|
//! <code>a == b</code>.
|
||||||
static bool equal(const Allocator &a, const Allocator &b) BOOST_NOEXCEPT_OR_NOTHROW
|
BOOST_CONTAINER_FORCEINLINE static bool equal(const Allocator &a, const Allocator &b) BOOST_NOEXCEPT_OR_NOTHROW
|
||||||
{
|
{
|
||||||
container_detail::bool_<is_always_equal::value> flag;
|
container_detail::bool_<is_always_equal::value> flag;
|
||||||
return allocator_traits::priv_equal(flag, a, b);
|
return allocator_traits::priv_equal(flag, a, b);
|
||||||
@@ -379,46 +379,46 @@ struct allocator_traits
|
|||||||
|
|
||||||
#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
|
#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
|
||||||
private:
|
private:
|
||||||
static pointer priv_allocate(container_detail::true_type, Allocator &a, size_type n, const_void_pointer p)
|
BOOST_CONTAINER_FORCEINLINE static pointer priv_allocate(container_detail::true_type, Allocator &a, size_type n, const_void_pointer p)
|
||||||
{ return a.allocate(n, p); }
|
{ return a.allocate(n, p); }
|
||||||
|
|
||||||
static pointer priv_allocate(container_detail::false_type, Allocator &a, size_type n, const_void_pointer)
|
BOOST_CONTAINER_FORCEINLINE static pointer priv_allocate(container_detail::false_type, Allocator &a, size_type n, const_void_pointer)
|
||||||
{ return a.allocate(n); }
|
{ return a.allocate(n); }
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
static void priv_destroy(container_detail::true_type, Allocator &a, T* p) BOOST_NOEXCEPT_OR_NOTHROW
|
BOOST_CONTAINER_FORCEINLINE static void priv_destroy(container_detail::true_type, Allocator &a, T* p) BOOST_NOEXCEPT_OR_NOTHROW
|
||||||
{ a.destroy(p); }
|
{ a.destroy(p); }
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
static void priv_destroy(container_detail::false_type, Allocator &, T* p) BOOST_NOEXCEPT_OR_NOTHROW
|
BOOST_CONTAINER_FORCEINLINE static void priv_destroy(container_detail::false_type, Allocator &, T* p) BOOST_NOEXCEPT_OR_NOTHROW
|
||||||
{ p->~T(); (void)p; }
|
{ p->~T(); (void)p; }
|
||||||
|
|
||||||
static size_type priv_max_size(container_detail::true_type, const Allocator &a) BOOST_NOEXCEPT_OR_NOTHROW
|
BOOST_CONTAINER_FORCEINLINE static size_type priv_max_size(container_detail::true_type, const Allocator &a) BOOST_NOEXCEPT_OR_NOTHROW
|
||||||
{ return a.max_size(); }
|
{ return a.max_size(); }
|
||||||
|
|
||||||
static size_type priv_max_size(container_detail::false_type, const Allocator &) BOOST_NOEXCEPT_OR_NOTHROW
|
BOOST_CONTAINER_FORCEINLINE static size_type priv_max_size(container_detail::false_type, const Allocator &) BOOST_NOEXCEPT_OR_NOTHROW
|
||||||
{ return size_type(-1)/sizeof(value_type); }
|
{ return size_type(-1)/sizeof(value_type); }
|
||||||
|
|
||||||
static Allocator priv_select_on_container_copy_construction(container_detail::true_type, const Allocator &a)
|
BOOST_CONTAINER_FORCEINLINE static Allocator priv_select_on_container_copy_construction(container_detail::true_type, const Allocator &a)
|
||||||
{ return a.select_on_container_copy_construction(); }
|
{ return a.select_on_container_copy_construction(); }
|
||||||
|
|
||||||
static const Allocator &priv_select_on_container_copy_construction(container_detail::false_type, const Allocator &a) BOOST_NOEXCEPT_OR_NOTHROW
|
BOOST_CONTAINER_FORCEINLINE static const Allocator &priv_select_on_container_copy_construction(container_detail::false_type, const Allocator &a) BOOST_NOEXCEPT_OR_NOTHROW
|
||||||
{ return a; }
|
{ return a; }
|
||||||
|
|
||||||
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
|
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
|
||||||
template<class T, class ...Args>
|
template<class T, class ...Args>
|
||||||
static void priv_construct(container_detail::true_type, Allocator &a, T *p, BOOST_FWD_REF(Args) ...args)
|
BOOST_CONTAINER_FORCEINLINE static void priv_construct(container_detail::true_type, Allocator &a, T *p, BOOST_FWD_REF(Args) ...args)
|
||||||
{ a.construct( p, ::boost::forward<Args>(args)...); }
|
{ a.construct( p, ::boost::forward<Args>(args)...); }
|
||||||
|
|
||||||
template<class T, class ...Args>
|
template<class T, class ...Args>
|
||||||
static void priv_construct(container_detail::false_type, Allocator &, T *p, BOOST_FWD_REF(Args) ...args)
|
BOOST_CONTAINER_FORCEINLINE static void priv_construct(container_detail::false_type, Allocator &, T *p, BOOST_FWD_REF(Args) ...args)
|
||||||
{ ::new((void*)p, boost_container_new_t()) T(::boost::forward<Args>(args)...); }
|
{ ::new((void*)p, boost_container_new_t()) T(::boost::forward<Args>(args)...); }
|
||||||
#else // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
|
#else // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
|
||||||
public:
|
public:
|
||||||
|
|
||||||
#define BOOST_CONTAINER_ALLOCATOR_TRAITS_CONSTRUCT_IMPL(N) \
|
#define BOOST_CONTAINER_ALLOCATOR_TRAITS_CONSTRUCT_IMPL(N) \
|
||||||
template<class T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
|
template<class T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
|
||||||
static void construct(Allocator &a, T *p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
|
BOOST_CONTAINER_FORCEINLINE static void construct(Allocator &a, T *p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
|
||||||
{\
|
{\
|
||||||
static const bool value = ::boost::move_detail::and_ \
|
static const bool value = ::boost::move_detail::and_ \
|
||||||
< container_detail::is_not_std_allocator<Allocator> \
|
< container_detail::is_not_std_allocator<Allocator> \
|
||||||
@@ -438,11 +438,11 @@ struct allocator_traits
|
|||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
#define BOOST_CONTAINER_ALLOCATOR_TRAITS_PRIV_CONSTRUCT_IMPL(N) \
|
#define BOOST_CONTAINER_ALLOCATOR_TRAITS_PRIV_CONSTRUCT_IMPL(N) \
|
||||||
template<class T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
|
template<class T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
|
||||||
static void priv_construct(container_detail::true_type, Allocator &a, T *p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
|
BOOST_CONTAINER_FORCEINLINE static void priv_construct(container_detail::true_type, Allocator &a, T *p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
|
||||||
{ a.construct( p BOOST_MOVE_I##N BOOST_MOVE_FWD##N ); }\
|
{ a.construct( p BOOST_MOVE_I##N BOOST_MOVE_FWD##N ); }\
|
||||||
\
|
\
|
||||||
template<class T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
|
template<class T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
|
||||||
static void priv_construct(container_detail::false_type, Allocator &, T *p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
|
BOOST_CONTAINER_FORCEINLINE static void priv_construct(container_detail::false_type, Allocator &, T *p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
|
||||||
{ ::new((void*)p, boost_container_new_t()) T(BOOST_MOVE_FWD##N); }\
|
{ ::new((void*)p, boost_container_new_t()) T(BOOST_MOVE_FWD##N); }\
|
||||||
//
|
//
|
||||||
BOOST_MOVE_ITERATE_0TO8(BOOST_CONTAINER_ALLOCATOR_TRAITS_PRIV_CONSTRUCT_IMPL)
|
BOOST_MOVE_ITERATE_0TO8(BOOST_CONTAINER_ALLOCATOR_TRAITS_PRIV_CONSTRUCT_IMPL)
|
||||||
@@ -451,19 +451,19 @@ struct allocator_traits
|
|||||||
#endif // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
|
#endif // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
static void priv_construct(container_detail::false_type, Allocator &, T *p, const ::boost::container::default_init_t&)
|
BOOST_CONTAINER_FORCEINLINE static void priv_construct(container_detail::false_type, Allocator &, T *p, const ::boost::container::default_init_t&)
|
||||||
{ ::new((void*)p, boost_container_new_t()) T; }
|
{ ::new((void*)p, boost_container_new_t()) T; }
|
||||||
|
|
||||||
static bool priv_storage_is_unpropagable(container_detail::true_type, const Allocator &a, pointer p)
|
BOOST_CONTAINER_FORCEINLINE static bool priv_storage_is_unpropagable(container_detail::true_type, const Allocator &a, pointer p)
|
||||||
{ return a.storage_is_unpropagable(p); }
|
{ return a.storage_is_unpropagable(p); }
|
||||||
|
|
||||||
static bool priv_storage_is_unpropagable(container_detail::false_type, const Allocator &, pointer)
|
BOOST_CONTAINER_FORCEINLINE static bool priv_storage_is_unpropagable(container_detail::false_type, const Allocator &, pointer)
|
||||||
{ return false; }
|
{ return false; }
|
||||||
|
|
||||||
static bool priv_equal(container_detail::true_type, const Allocator &, const Allocator &)
|
BOOST_CONTAINER_FORCEINLINE static bool priv_equal(container_detail::true_type, const Allocator &, const Allocator &)
|
||||||
{ return true; }
|
{ return true; }
|
||||||
|
|
||||||
static bool priv_equal(container_detail::false_type, const Allocator &a, const Allocator &b)
|
BOOST_CONTAINER_FORCEINLINE static bool priv_equal(container_detail::false_type, const Allocator &a, const Allocator &b)
|
||||||
{ return a == b; }
|
{ return a == b; }
|
||||||
|
|
||||||
#endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
|
#endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
|
||||||
|
@@ -107,8 +107,8 @@ struct insert_n_copies_proxy
|
|||||||
|
|
||||||
void copy_n_and_update(Allocator &, Iterator p, size_type n) const
|
void copy_n_and_update(Allocator &, Iterator p, size_type n) const
|
||||||
{
|
{
|
||||||
for (; 0 < n; --n, ++p){
|
for (; 0 < n; --n, ++p){
|
||||||
*p = v_;
|
*p = v_;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -287,7 +287,7 @@ template< typename ConstructAlloc, typename ArgAlloc, class Pair \
|
|||||||
, template<class, class, class, class, class, class, class, class, class, class> class BoostTuple \
|
, template<class, class, class, class, class, class, class, class, class, class> class BoostTuple \
|
||||||
BOOST_MOVE_I_IF(BOOST_MOVE_OR(N,M)) BOOST_MOVE_CLASS##N BOOST_MOVE_I_IF(BOOST_MOVE_AND(N,M)) BOOST_MOVE_CLASSQ##M > \
|
BOOST_MOVE_I_IF(BOOST_MOVE_OR(N,M)) BOOST_MOVE_CLASS##N BOOST_MOVE_I_IF(BOOST_MOVE_AND(N,M)) BOOST_MOVE_CLASSQ##M > \
|
||||||
typename container_detail::enable_if< container_detail::is_pair<Pair> >::type\
|
typename container_detail::enable_if< container_detail::is_pair<Pair> >::type\
|
||||||
dispatch_uses_allocator( ConstructAlloc & construct_alloc, ArgAlloc & arg_alloc, Pair* pair, piecewise_construct_t\
|
dispatch_uses_allocator( ConstructAlloc & construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, Pair* pair, piecewise_construct_t\
|
||||||
, BoostTuple<BOOST_MOVE_TARG##N BOOST_MOVE_I##N BOOST_MOVE_REPEAT(BOOST_MOVE_SUB(10,N),::boost::tuples::null_type)> p\
|
, BoostTuple<BOOST_MOVE_TARG##N BOOST_MOVE_I##N BOOST_MOVE_REPEAT(BOOST_MOVE_SUB(10,N),::boost::tuples::null_type)> p\
|
||||||
, BoostTuple<BOOST_MOVE_TARGQ##M BOOST_MOVE_I##M BOOST_MOVE_REPEAT(BOOST_MOVE_SUB(10,M),::boost::tuples::null_type)> q)\
|
, BoostTuple<BOOST_MOVE_TARGQ##M BOOST_MOVE_I##M BOOST_MOVE_REPEAT(BOOST_MOVE_SUB(10,M),::boost::tuples::null_type)> q)\
|
||||||
{\
|
{\
|
||||||
@@ -313,7 +313,7 @@ BOOST_MOVE_ITER2D_0TOMAX(9, BOOST_DISPATCH_USES_ALLOCATOR_PIECEWISE_CONSTRUCT_BO
|
|||||||
|
|
||||||
template< typename ConstructAlloc, typename ArgAlloc, class Pair
|
template< typename ConstructAlloc, typename ArgAlloc, class Pair
|
||||||
, template<class ...> class Tuple, class... Args1, class... Args2, size_t... Indexes1, size_t... Indexes2>
|
, template<class ...> class Tuple, class... Args1, class... Args2, size_t... Indexes1, size_t... Indexes2>
|
||||||
void dispatch_uses_allocator_index( ConstructAlloc & construct_alloc, ArgAlloc & arg_alloc, Pair* pair
|
void dispatch_uses_allocator_index( ConstructAlloc & construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, Pair* pair
|
||||||
, Tuple<Args1...>& t1, Tuple<Args2...>& t2, index_tuple<Indexes1...>, index_tuple<Indexes2...>)
|
, Tuple<Args1...>& t1, Tuple<Args2...>& t2, index_tuple<Indexes1...>, index_tuple<Indexes2...>)
|
||||||
{
|
{
|
||||||
(void)t1; (void)t2;
|
(void)t1; (void)t2;
|
||||||
@@ -331,7 +331,7 @@ BOOST_MOVE_ITER2D_0TOMAX(9, BOOST_DISPATCH_USES_ALLOCATOR_PIECEWISE_CONSTRUCT_BO
|
|||||||
template< typename ConstructAlloc, typename ArgAlloc, class Pair
|
template< typename ConstructAlloc, typename ArgAlloc, class Pair
|
||||||
, template<class ...> class Tuple, class... Args1, class... Args2>
|
, template<class ...> class Tuple, class... Args1, class... Args2>
|
||||||
typename container_detail::enable_if< container_detail::is_pair<Pair> >::type
|
typename container_detail::enable_if< container_detail::is_pair<Pair> >::type
|
||||||
dispatch_uses_allocator( ConstructAlloc & construct_alloc, ArgAlloc & arg_alloc, Pair* pair, piecewise_construct_t
|
dispatch_uses_allocator( ConstructAlloc & construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, Pair* pair, piecewise_construct_t
|
||||||
, Tuple<Args1...> t1, Tuple<Args2...> t2)
|
, Tuple<Args1...> t1, Tuple<Args2...> t2)
|
||||||
{
|
{
|
||||||
(dispatch_uses_allocator_index)( construct_alloc, arg_alloc, pair, t1, t2
|
(dispatch_uses_allocator_index)( construct_alloc, arg_alloc, pair, t1, t2
|
||||||
@@ -347,7 +347,7 @@ BOOST_MOVE_ITER2D_0TOMAX(9, BOOST_DISPATCH_USES_ALLOCATOR_PIECEWISE_CONSTRUCT_BO
|
|||||||
, template<class, class, class, class, class, class, class, class, class, class> class StdTuple\
|
, template<class, class, class, class, class, class, class, class, class, class> class StdTuple\
|
||||||
BOOST_MOVE_I_IF(BOOST_MOVE_OR(N,M)) BOOST_MOVE_CLASS##N BOOST_MOVE_I_IF(BOOST_MOVE_AND(N,M)) BOOST_MOVE_CLASSQ##M > \
|
BOOST_MOVE_I_IF(BOOST_MOVE_OR(N,M)) BOOST_MOVE_CLASS##N BOOST_MOVE_I_IF(BOOST_MOVE_AND(N,M)) BOOST_MOVE_CLASSQ##M > \
|
||||||
typename container_detail::enable_if< container_detail::is_pair<Pair> >::type\
|
typename container_detail::enable_if< container_detail::is_pair<Pair> >::type\
|
||||||
dispatch_uses_allocator(ConstructAlloc & construct_alloc, ArgAlloc & arg_alloc, Pair* pair, piecewise_construct_t\
|
dispatch_uses_allocator(ConstructAlloc & construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, Pair* pair, piecewise_construct_t\
|
||||||
, StdTuple<BOOST_MOVE_TARG##N BOOST_MOVE_I##N BOOST_MOVE_REPEAT(BOOST_MOVE_SUB(10,N),::std::tr1::_Nil)> p\
|
, StdTuple<BOOST_MOVE_TARG##N BOOST_MOVE_I##N BOOST_MOVE_REPEAT(BOOST_MOVE_SUB(10,N),::std::tr1::_Nil)> p\
|
||||||
, StdTuple<BOOST_MOVE_TARGQ##M BOOST_MOVE_I##M BOOST_MOVE_REPEAT(BOOST_MOVE_SUB(10,M),::std::tr1::_Nil)> q)\
|
, StdTuple<BOOST_MOVE_TARGQ##M BOOST_MOVE_I##M BOOST_MOVE_REPEAT(BOOST_MOVE_SUB(10,M),::std::tr1::_Nil)> q)\
|
||||||
{\
|
{\
|
||||||
@@ -382,7 +382,7 @@ BOOST_MOVE_ITER2D_0TOMAX(9, BOOST_DISPATCH_USES_ALLOCATOR_PIECEWISE_CONSTRUCT_BO
|
|||||||
BOOST_MOVE_I_IF(BOOST_MOVE_OR(N,M)) BOOST_MOVE_CLASS##N BOOST_MOVE_I_IF(BOOST_MOVE_AND(N,M)) BOOST_MOVE_CLASSQ##M > \
|
BOOST_MOVE_I_IF(BOOST_MOVE_OR(N,M)) BOOST_MOVE_CLASS##N BOOST_MOVE_I_IF(BOOST_MOVE_AND(N,M)) BOOST_MOVE_CLASSQ##M > \
|
||||||
typename container_detail::enable_if< container_detail::is_pair<Pair> >::type\
|
typename container_detail::enable_if< container_detail::is_pair<Pair> >::type\
|
||||||
dispatch_uses_allocator\
|
dispatch_uses_allocator\
|
||||||
( ConstructAlloc & construct_alloc, ArgAlloc & arg_alloc, Pair* pair, piecewise_construct_t\
|
( ConstructAlloc & construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, Pair* pair, piecewise_construct_t\
|
||||||
, StdTuple<BOOST_MOVE_TARG##N BOOST_MOVE_I##N BOOST_MOVE_REPEAT(BOOST_MOVE_SUB(BOOST_MOVE_ADD(_VARIADIC_MAX, 3),N),::std::_Nil) > p\
|
, StdTuple<BOOST_MOVE_TARG##N BOOST_MOVE_I##N BOOST_MOVE_REPEAT(BOOST_MOVE_SUB(BOOST_MOVE_ADD(_VARIADIC_MAX, 3),N),::std::_Nil) > p\
|
||||||
, StdTuple<BOOST_MOVE_TARGQ##M BOOST_MOVE_I##M BOOST_MOVE_REPEAT(BOOST_MOVE_SUB(BOOST_MOVE_ADD(_VARIADIC_MAX, 3),M),::std::_Nil) > q)\
|
, StdTuple<BOOST_MOVE_TARGQ##M BOOST_MOVE_I##M BOOST_MOVE_REPEAT(BOOST_MOVE_SUB(BOOST_MOVE_ADD(_VARIADIC_MAX, 3),M),::std::_Nil) > q)\
|
||||||
{\
|
{\
|
||||||
@@ -406,6 +406,52 @@ BOOST_MOVE_ITER2D_0TOMAX(9, BOOST_DISPATCH_USES_ALLOCATOR_PIECEWISE_CONSTRUCT_BO
|
|||||||
|
|
||||||
#endif //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
|
#endif //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
|
||||||
|
|
||||||
|
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
|
||||||
|
|
||||||
|
template < typename ConstructAlloc
|
||||||
|
, typename ArgAlloc
|
||||||
|
, class Pair, class KeyType, class ... Args>
|
||||||
|
typename container_detail::enable_if< container_detail::is_pair<Pair>, void >::type
|
||||||
|
dispatch_uses_allocator
|
||||||
|
(ConstructAlloc & construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, Pair* p, try_emplace_t, BOOST_FWD_REF(KeyType) k, BOOST_FWD_REF(Args) ...args)
|
||||||
|
{
|
||||||
|
(dispatch_uses_allocator)(construct_alloc, arg_alloc, container_detail::addressof(p->first), ::boost::forward<KeyType>(k));
|
||||||
|
BOOST_TRY{
|
||||||
|
(dispatch_uses_allocator)(construct_alloc, arg_alloc, container_detail::addressof(p->second), ::boost::forward<Args>(args)...);
|
||||||
|
}
|
||||||
|
BOOST_CATCH(...) {
|
||||||
|
allocator_traits<ConstructAlloc>::destroy(construct_alloc, container_detail::addressof(p->first));
|
||||||
|
BOOST_RETHROW
|
||||||
|
}
|
||||||
|
BOOST_CATCH_END
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define BOOST_CONTAINER_DISPATCH_USES_ALLOCATOR_PAIR_TRY_EMPLACE_CODE(N) \
|
||||||
|
template <typename ConstructAlloc, typename ArgAlloc, class Pair, class KeyType BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
|
||||||
|
inline typename container_detail::enable_if\
|
||||||
|
< container_detail::is_pair<Pair>, void >::type\
|
||||||
|
dispatch_uses_allocator\
|
||||||
|
(ConstructAlloc &construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, Pair* p, try_emplace_t, \
|
||||||
|
BOOST_FWD_REF(KeyType) k BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
|
||||||
|
{\
|
||||||
|
(dispatch_uses_allocator)(construct_alloc, arg_alloc, container_detail::addressof(p->first), ::boost::forward<KeyType>(k));\
|
||||||
|
BOOST_TRY{\
|
||||||
|
(dispatch_uses_allocator)(construct_alloc, arg_alloc, container_detail::addressof(p->second) BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
|
||||||
|
}\
|
||||||
|
BOOST_CATCH(...) {\
|
||||||
|
allocator_traits<ConstructAlloc>::destroy(construct_alloc, container_detail::addressof(p->first));\
|
||||||
|
BOOST_RETHROW\
|
||||||
|
}\
|
||||||
|
BOOST_CATCH_END\
|
||||||
|
}\
|
||||||
|
//
|
||||||
|
BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_DISPATCH_USES_ALLOCATOR_PAIR_TRY_EMPLACE_CODE)
|
||||||
|
#undef BOOST_CONTAINER_DISPATCH_USES_ALLOCATOR_PAIR_TRY_EMPLACE_CODE
|
||||||
|
|
||||||
|
#endif //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
|
||||||
|
|
||||||
} //namespace container_detail
|
} //namespace container_detail
|
||||||
|
|
||||||
}} // namespace boost { namespace container {
|
}} // namespace boost { namespace container {
|
||||||
|
@@ -1,383 +0,0 @@
|
|||||||
/*
|
|
||||||
template <class Value, unsigned int Options = 0, class Hash = hash<Value>, class Pred = equal_to<Value>,
|
|
||||||
class Allocator = allocator<Value> >
|
|
||||||
class hash_set
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
// types
|
|
||||||
typedef Value key_type;
|
|
||||||
typedef key_type value_type;
|
|
||||||
typedef Hash hasher;
|
|
||||||
typedef Pred key_equal;
|
|
||||||
typedef Allocator allocator_type;
|
|
||||||
typedef value_type& reference;
|
|
||||||
typedef const value_type& const_reference;
|
|
||||||
typedef typename allocator_traits<allocator_type>::pointer pointer;
|
|
||||||
typedef typename allocator_traits<allocator_type>::const_pointer const_pointer;
|
|
||||||
typedef typename allocator_traits<allocator_type>::size_type size_type;
|
|
||||||
typedef typename allocator_traits<allocator_type>::difference_type difference_type;
|
|
||||||
|
|
||||||
typedef /unspecified/ iterator;
|
|
||||||
typedef /unspecified/ const_iterator;
|
|
||||||
typedef /unspecified/ local_iterator;
|
|
||||||
typedef /unspecified/ const_local_iterator;
|
|
||||||
|
|
||||||
hash_set()
|
|
||||||
noexcept(
|
|
||||||
is_nothrow_default_constructible<hasher>::value &&
|
|
||||||
is_nothrow_default_constructible<key_equal>::value &&
|
|
||||||
is_nothrow_default_constructible<allocator_type>::value);
|
|
||||||
explicit hash_set(size_type n, const hasher& hf = hasher(),
|
|
||||||
const key_equal& eql = key_equal(),
|
|
||||||
const allocator_type& a = allocator_type());
|
|
||||||
template <class InputIterator>
|
|
||||||
hash_set(InputIterator f, InputIterator l,
|
|
||||||
size_type n = 0, const hasher& hf = hasher(),
|
|
||||||
const key_equal& eql = key_equal(),
|
|
||||||
const allocator_type& a = allocator_type());
|
|
||||||
explicit hash_set(const allocator_type&);
|
|
||||||
hash_set(const hash_set&);
|
|
||||||
hash_set(const hash_set&, const Allocator&);
|
|
||||||
hash_set(hash_set&&)
|
|
||||||
noexcept(
|
|
||||||
is_nothrow_move_constructible<hasher>::value &&
|
|
||||||
is_nothrow_move_constructible<key_equal>::value &&
|
|
||||||
is_nothrow_move_constructible<allocator_type>::value);
|
|
||||||
hash_set(hash_set&&, const Allocator&);
|
|
||||||
hash_set(initializer_list<value_type>, size_type n = 0,
|
|
||||||
const hasher& hf = hasher(), const key_equal& eql = key_equal(),
|
|
||||||
const allocator_type& a = allocator_type());
|
|
||||||
~hash_set();
|
|
||||||
hash_set& operator=(const hash_set&);
|
|
||||||
hash_set& operator=(hash_set&&)
|
|
||||||
noexcept(
|
|
||||||
allocator_type::propagate_on_container_move_assignment::value &&
|
|
||||||
is_nothrow_move_assignable<allocator_type>::value &&
|
|
||||||
is_nothrow_move_assignable<hasher>::value &&
|
|
||||||
is_nothrow_move_assignable<key_equal>::value);
|
|
||||||
hash_set& operator=(initializer_list<value_type>);
|
|
||||||
|
|
||||||
allocator_type get_allocator() const noexcept;
|
|
||||||
|
|
||||||
bool empty() const noexcept;
|
|
||||||
size_type size() const noexcept;
|
|
||||||
size_type max_size() const noexcept;
|
|
||||||
|
|
||||||
iterator begin() noexcept;
|
|
||||||
iterator end() noexcept;
|
|
||||||
const_iterator begin() const noexcept;
|
|
||||||
const_iterator end() const noexcept;
|
|
||||||
const_iterator cbegin() const noexcept;
|
|
||||||
const_iterator cend() const noexcept;
|
|
||||||
|
|
||||||
template <class... Args>
|
|
||||||
pair<iterator, bool> emplace(BOOST_FWD_REF(Args)... args);
|
|
||||||
template <class... Args>
|
|
||||||
iterator emplace_hint(const_iterator position, BOOST_FWD_REF(Args)... args);
|
|
||||||
pair<iterator, bool> insert(const value_type& obj);
|
|
||||||
pair<iterator, bool> insert(value_type&& obj);
|
|
||||||
iterator insert(const_iterator hint, const value_type& obj);
|
|
||||||
iterator insert(const_iterator hint, value_type&& obj);
|
|
||||||
template <class InputIterator>
|
|
||||||
void insert(InputIterator first, InputIterator last);
|
|
||||||
void insert(initializer_list<value_type>);
|
|
||||||
|
|
||||||
iterator erase(const_iterator position);
|
|
||||||
size_type erase(const key_type& k);
|
|
||||||
iterator erase(const_iterator first, const_iterator last);
|
|
||||||
void clear() noexcept;
|
|
||||||
|
|
||||||
void swap(hash_set&)
|
|
||||||
noexcept(
|
|
||||||
(!allocator_type::propagate_on_container_swap::value ||
|
|
||||||
__is_nothrow_swappable<allocator_type>::value) &&
|
|
||||||
__is_nothrow_swappable<hasher>::value &&
|
|
||||||
__is_nothrow_swappable<key_equal>::value);
|
|
||||||
|
|
||||||
hasher hash_function() const;
|
|
||||||
key_equal key_eq() const;
|
|
||||||
|
|
||||||
iterator find(const key_type& k);
|
|
||||||
const_iterator find(const key_type& k) const;
|
|
||||||
size_type count(const key_type& k) const;
|
|
||||||
pair<iterator, iterator> equal_range(const key_type& k);
|
|
||||||
pair<const_iterator, const_iterator> equal_range(const key_type& k) const;
|
|
||||||
|
|
||||||
size_type bucket_count() const noexcept;
|
|
||||||
size_type max_bucket_count() const noexcept;
|
|
||||||
|
|
||||||
size_type bucket_size(size_type n) const;
|
|
||||||
size_type bucket(const key_type& k) const;
|
|
||||||
|
|
||||||
local_iterator begin(size_type n);
|
|
||||||
local_iterator end(size_type n);
|
|
||||||
const_local_iterator begin(size_type n) const;
|
|
||||||
const_local_iterator end(size_type n) const;
|
|
||||||
const_local_iterator cbegin(size_type n) const;
|
|
||||||
const_local_iterator cend(size_type n) const;
|
|
||||||
|
|
||||||
float load_factor() const noexcept;
|
|
||||||
float max_load_factor() const noexcept;
|
|
||||||
void max_load_factor(float z);
|
|
||||||
void rehash(size_type n);
|
|
||||||
void reserve(size_type n);
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class Key, class T, unsigned int Options = 0, class Hash = hash<Key>, class Pred = equal_to<Key>,
|
|
||||||
class Allocator = allocator<pair<const Key, T> > >
|
|
||||||
class hash_map
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
// types
|
|
||||||
typedef Key key_type;
|
|
||||||
typedef T mapped_type;
|
|
||||||
typedef Hash hasher;
|
|
||||||
typedef Pred key_equal;
|
|
||||||
typedef Allocator allocator_type;
|
|
||||||
typedef pair<const key_type, mapped_type> value_type;
|
|
||||||
typedef value_type& reference;
|
|
||||||
typedef const value_type& const_reference;
|
|
||||||
typedef typename allocator_traits<allocator_type>::pointer pointer;
|
|
||||||
typedef typename allocator_traits<allocator_type>::const_pointer const_pointer;
|
|
||||||
typedef typename allocator_traits<allocator_type>::size_type size_type;
|
|
||||||
typedef typename allocator_traits<allocator_type>::difference_type difference_type;
|
|
||||||
|
|
||||||
typedef /unspecified/ iterator;
|
|
||||||
typedef /unspecified/ const_iterator;
|
|
||||||
typedef /unspecified/ local_iterator;
|
|
||||||
typedef /unspecified/ const_local_iterator;
|
|
||||||
|
|
||||||
hash_map()
|
|
||||||
noexcept(
|
|
||||||
is_nothrow_default_constructible<hasher>::value &&
|
|
||||||
is_nothrow_default_constructible<key_equal>::value &&
|
|
||||||
is_nothrow_default_constructible<allocator_type>::value);
|
|
||||||
explicit hash_map(size_type n, const hasher& hf = hasher(),
|
|
||||||
const key_equal& eql = key_equal(),
|
|
||||||
const allocator_type& a = allocator_type());
|
|
||||||
template <class InputIterator>
|
|
||||||
hash_map(InputIterator f, InputIterator l,
|
|
||||||
size_type n = 0, const hasher& hf = hasher(),
|
|
||||||
const key_equal& eql = key_equal(),
|
|
||||||
const allocator_type& a = allocator_type());
|
|
||||||
explicit hash_map(const allocator_type&);
|
|
||||||
hash_map(const hash_map&);
|
|
||||||
hash_map(const hash_map&, const Allocator&);
|
|
||||||
hash_map(hash_map&&)
|
|
||||||
noexcept(
|
|
||||||
is_nothrow_move_constructible<hasher>::value &&
|
|
||||||
is_nothrow_move_constructible<key_equal>::value &&
|
|
||||||
is_nothrow_move_constructible<allocator_type>::value);
|
|
||||||
hash_map(hash_map&&, const Allocator&);
|
|
||||||
hash_map(initializer_list<value_type>, size_type n = 0,
|
|
||||||
const hasher& hf = hasher(), const key_equal& eql = key_equal(),
|
|
||||||
const allocator_type& a = allocator_type());
|
|
||||||
~hash_map();
|
|
||||||
hash_map& operator=(const hash_map&);
|
|
||||||
hash_map& operator=(hash_map&&)
|
|
||||||
noexcept(
|
|
||||||
allocator_type::propagate_on_container_move_assignment::value &&
|
|
||||||
is_nothrow_move_assignable<allocator_type>::value &&
|
|
||||||
is_nothrow_move_assignable<hasher>::value &&
|
|
||||||
is_nothrow_move_assignable<key_equal>::value);
|
|
||||||
hash_map& operator=(initializer_list<value_type>);
|
|
||||||
|
|
||||||
allocator_type get_allocator() const noexcept;
|
|
||||||
|
|
||||||
bool empty() const noexcept;
|
|
||||||
size_type size() const noexcept;
|
|
||||||
size_type max_size() const noexcept;
|
|
||||||
|
|
||||||
iterator begin() noexcept;
|
|
||||||
iterator end() noexcept;
|
|
||||||
const_iterator begin() const noexcept;
|
|
||||||
const_iterator end() const noexcept;
|
|
||||||
const_iterator cbegin() const noexcept;
|
|
||||||
const_iterator cend() const noexcept;
|
|
||||||
|
|
||||||
template <class... Args>
|
|
||||||
pair<iterator, bool> emplace(BOOST_FWD_REF(Args)... args);
|
|
||||||
template <class... Args>
|
|
||||||
iterator emplace_hint(const_iterator position, BOOST_FWD_REF(Args)... args);
|
|
||||||
pair<iterator, bool> insert(const value_type& obj);
|
|
||||||
template <class P>
|
|
||||||
pair<iterator, bool> insert(P&& obj);
|
|
||||||
iterator insert(const_iterator hint, const value_type& obj);
|
|
||||||
template <class P>
|
|
||||||
iterator insert(const_iterator hint, P&& obj);
|
|
||||||
template <class InputIterator>
|
|
||||||
void insert(InputIterator first, InputIterator last);
|
|
||||||
void insert(initializer_list<value_type>);
|
|
||||||
|
|
||||||
iterator erase(const_iterator position);
|
|
||||||
size_type erase(const key_type& k);
|
|
||||||
iterator erase(const_iterator first, const_iterator last);
|
|
||||||
void clear() noexcept;
|
|
||||||
|
|
||||||
void swap(hash_map&)
|
|
||||||
noexcept(
|
|
||||||
(!allocator_type::propagate_on_container_swap::value ||
|
|
||||||
__is_nothrow_swappable<allocator_type>::value) &&
|
|
||||||
__is_nothrow_swappable<hasher>::value &&
|
|
||||||
__is_nothrow_swappable<key_equal>::value);
|
|
||||||
|
|
||||||
hasher hash_function() const;
|
|
||||||
key_equal key_eq() const;
|
|
||||||
|
|
||||||
iterator find(const key_type& k);
|
|
||||||
const_iterator find(const key_type& k) const;
|
|
||||||
size_type count(const key_type& k) const;
|
|
||||||
pair<iterator, iterator> equal_range(const key_type& k);
|
|
||||||
pair<const_iterator, const_iterator> equal_range(const key_type& k) const;
|
|
||||||
|
|
||||||
mapped_type& operator[](const key_type& k);
|
|
||||||
mapped_type& operator[](key_type&& k);
|
|
||||||
|
|
||||||
mapped_type& at(const key_type& k);
|
|
||||||
const mapped_type& at(const key_type& k) const;
|
|
||||||
|
|
||||||
size_type bucket_count() const noexcept;
|
|
||||||
size_type max_bucket_count() const noexcept;
|
|
||||||
|
|
||||||
size_type bucket_size(size_type n) const;
|
|
||||||
size_type bucket(const key_type& k) const;
|
|
||||||
|
|
||||||
local_iterator begin(size_type n);
|
|
||||||
local_iterator end(size_type n);
|
|
||||||
const_local_iterator begin(size_type n) const;
|
|
||||||
const_local_iterator end(size_type n) const;
|
|
||||||
const_local_iterator cbegin(size_type n) const;
|
|
||||||
const_local_iterator cend(size_type n) const;
|
|
||||||
|
|
||||||
float load_factor() const noexcept;
|
|
||||||
float max_load_factor() const noexcept;
|
|
||||||
void max_load_factor(float z);
|
|
||||||
void rehash(size_type n);
|
|
||||||
void reserve(size_type n);
|
|
||||||
};
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
template <class Key, class Value, class KeyOfValue, unsigned int Options = 0, class Hash = hash<Key>, class Pred = equal_to<Key>,
|
|
||||||
class Allocator = allocator<Value> >
|
|
||||||
class hash_table
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
// types
|
|
||||||
typedef Value key_type;
|
|
||||||
typedef key_type value_type;
|
|
||||||
typedef Hash hasher;
|
|
||||||
typedef Pred key_equal;
|
|
||||||
typedef Allocator allocator_type;
|
|
||||||
typedef value_type& reference;
|
|
||||||
typedef const value_type& const_reference;
|
|
||||||
typedef typename allocator_traits<allocator_type>::pointer pointer;
|
|
||||||
typedef typename allocator_traits<allocator_type>::const_pointer const_pointer;
|
|
||||||
typedef typename allocator_traits<allocator_type>::size_type size_type;
|
|
||||||
typedef typename allocator_traits<allocator_type>::difference_type difference_type;
|
|
||||||
|
|
||||||
typedef /unspecified/ iterator;
|
|
||||||
typedef /unspecified/ const_iterator;
|
|
||||||
typedef /unspecified/ local_iterator;
|
|
||||||
typedef /unspecified/ const_local_iterator;
|
|
||||||
|
|
||||||
hash_set()
|
|
||||||
noexcept(
|
|
||||||
is_nothrow_default_constructible<hasher>::value &&
|
|
||||||
is_nothrow_default_constructible<key_equal>::value &&
|
|
||||||
is_nothrow_default_constructible<allocator_type>::value);
|
|
||||||
explicit hash_set(size_type n, const hasher& hf = hasher(),
|
|
||||||
const key_equal& eql = key_equal(),
|
|
||||||
const allocator_type& a = allocator_type());
|
|
||||||
template <class InputIterator>
|
|
||||||
hash_set(InputIterator f, InputIterator l,
|
|
||||||
size_type n = 0, const hasher& hf = hasher(),
|
|
||||||
const key_equal& eql = key_equal(),
|
|
||||||
const allocator_type& a = allocator_type());
|
|
||||||
explicit hash_set(const allocator_type&);
|
|
||||||
hash_set(const hash_set&);
|
|
||||||
hash_set(const hash_set&, const Allocator&);
|
|
||||||
hash_set(hash_set&&)
|
|
||||||
noexcept(
|
|
||||||
is_nothrow_move_constructible<hasher>::value &&
|
|
||||||
is_nothrow_move_constructible<key_equal>::value &&
|
|
||||||
is_nothrow_move_constructible<allocator_type>::value);
|
|
||||||
hash_set(hash_set&&, const Allocator&);
|
|
||||||
hash_set(initializer_list<value_type>, size_type n = 0,
|
|
||||||
const hasher& hf = hasher(), const key_equal& eql = key_equal(),
|
|
||||||
const allocator_type& a = allocator_type());
|
|
||||||
~hash_set();
|
|
||||||
hash_set& operator=(const hash_set&);
|
|
||||||
hash_set& operator=(hash_set&&)
|
|
||||||
noexcept(
|
|
||||||
allocator_type::propagate_on_container_move_assignment::value &&
|
|
||||||
is_nothrow_move_assignable<allocator_type>::value &&
|
|
||||||
is_nothrow_move_assignable<hasher>::value &&
|
|
||||||
is_nothrow_move_assignable<key_equal>::value);
|
|
||||||
hash_set& operator=(initializer_list<value_type>);
|
|
||||||
|
|
||||||
allocator_type get_allocator() const noexcept;
|
|
||||||
|
|
||||||
bool empty() const noexcept;
|
|
||||||
size_type size() const noexcept;
|
|
||||||
size_type max_size() const noexcept;
|
|
||||||
|
|
||||||
iterator begin() noexcept;
|
|
||||||
iterator end() noexcept;
|
|
||||||
const_iterator begin() const noexcept;
|
|
||||||
const_iterator end() const noexcept;
|
|
||||||
const_iterator cbegin() const noexcept;
|
|
||||||
const_iterator cend() const noexcept;
|
|
||||||
|
|
||||||
template <class... Args>
|
|
||||||
pair<iterator, bool> emplace(BOOST_FWD_REF(Args)... args);
|
|
||||||
template <class... Args>
|
|
||||||
iterator emplace_hint(const_iterator position, BOOST_FWD_REF(Args)... args);
|
|
||||||
pair<iterator, bool> insert(const value_type& obj);
|
|
||||||
pair<iterator, bool> insert(value_type&& obj);
|
|
||||||
iterator insert(const_iterator hint, const value_type& obj);
|
|
||||||
iterator insert(const_iterator hint, value_type&& obj);
|
|
||||||
template <class InputIterator>
|
|
||||||
void insert(InputIterator first, InputIterator last);
|
|
||||||
void insert(initializer_list<value_type>);
|
|
||||||
|
|
||||||
iterator erase(const_iterator position);
|
|
||||||
size_type erase(const key_type& k);
|
|
||||||
iterator erase(const_iterator first, const_iterator last);
|
|
||||||
void clear() noexcept;
|
|
||||||
|
|
||||||
void swap(hash_set&)
|
|
||||||
noexcept(
|
|
||||||
(!allocator_type::propagate_on_container_swap::value ||
|
|
||||||
__is_nothrow_swappable<allocator_type>::value) &&
|
|
||||||
__is_nothrow_swappable<hasher>::value &&
|
|
||||||
__is_nothrow_swappable<key_equal>::value);
|
|
||||||
|
|
||||||
hasher hash_function() const;
|
|
||||||
key_equal key_eq() const;
|
|
||||||
|
|
||||||
iterator find(const key_type& k);
|
|
||||||
const_iterator find(const key_type& k) const;
|
|
||||||
size_type count(const key_type& k) const;
|
|
||||||
pair<iterator, iterator> equal_range(const key_type& k);
|
|
||||||
pair<const_iterator, const_iterator> equal_range(const key_type& k) const;
|
|
||||||
|
|
||||||
size_type bucket_count() const noexcept;
|
|
||||||
size_type max_bucket_count() const noexcept;
|
|
||||||
|
|
||||||
size_type bucket_size(size_type n) const;
|
|
||||||
size_type bucket(const key_type& k) const;
|
|
||||||
|
|
||||||
local_iterator begin(size_type n);
|
|
||||||
local_iterator end(size_type n);
|
|
||||||
const_local_iterator begin(size_type n) const;
|
|
||||||
const_local_iterator end(size_type n) const;
|
|
||||||
const_local_iterator cbegin(size_type n) const;
|
|
||||||
const_local_iterator cend(size_type n) const;
|
|
||||||
|
|
||||||
float load_factor() const noexcept;
|
|
||||||
float max_load_factor() const noexcept;
|
|
||||||
void max_load_factor(float z);
|
|
||||||
void rehash(size_type n);
|
|
||||||
void reserve(size_type n);
|
|
||||||
};
|
|
@@ -1,14 +1,9 @@
|
|||||||
// Copyright (C) 2000 Stephen Cleary
|
|
||||||
//
|
|
||||||
// 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 for updates, documentation, and revision history.
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// (C) Copyright Ion Gaztanaga 2007-2013. Distributed under the Boost
|
// (C) Copyright Stephen Cleary 2000
|
||||||
|
// (C) Copyright Ion Gaztanaga 2015-2017.
|
||||||
|
//
|
||||||
|
// Distributed under the Boost
|
||||||
// Software License, Version 1.0. (See accompanying file
|
// Software License, Version 1.0. (See accompanying file
|
||||||
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
//
|
//
|
||||||
|
@@ -140,9 +140,9 @@ class new_allocator
|
|||||||
//!Throws std::bad_alloc if there is no enough memory
|
//!Throws std::bad_alloc if there is no enough memory
|
||||||
pointer allocate(size_type count)
|
pointer allocate(size_type count)
|
||||||
{
|
{
|
||||||
if(BOOST_UNLIKELY(count > this->max_size()))
|
if(BOOST_UNLIKELY(count > this->max_size()))
|
||||||
throw_bad_alloc();
|
throw_bad_alloc();
|
||||||
return static_cast<T*>(::operator new(count*sizeof(T)));
|
return static_cast<T*>(::operator new(count*sizeof(T)));
|
||||||
}
|
}
|
||||||
|
|
||||||
//!Deallocates previously allocated memory.
|
//!Deallocates previously allocated memory.
|
||||||
|
@@ -507,7 +507,7 @@ class small_vector : public small_vector_base<T, Allocator>
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
BOOST_CONTAINER_FORCEINLINE small_vector()
|
BOOST_CONTAINER_FORCEINLINE small_vector()
|
||||||
BOOST_NOEXCEPT_IF(container_detail::is_nothrow_default_constructible<Allocator>::value)
|
BOOST_NOEXCEPT_IF(container_detail::is_nothrow_default_constructible<Allocator>::value)
|
||||||
: base_type(initial_capacity_t(), internal_capacity())
|
: base_type(initial_capacity_t(), internal_capacity())
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@@ -1,136 +1,135 @@
|
|||||||
<?xml version="1.0" encoding="Windows-1252"?>
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
<VisualStudioProject
|
<VisualStudioProject
|
||||||
ProjectType="Visual C++"
|
ProjectType="Visual C++"
|
||||||
Version="7.10"
|
Version="7.10"
|
||||||
Name="static_vector_test"
|
Name="static_vector_test"
|
||||||
ProjectGUID="{58E1C1C3-096A-84FE-4FA2-D6BA79201C02}"
|
ProjectGUID="{58E1C1C3-096A-84FE-4FA2-D6BA79201C02}"
|
||||||
Keyword="Win32Proj">
|
Keyword="Win32Proj">
|
||||||
<Platforms>
|
<Platforms>
|
||||||
<Platform
|
<Platform
|
||||||
Name="Win32"/>
|
Name="Win32"/>
|
||||||
</Platforms>
|
</Platforms>
|
||||||
<Configurations>
|
<Configurations>
|
||||||
<Configuration
|
<Configuration
|
||||||
Name="Debug|Win32"
|
Name="Debug|Win32"
|
||||||
OutputDirectory="../../Bin/Win32/Debug"
|
OutputDirectory="../../Bin/Win32/Debug"
|
||||||
IntermediateDirectory="Debug/static_vector_test"
|
IntermediateDirectory="Debug/static_vector_test"
|
||||||
ConfigurationType="1"
|
ConfigurationType="1"
|
||||||
CharacterSet="2">
|
CharacterSet="2">
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
Optimization="0"
|
||||||
AdditionalIncludeDirectories="../../../.."
|
AdditionalIncludeDirectories="../../../.."
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||||
MinimalRebuild="TRUE"
|
MinimalRebuild="TRUE"
|
||||||
ExceptionHandling="TRUE"
|
ExceptionHandling="TRUE"
|
||||||
BasicRuntimeChecks="3"
|
BasicRuntimeChecks="3"
|
||||||
RuntimeLibrary="3"
|
RuntimeLibrary="3"
|
||||||
TreatWChar_tAsBuiltInType="TRUE"
|
TreatWChar_tAsBuiltInType="TRUE"
|
||||||
ForceConformanceInForLoopScope="FALSE"
|
ForceConformanceInForLoopScope="FALSE"
|
||||||
UsePrecompiledHeader="0"
|
UsePrecompiledHeader="0"
|
||||||
WarningLevel="4"
|
WarningLevel="4"
|
||||||
Detect64BitPortabilityProblems="TRUE"
|
Detect64BitPortabilityProblems="TRUE"
|
||||||
DebugInformationFormat="3"/>
|
DebugInformationFormat="3"/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"/>
|
Name="VCCustomBuildTool"/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
AdditionalDependencies="winmm.lib"
|
AdditionalDependencies="winmm.lib"
|
||||||
OutputFile="$(OutDir)/static_vector_test_d.exe"
|
OutputFile="$(OutDir)/static_vector_test_d.exe"
|
||||||
LinkIncremental="1"
|
LinkIncremental="1"
|
||||||
AdditionalLibraryDirectories="../../../../stage/lib"
|
AdditionalLibraryDirectories="../../../../stage/lib"
|
||||||
GenerateDebugInformation="TRUE"
|
GenerateDebugInformation="TRUE"
|
||||||
ProgramDatabaseFile="$(OutDir)/static_vector_test.pdb"
|
ProgramDatabaseFile="$(OutDir)/static_vector_test.pdb"
|
||||||
SubSystem="1"
|
SubSystem="1"
|
||||||
TargetMachine="1"
|
TargetMachine="1"
|
||||||
FixedBaseAddress="1"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebDeploymentTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedWrapperGeneratorTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="Release|Win32"
|
|
||||||
OutputDirectory="../../Bin/Win32/Release"
|
|
||||||
IntermediateDirectory="Release/static_vector_test"
|
|
||||||
ConfigurationType="1"
|
|
||||||
CharacterSet="2">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
AdditionalIncludeDirectories="../../../.."
|
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
|
||||||
RuntimeLibrary="2"
|
|
||||||
TreatWChar_tAsBuiltInType="TRUE"
|
|
||||||
ForceConformanceInForLoopScope="FALSE"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
WarningLevel="4"
|
|
||||||
Detect64BitPortabilityProblems="TRUE"
|
|
||||||
DebugInformationFormat="0"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
AdditionalDependencies="winmm.lib"
|
|
||||||
OutputFile="$(OutDir)/static_vector_test.exe"
|
|
||||||
LinkIncremental="1"
|
|
||||||
AdditionalLibraryDirectories="../../../../stage/lib"
|
|
||||||
GenerateDebugInformation="TRUE"
|
|
||||||
SubSystem="1"
|
|
||||||
OptimizeReferences="2"
|
|
||||||
EnableCOMDATFolding="2"
|
|
||||||
TargetMachine="1"
|
|
||||||
FixedBaseAddress="1"/>
|
FixedBaseAddress="1"/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCMIDLTool"/>
|
Name="VCMIDLTool"/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCPostBuildEventTool"/>
|
Name="VCPostBuildEventTool"/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCPreBuildEventTool"/>
|
Name="VCPreBuildEventTool"/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCPreLinkEventTool"/>
|
Name="VCPreLinkEventTool"/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCResourceCompilerTool"/>
|
Name="VCResourceCompilerTool"/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCWebServiceProxyGeneratorTool"/>
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCXMLDataGeneratorTool"/>
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCWebDeploymentTool"/>
|
Name="VCWebDeploymentTool"/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCManagedWrapperGeneratorTool"/>
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
</Configurations>
|
<Configuration
|
||||||
<References>
|
Name="Release|Win32"
|
||||||
</References>
|
OutputDirectory="../../Bin/Win32/Release"
|
||||||
<Files>
|
IntermediateDirectory="Release/static_vector_test"
|
||||||
<Filter
|
ConfigurationType="1"
|
||||||
Name="Source Files"
|
CharacterSet="2">
|
||||||
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
<Tool
|
||||||
UniqueIdentifier="{4137B7CF-A066-4312-7AC5-32D732A37AAF}">
|
Name="VCCLCompilerTool"
|
||||||
<File
|
AdditionalIncludeDirectories="../../../.."
|
||||||
RelativePath="..\..\test\static_vector_test.cpp">
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||||
</File>
|
RuntimeLibrary="2"
|
||||||
</Filter>
|
TreatWChar_tAsBuiltInType="TRUE"
|
||||||
</Files>
|
ForceConformanceInForLoopScope="FALSE"
|
||||||
<Globals>
|
UsePrecompiledHeader="0"
|
||||||
</Globals>
|
WarningLevel="4"
|
||||||
|
Detect64BitPortabilityProblems="TRUE"
|
||||||
|
DebugInformationFormat="3"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies="winmm.lib"
|
||||||
|
OutputFile="$(OutDir)/static_vector_test.exe"
|
||||||
|
LinkIncremental="1"
|
||||||
|
AdditionalLibraryDirectories="../../../../stage/lib"
|
||||||
|
GenerateDebugInformation="TRUE"
|
||||||
|
SubSystem="1"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
FixedBaseAddress="1"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
|
UniqueIdentifier="{4137B7CF-A066-4312-7AC5-32D732A37AAF}">
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\test\static_vector_test.cpp">
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
</VisualStudioProject>
|
</VisualStudioProject>
|
||||||
|
@@ -391,10 +391,10 @@ int main ()
|
|||||||
//Test std::pair value type as tree has workarounds to make old std::pair
|
//Test std::pair value type as tree has workarounds to make old std::pair
|
||||||
//implementations movable that can break things
|
//implementations movable that can break things
|
||||||
{
|
{
|
||||||
boost::container::map<pair_t, pair_t> s;
|
boost::container::map<pair_t, pair_t> s;
|
||||||
std::pair<const pair_t,pair_t> p;
|
std::pair<const pair_t,pair_t> p;
|
||||||
s.insert(p);
|
s.insert(p);
|
||||||
s.emplace(p);
|
s.emplace(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////
|
////////////////////////////////////
|
||||||
|
@@ -1331,6 +1331,44 @@ int main()
|
|||||||
dummy.~MarkTypePair();
|
dummy.~MarkTypePair();
|
||||||
}
|
}
|
||||||
#endif //BOOST_CONTAINER_PAIR_TEST_HAS_HEADER_TUPLE
|
#endif //BOOST_CONTAINER_PAIR_TEST_HAS_HEADER_TUPLE
|
||||||
|
|
||||||
|
//Check construction with try_emplace_t 0/1 arguments for each pair
|
||||||
|
{
|
||||||
|
typedef ::allocator_argument_tester<NotUsesAllocator, 0> MarkType;
|
||||||
|
typedef pair<MarkType, MarkType> MarkTypePair;
|
||||||
|
MarkTypePair dummy;
|
||||||
|
dummy.~MarkTypePair();
|
||||||
|
s0i.construct(&dummy, try_emplace_t(), 5, 1);
|
||||||
|
BOOST_TEST(dummy.first.construction_type == NotUsesAllocator);
|
||||||
|
BOOST_TEST(dummy.second.construction_type == NotUsesAllocator);
|
||||||
|
BOOST_TEST(dummy.first.value == 5);
|
||||||
|
BOOST_TEST(dummy.second.value == 1);
|
||||||
|
dummy.~MarkTypePair();
|
||||||
|
}
|
||||||
|
{
|
||||||
|
typedef ::allocator_argument_tester<ConstructibleSuffix, 0> MarkType;
|
||||||
|
typedef pair<MarkType, MarkType> MarkTypePair;
|
||||||
|
MarkTypePair dummy;
|
||||||
|
dummy.~MarkTypePair();
|
||||||
|
s0i.construct(&dummy, try_emplace_t(), 6);
|
||||||
|
BOOST_TEST(dummy.first.construction_type == ConstructibleSuffix);
|
||||||
|
BOOST_TEST(dummy.second.construction_type == ConstructibleSuffix);
|
||||||
|
BOOST_TEST(dummy.first.value == 6);
|
||||||
|
BOOST_TEST(dummy.second.value == 0);
|
||||||
|
dummy.~MarkTypePair();
|
||||||
|
}
|
||||||
|
{
|
||||||
|
typedef ::allocator_argument_tester<ConstructiblePrefix, 0> MarkType;
|
||||||
|
typedef pair<MarkType, MarkType> MarkTypePair;
|
||||||
|
MarkTypePair dummy;
|
||||||
|
dummy.~MarkTypePair();
|
||||||
|
s0i.construct(&dummy, try_emplace_t(), 7, 2);
|
||||||
|
BOOST_TEST(dummy.first.construction_type == ConstructiblePrefix);
|
||||||
|
BOOST_TEST(dummy.second.construction_type == ConstructiblePrefix);
|
||||||
|
BOOST_TEST(dummy.first.value == 7);
|
||||||
|
BOOST_TEST(dummy.second.value == 2);
|
||||||
|
dummy.~MarkTypePair();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -379,10 +379,10 @@ int main ()
|
|||||||
//Test std::pair value type as tree has workarounds to make old std::pair
|
//Test std::pair value type as tree has workarounds to make old std::pair
|
||||||
//implementations movable that can break things
|
//implementations movable that can break things
|
||||||
{
|
{
|
||||||
boost::container::set<std::pair<int,int> > s;
|
boost::container::set<std::pair<int,int> > s;
|
||||||
std::pair<int,int> p(0, 0);
|
std::pair<int,int> p(0, 0);
|
||||||
s.insert(p);
|
s.insert(p);
|
||||||
s.emplace(p);
|
s.emplace(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
test_merge_from_different_comparison();
|
test_merge_from_different_comparison();
|
||||||
|
@@ -650,10 +650,13 @@ void test_sv_elem(T const& t)
|
|||||||
|
|
||||||
bool default_init_test()//Test for default initialization
|
bool default_init_test()//Test for default initialization
|
||||||
{
|
{
|
||||||
typedef static_vector<int, 100> di_vector_t;
|
|
||||||
|
|
||||||
const std::size_t Capacity = 100;
|
const std::size_t Capacity = 100;
|
||||||
|
|
||||||
|
typedef static_vector<int, Capacity> di_vector_t;
|
||||||
|
|
||||||
|
{
|
||||||
|
di_vector_t v(Capacity, default_init);
|
||||||
|
}
|
||||||
{
|
{
|
||||||
di_vector_t v;
|
di_vector_t v;
|
||||||
int *p = v.data();
|
int *p = v.data();
|
||||||
@@ -662,7 +665,7 @@ bool default_init_test()//Test for default initialization
|
|||||||
*p = static_cast<int>(i);
|
*p = static_cast<int>(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Destroy the vector, p stilll pointing to the storage
|
//Destroy the vector, p still pointing to the storage
|
||||||
v.~di_vector_t();
|
v.~di_vector_t();
|
||||||
|
|
||||||
di_vector_t &rv = *::new(&v)di_vector_t(Capacity, default_init);
|
di_vector_t &rv = *::new(&v)di_vector_t(Capacity, default_init);
|
||||||
|
Reference in New Issue
Block a user