Movable unordered containers, full support only for compilers with rvalue references.
Merged revisions 44076-44414 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
........
r44076 | danieljames | 2008-04-06 20:41:19 +0100 (Sun, 06 Apr 2008) | 1 line
Move semantics for compilers with rvalue references.
........
r44077 | danieljames | 2008-04-06 20:48:59 +0100 (Sun, 06 Apr 2008) | 1 line
Do move assignment 'properly'.
........
r44085 | danieljames | 2008-04-06 22:46:04 +0100 (Sun, 06 Apr 2008) | 1 line
Use normal references for the move members, reset the source buckets_ pointer to stop the buckets getting deleted, and remove a superflous pointer check.
........
r44109 | danieljames | 2008-04-07 23:49:36 +0100 (Mon, 07 Apr 2008) | 1 line
Add missing tests.
........
r44366 | danieljames | 2008-04-13 12:59:46 +0100 (Sun, 13 Apr 2008) | 1 line
Avoid using rvalue references in the implementation files.
........
r44368 | danieljames | 2008-04-13 15:13:33 +0100 (Sun, 13 Apr 2008) | 6 lines
Use a cut down version of the work in progress move library to implement move
semantics on more compilers. Unfortunately the move constructor with allocator
isn't really practical at the moment, since in the case where the container
can't be moved, and the allocators aren't equal it will copy the container
twice.
........
[SVN r44486]
2008-04-17 07:34:15 +00:00
|
|
|
|
2009-03-09 20:56:23 +00:00
|
|
|
// Copyright 2008-2009 Daniel James.
|
Movable unordered containers, full support only for compilers with rvalue references.
Merged revisions 44076-44414 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
........
r44076 | danieljames | 2008-04-06 20:41:19 +0100 (Sun, 06 Apr 2008) | 1 line
Move semantics for compilers with rvalue references.
........
r44077 | danieljames | 2008-04-06 20:48:59 +0100 (Sun, 06 Apr 2008) | 1 line
Do move assignment 'properly'.
........
r44085 | danieljames | 2008-04-06 22:46:04 +0100 (Sun, 06 Apr 2008) | 1 line
Use normal references for the move members, reset the source buckets_ pointer to stop the buckets getting deleted, and remove a superflous pointer check.
........
r44109 | danieljames | 2008-04-07 23:49:36 +0100 (Mon, 07 Apr 2008) | 1 line
Add missing tests.
........
r44366 | danieljames | 2008-04-13 12:59:46 +0100 (Sun, 13 Apr 2008) | 1 line
Avoid using rvalue references in the implementation files.
........
r44368 | danieljames | 2008-04-13 15:13:33 +0100 (Sun, 13 Apr 2008) | 6 lines
Use a cut down version of the work in progress move library to implement move
semantics on more compilers. Unfortunately the move constructor with allocator
isn't really practical at the moment, since in the case where the container
can't be moved, and the allocators aren't equal it will copy the container
twice.
........
[SVN r44486]
2008-04-17 07:34:15 +00:00
|
|
|
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
|
|
|
|
// file LICENSE_1_0.txt or move at http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
|
|
2017-02-19 13:05:17 +00:00
|
|
|
// clang-format off
|
2009-11-26 23:15:30 +00:00
|
|
|
#include "../helpers/prefix.hpp"
|
Movable unordered containers, full support only for compilers with rvalue references.
Merged revisions 44076-44414 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
........
r44076 | danieljames | 2008-04-06 20:41:19 +0100 (Sun, 06 Apr 2008) | 1 line
Move semantics for compilers with rvalue references.
........
r44077 | danieljames | 2008-04-06 20:48:59 +0100 (Sun, 06 Apr 2008) | 1 line
Do move assignment 'properly'.
........
r44085 | danieljames | 2008-04-06 22:46:04 +0100 (Sun, 06 Apr 2008) | 1 line
Use normal references for the move members, reset the source buckets_ pointer to stop the buckets getting deleted, and remove a superflous pointer check.
........
r44109 | danieljames | 2008-04-07 23:49:36 +0100 (Mon, 07 Apr 2008) | 1 line
Add missing tests.
........
r44366 | danieljames | 2008-04-13 12:59:46 +0100 (Sun, 13 Apr 2008) | 1 line
Avoid using rvalue references in the implementation files.
........
r44368 | danieljames | 2008-04-13 15:13:33 +0100 (Sun, 13 Apr 2008) | 6 lines
Use a cut down version of the work in progress move library to implement move
semantics on more compilers. Unfortunately the move constructor with allocator
isn't really practical at the moment, since in the case where the container
can't be moved, and the allocators aren't equal it will copy the container
twice.
........
[SVN r44486]
2008-04-17 07:34:15 +00:00
|
|
|
#include <boost/unordered_set.hpp>
|
|
|
|
|
#include <boost/unordered_map.hpp>
|
2012-04-08 15:29:15 +00:00
|
|
|
#include "../helpers/postfix.hpp"
|
2017-02-19 13:05:17 +00:00
|
|
|
// clang-format on
|
2012-04-08 15:29:15 +00:00
|
|
|
|
Movable unordered containers, full support only for compilers with rvalue references.
Merged revisions 44076-44414 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
........
r44076 | danieljames | 2008-04-06 20:41:19 +0100 (Sun, 06 Apr 2008) | 1 line
Move semantics for compilers with rvalue references.
........
r44077 | danieljames | 2008-04-06 20:48:59 +0100 (Sun, 06 Apr 2008) | 1 line
Do move assignment 'properly'.
........
r44085 | danieljames | 2008-04-06 22:46:04 +0100 (Sun, 06 Apr 2008) | 1 line
Use normal references for the move members, reset the source buckets_ pointer to stop the buckets getting deleted, and remove a superflous pointer check.
........
r44109 | danieljames | 2008-04-07 23:49:36 +0100 (Mon, 07 Apr 2008) | 1 line
Add missing tests.
........
r44366 | danieljames | 2008-04-13 12:59:46 +0100 (Sun, 13 Apr 2008) | 1 line
Avoid using rvalue references in the implementation files.
........
r44368 | danieljames | 2008-04-13 15:13:33 +0100 (Sun, 13 Apr 2008) | 6 lines
Use a cut down version of the work in progress move library to implement move
semantics on more compilers. Unfortunately the move constructor with allocator
isn't really practical at the moment, since in the case where the container
can't be moved, and the allocators aren't equal it will copy the container
twice.
........
[SVN r44486]
2008-04-17 07:34:15 +00:00
|
|
|
#include "../helpers/test.hpp"
|
|
|
|
|
#include "../objects/test.hpp"
|
2011-08-14 18:53:29 +00:00
|
|
|
#include "../objects/cxx11_allocator.hpp"
|
Movable unordered containers, full support only for compilers with rvalue references.
Merged revisions 44076-44414 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
........
r44076 | danieljames | 2008-04-06 20:41:19 +0100 (Sun, 06 Apr 2008) | 1 line
Move semantics for compilers with rvalue references.
........
r44077 | danieljames | 2008-04-06 20:48:59 +0100 (Sun, 06 Apr 2008) | 1 line
Do move assignment 'properly'.
........
r44085 | danieljames | 2008-04-06 22:46:04 +0100 (Sun, 06 Apr 2008) | 1 line
Use normal references for the move members, reset the source buckets_ pointer to stop the buckets getting deleted, and remove a superflous pointer check.
........
r44109 | danieljames | 2008-04-07 23:49:36 +0100 (Mon, 07 Apr 2008) | 1 line
Add missing tests.
........
r44366 | danieljames | 2008-04-13 12:59:46 +0100 (Sun, 13 Apr 2008) | 1 line
Avoid using rvalue references in the implementation files.
........
r44368 | danieljames | 2008-04-13 15:13:33 +0100 (Sun, 13 Apr 2008) | 6 lines
Use a cut down version of the work in progress move library to implement move
semantics on more compilers. Unfortunately the move constructor with allocator
isn't really practical at the moment, since in the case where the container
can't be moved, and the allocators aren't equal it will copy the container
twice.
........
[SVN r44486]
2008-04-17 07:34:15 +00:00
|
|
|
#include "../helpers/random_values.hpp"
|
|
|
|
|
#include "../helpers/tracker.hpp"
|
|
|
|
|
#include "../helpers/equivalent.hpp"
|
|
|
|
|
#include "../helpers/invariants.hpp"
|
|
|
|
|
|
2011-08-14 21:03:18 +00:00
|
|
|
#if defined(BOOST_MSVC)
|
2017-02-19 13:05:17 +00:00
|
|
|
#pragma warning(disable : 4127) // conditional expression is constant
|
2011-08-14 21:03:18 +00:00
|
|
|
#endif
|
|
|
|
|
|
2017-02-19 13:05:17 +00:00
|
|
|
namespace move_tests {
|
2017-06-11 20:55:59 +01:00
|
|
|
test::seed_t initialize_seed(98624);
|
2017-02-19 13:05:17 +00:00
|
|
|
#if defined(BOOST_UNORDERED_USE_MOVE) || \
|
2017-06-11 20:55:59 +01:00
|
|
|
!defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
2012-01-06 08:35:51 +00:00
|
|
|
#define BOOST_UNORDERED_TEST_MOVING 1
|
|
|
|
|
#else
|
|
|
|
|
#define BOOST_UNORDERED_TEST_MOVING 0
|
|
|
|
|
#endif
|
Movable unordered containers, full support only for compilers with rvalue references.
Merged revisions 44076-44414 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
........
r44076 | danieljames | 2008-04-06 20:41:19 +0100 (Sun, 06 Apr 2008) | 1 line
Move semantics for compilers with rvalue references.
........
r44077 | danieljames | 2008-04-06 20:48:59 +0100 (Sun, 06 Apr 2008) | 1 line
Do move assignment 'properly'.
........
r44085 | danieljames | 2008-04-06 22:46:04 +0100 (Sun, 06 Apr 2008) | 1 line
Use normal references for the move members, reset the source buckets_ pointer to stop the buckets getting deleted, and remove a superflous pointer check.
........
r44109 | danieljames | 2008-04-07 23:49:36 +0100 (Mon, 07 Apr 2008) | 1 line
Add missing tests.
........
r44366 | danieljames | 2008-04-13 12:59:46 +0100 (Sun, 13 Apr 2008) | 1 line
Avoid using rvalue references in the implementation files.
........
r44368 | danieljames | 2008-04-13 15:13:33 +0100 (Sun, 13 Apr 2008) | 6 lines
Use a cut down version of the work in progress move library to implement move
semantics on more compilers. Unfortunately the move constructor with allocator
isn't really practical at the moment, since in the case where the container
can't be moved, and the allocators aren't equal it will copy the container
twice.
........
[SVN r44486]
2008-04-17 07:34:15 +00:00
|
|
|
|
2017-06-11 20:55:59 +01:00
|
|
|
template <class T> T empty(T*) { return T(); }
|
Movable unordered containers, full support only for compilers with rvalue references.
Merged revisions 44076-44414 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
........
r44076 | danieljames | 2008-04-06 20:41:19 +0100 (Sun, 06 Apr 2008) | 1 line
Move semantics for compilers with rvalue references.
........
r44077 | danieljames | 2008-04-06 20:48:59 +0100 (Sun, 06 Apr 2008) | 1 line
Do move assignment 'properly'.
........
r44085 | danieljames | 2008-04-06 22:46:04 +0100 (Sun, 06 Apr 2008) | 1 line
Use normal references for the move members, reset the source buckets_ pointer to stop the buckets getting deleted, and remove a superflous pointer check.
........
r44109 | danieljames | 2008-04-07 23:49:36 +0100 (Mon, 07 Apr 2008) | 1 line
Add missing tests.
........
r44366 | danieljames | 2008-04-13 12:59:46 +0100 (Sun, 13 Apr 2008) | 1 line
Avoid using rvalue references in the implementation files.
........
r44368 | danieljames | 2008-04-13 15:13:33 +0100 (Sun, 13 Apr 2008) | 6 lines
Use a cut down version of the work in progress move library to implement move
semantics on more compilers. Unfortunately the move constructor with allocator
isn't really practical at the moment, since in the case where the container
can't be moved, and the allocators aren't equal it will copy the container
twice.
........
[SVN r44486]
2008-04-17 07:34:15 +00:00
|
|
|
|
2017-06-11 20:55:59 +01:00
|
|
|
template <class T>
|
|
|
|
|
T create(test::random_values<T> const& v, test::object_count& count)
|
|
|
|
|
{
|
2017-02-19 13:05:17 +00:00
|
|
|
T x(v.begin(), v.end());
|
|
|
|
|
count = test::global_object_count;
|
|
|
|
|
return x;
|
2017-06-11 20:55:59 +01:00
|
|
|
}
|
Movable unordered containers, full support only for compilers with rvalue references.
Merged revisions 44076-44414 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
........
r44076 | danieljames | 2008-04-06 20:41:19 +0100 (Sun, 06 Apr 2008) | 1 line
Move semantics for compilers with rvalue references.
........
r44077 | danieljames | 2008-04-06 20:48:59 +0100 (Sun, 06 Apr 2008) | 1 line
Do move assignment 'properly'.
........
r44085 | danieljames | 2008-04-06 22:46:04 +0100 (Sun, 06 Apr 2008) | 1 line
Use normal references for the move members, reset the source buckets_ pointer to stop the buckets getting deleted, and remove a superflous pointer check.
........
r44109 | danieljames | 2008-04-07 23:49:36 +0100 (Mon, 07 Apr 2008) | 1 line
Add missing tests.
........
r44366 | danieljames | 2008-04-13 12:59:46 +0100 (Sun, 13 Apr 2008) | 1 line
Avoid using rvalue references in the implementation files.
........
r44368 | danieljames | 2008-04-13 15:13:33 +0100 (Sun, 13 Apr 2008) | 6 lines
Use a cut down version of the work in progress move library to implement move
semantics on more compilers. Unfortunately the move constructor with allocator
isn't really practical at the moment, since in the case where the container
can't be moved, and the allocators aren't equal it will copy the container
twice.
........
[SVN r44486]
2008-04-17 07:34:15 +00:00
|
|
|
|
2017-06-11 20:55:59 +01:00
|
|
|
template <class T>
|
|
|
|
|
T create(test::random_values<T> const& v, test::object_count& count,
|
2017-02-19 13:05:17 +00:00
|
|
|
BOOST_DEDUCED_TYPENAME T::hasher hf, BOOST_DEDUCED_TYPENAME T::key_equal eq,
|
|
|
|
|
BOOST_DEDUCED_TYPENAME T::allocator_type al, float mlf)
|
2017-06-11 20:55:59 +01:00
|
|
|
{
|
2017-02-19 13:05:17 +00:00
|
|
|
T x(0, hf, eq, al);
|
|
|
|
|
x.max_load_factor(mlf);
|
|
|
|
|
x.insert(v.begin(), v.end());
|
|
|
|
|
count = test::global_object_count;
|
|
|
|
|
return x;
|
2017-06-11 20:55:59 +01:00
|
|
|
}
|
2017-02-19 13:05:17 +00:00
|
|
|
|
2017-06-11 20:55:59 +01:00
|
|
|
template <class T>
|
|
|
|
|
void move_construct_tests1(T* ptr, test::random_generator const& generator)
|
|
|
|
|
{
|
2017-02-19 13:05:17 +00:00
|
|
|
BOOST_DEDUCED_TYPENAME T::hasher hf;
|
|
|
|
|
BOOST_DEDUCED_TYPENAME T::key_equal eq;
|
|
|
|
|
BOOST_DEDUCED_TYPENAME T::allocator_type al;
|
Movable unordered containers, full support only for compilers with rvalue references.
Merged revisions 44076-44414 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
........
r44076 | danieljames | 2008-04-06 20:41:19 +0100 (Sun, 06 Apr 2008) | 1 line
Move semantics for compilers with rvalue references.
........
r44077 | danieljames | 2008-04-06 20:48:59 +0100 (Sun, 06 Apr 2008) | 1 line
Do move assignment 'properly'.
........
r44085 | danieljames | 2008-04-06 22:46:04 +0100 (Sun, 06 Apr 2008) | 1 line
Use normal references for the move members, reset the source buckets_ pointer to stop the buckets getting deleted, and remove a superflous pointer check.
........
r44109 | danieljames | 2008-04-07 23:49:36 +0100 (Mon, 07 Apr 2008) | 1 line
Add missing tests.
........
r44366 | danieljames | 2008-04-13 12:59:46 +0100 (Sun, 13 Apr 2008) | 1 line
Avoid using rvalue references in the implementation files.
........
r44368 | danieljames | 2008-04-13 15:13:33 +0100 (Sun, 13 Apr 2008) | 6 lines
Use a cut down version of the work in progress move library to implement move
semantics on more compilers. Unfortunately the move constructor with allocator
isn't really practical at the moment, since in the case where the container
can't be moved, and the allocators aren't equal it will copy the container
twice.
........
[SVN r44486]
2008-04-17 07:34:15 +00:00
|
|
|
|
|
|
|
|
{
|
2017-06-11 20:55:59 +01:00
|
|
|
test::check_instances check_;
|
|
|
|
|
|
|
|
|
|
T y(empty(ptr));
|
|
|
|
|
BOOST_TEST(y.empty());
|
|
|
|
|
BOOST_TEST(test::equivalent(y.hash_function(), hf));
|
|
|
|
|
BOOST_TEST(test::equivalent(y.key_eq(), eq));
|
|
|
|
|
BOOST_TEST(test::equivalent(y.get_allocator(), al));
|
|
|
|
|
BOOST_TEST(y.max_load_factor() == 1.0);
|
|
|
|
|
test::check_equivalent_keys(y);
|
2017-02-19 13:05:17 +00:00
|
|
|
}
|
Movable unordered containers, full support only for compilers with rvalue references.
Merged revisions 44076-44414 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
........
r44076 | danieljames | 2008-04-06 20:41:19 +0100 (Sun, 06 Apr 2008) | 1 line
Move semantics for compilers with rvalue references.
........
r44077 | danieljames | 2008-04-06 20:48:59 +0100 (Sun, 06 Apr 2008) | 1 line
Do move assignment 'properly'.
........
r44085 | danieljames | 2008-04-06 22:46:04 +0100 (Sun, 06 Apr 2008) | 1 line
Use normal references for the move members, reset the source buckets_ pointer to stop the buckets getting deleted, and remove a superflous pointer check.
........
r44109 | danieljames | 2008-04-07 23:49:36 +0100 (Mon, 07 Apr 2008) | 1 line
Add missing tests.
........
r44366 | danieljames | 2008-04-13 12:59:46 +0100 (Sun, 13 Apr 2008) | 1 line
Avoid using rvalue references in the implementation files.
........
r44368 | danieljames | 2008-04-13 15:13:33 +0100 (Sun, 13 Apr 2008) | 6 lines
Use a cut down version of the work in progress move library to implement move
semantics on more compilers. Unfortunately the move constructor with allocator
isn't really practical at the moment, since in the case where the container
can't be moved, and the allocators aren't equal it will copy the container
twice.
........
[SVN r44486]
2008-04-17 07:34:15 +00:00
|
|
|
|
2017-02-19 13:05:17 +00:00
|
|
|
{
|
2017-06-11 20:55:59 +01:00
|
|
|
test::check_instances check_;
|
2011-08-14 18:52:43 +00:00
|
|
|
|
2017-06-11 20:55:59 +01:00
|
|
|
test::random_values<T> v(1000, generator);
|
|
|
|
|
test::object_count count;
|
|
|
|
|
T y(create(v, count));
|
2009-11-10 18:17:53 +00:00
|
|
|
#if defined(BOOST_HAS_NRVO)
|
2017-06-11 20:55:59 +01:00
|
|
|
BOOST_TEST(count == test::global_object_count);
|
2009-11-10 18:17:53 +00:00
|
|
|
#endif
|
2017-06-11 20:55:59 +01:00
|
|
|
test::check_container(y, v);
|
|
|
|
|
test::check_equivalent_keys(y);
|
Movable unordered containers, full support only for compilers with rvalue references.
Merged revisions 44076-44414 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
........
r44076 | danieljames | 2008-04-06 20:41:19 +0100 (Sun, 06 Apr 2008) | 1 line
Move semantics for compilers with rvalue references.
........
r44077 | danieljames | 2008-04-06 20:48:59 +0100 (Sun, 06 Apr 2008) | 1 line
Do move assignment 'properly'.
........
r44085 | danieljames | 2008-04-06 22:46:04 +0100 (Sun, 06 Apr 2008) | 1 line
Use normal references for the move members, reset the source buckets_ pointer to stop the buckets getting deleted, and remove a superflous pointer check.
........
r44109 | danieljames | 2008-04-07 23:49:36 +0100 (Mon, 07 Apr 2008) | 1 line
Add missing tests.
........
r44366 | danieljames | 2008-04-13 12:59:46 +0100 (Sun, 13 Apr 2008) | 1 line
Avoid using rvalue references in the implementation files.
........
r44368 | danieljames | 2008-04-13 15:13:33 +0100 (Sun, 13 Apr 2008) | 6 lines
Use a cut down version of the work in progress move library to implement move
semantics on more compilers. Unfortunately the move constructor with allocator
isn't really practical at the moment, since in the case where the container
can't be moved, and the allocators aren't equal it will copy the container
twice.
........
[SVN r44486]
2008-04-17 07:34:15 +00:00
|
|
|
}
|
2017-06-11 20:55:59 +01:00
|
|
|
}
|
Movable unordered containers, full support only for compilers with rvalue references.
Merged revisions 44076-44414 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
........
r44076 | danieljames | 2008-04-06 20:41:19 +0100 (Sun, 06 Apr 2008) | 1 line
Move semantics for compilers with rvalue references.
........
r44077 | danieljames | 2008-04-06 20:48:59 +0100 (Sun, 06 Apr 2008) | 1 line
Do move assignment 'properly'.
........
r44085 | danieljames | 2008-04-06 22:46:04 +0100 (Sun, 06 Apr 2008) | 1 line
Use normal references for the move members, reset the source buckets_ pointer to stop the buckets getting deleted, and remove a superflous pointer check.
........
r44109 | danieljames | 2008-04-07 23:49:36 +0100 (Mon, 07 Apr 2008) | 1 line
Add missing tests.
........
r44366 | danieljames | 2008-04-13 12:59:46 +0100 (Sun, 13 Apr 2008) | 1 line
Avoid using rvalue references in the implementation files.
........
r44368 | danieljames | 2008-04-13 15:13:33 +0100 (Sun, 13 Apr 2008) | 6 lines
Use a cut down version of the work in progress move library to implement move
semantics on more compilers. Unfortunately the move constructor with allocator
isn't really practical at the moment, since in the case where the container
can't be moved, and the allocators aren't equal it will copy the container
twice.
........
[SVN r44486]
2008-04-17 07:34:15 +00:00
|
|
|
|
2017-06-11 20:55:59 +01:00
|
|
|
template <class T>
|
|
|
|
|
void move_assign_tests1(T*, test::random_generator const& generator)
|
|
|
|
|
{
|
Movable unordered containers, full support only for compilers with rvalue references.
Merged revisions 44076-44414 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
........
r44076 | danieljames | 2008-04-06 20:41:19 +0100 (Sun, 06 Apr 2008) | 1 line
Move semantics for compilers with rvalue references.
........
r44077 | danieljames | 2008-04-06 20:48:59 +0100 (Sun, 06 Apr 2008) | 1 line
Do move assignment 'properly'.
........
r44085 | danieljames | 2008-04-06 22:46:04 +0100 (Sun, 06 Apr 2008) | 1 line
Use normal references for the move members, reset the source buckets_ pointer to stop the buckets getting deleted, and remove a superflous pointer check.
........
r44109 | danieljames | 2008-04-07 23:49:36 +0100 (Mon, 07 Apr 2008) | 1 line
Add missing tests.
........
r44366 | danieljames | 2008-04-13 12:59:46 +0100 (Sun, 13 Apr 2008) | 1 line
Avoid using rvalue references in the implementation files.
........
r44368 | danieljames | 2008-04-13 15:13:33 +0100 (Sun, 13 Apr 2008) | 6 lines
Use a cut down version of the work in progress move library to implement move
semantics on more compilers. Unfortunately the move constructor with allocator
isn't really practical at the moment, since in the case where the container
can't be moved, and the allocators aren't equal it will copy the container
twice.
........
[SVN r44486]
2008-04-17 07:34:15 +00:00
|
|
|
{
|
2017-06-11 20:55:59 +01:00
|
|
|
test::check_instances check_;
|
2011-08-14 18:52:43 +00:00
|
|
|
|
2017-06-11 20:55:59 +01:00
|
|
|
test::random_values<T> v(500, generator);
|
|
|
|
|
test::object_count count;
|
|
|
|
|
T y;
|
|
|
|
|
y = create(v, count);
|
2012-01-06 08:35:51 +00:00
|
|
|
#if BOOST_UNORDERED_TEST_MOVING && defined(BOOST_HAS_NRVO)
|
2017-06-11 20:55:59 +01:00
|
|
|
BOOST_TEST(count == test::global_object_count);
|
2009-11-10 18:17:53 +00:00
|
|
|
#endif
|
2017-06-11 20:55:59 +01:00
|
|
|
test::check_container(y, v);
|
|
|
|
|
test::check_equivalent_keys(y);
|
Movable unordered containers, full support only for compilers with rvalue references.
Merged revisions 44076-44414 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
........
r44076 | danieljames | 2008-04-06 20:41:19 +0100 (Sun, 06 Apr 2008) | 1 line
Move semantics for compilers with rvalue references.
........
r44077 | danieljames | 2008-04-06 20:48:59 +0100 (Sun, 06 Apr 2008) | 1 line
Do move assignment 'properly'.
........
r44085 | danieljames | 2008-04-06 22:46:04 +0100 (Sun, 06 Apr 2008) | 1 line
Use normal references for the move members, reset the source buckets_ pointer to stop the buckets getting deleted, and remove a superflous pointer check.
........
r44109 | danieljames | 2008-04-07 23:49:36 +0100 (Mon, 07 Apr 2008) | 1 line
Add missing tests.
........
r44366 | danieljames | 2008-04-13 12:59:46 +0100 (Sun, 13 Apr 2008) | 1 line
Avoid using rvalue references in the implementation files.
........
r44368 | danieljames | 2008-04-13 15:13:33 +0100 (Sun, 13 Apr 2008) | 6 lines
Use a cut down version of the work in progress move library to implement move
semantics on more compilers. Unfortunately the move constructor with allocator
isn't really practical at the moment, since in the case where the container
can't be moved, and the allocators aren't equal it will copy the container
twice.
........
[SVN r44486]
2008-04-17 07:34:15 +00:00
|
|
|
}
|
2017-06-11 20:55:59 +01:00
|
|
|
}
|
Movable unordered containers, full support only for compilers with rvalue references.
Merged revisions 44076-44414 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
........
r44076 | danieljames | 2008-04-06 20:41:19 +0100 (Sun, 06 Apr 2008) | 1 line
Move semantics for compilers with rvalue references.
........
r44077 | danieljames | 2008-04-06 20:48:59 +0100 (Sun, 06 Apr 2008) | 1 line
Do move assignment 'properly'.
........
r44085 | danieljames | 2008-04-06 22:46:04 +0100 (Sun, 06 Apr 2008) | 1 line
Use normal references for the move members, reset the source buckets_ pointer to stop the buckets getting deleted, and remove a superflous pointer check.
........
r44109 | danieljames | 2008-04-07 23:49:36 +0100 (Mon, 07 Apr 2008) | 1 line
Add missing tests.
........
r44366 | danieljames | 2008-04-13 12:59:46 +0100 (Sun, 13 Apr 2008) | 1 line
Avoid using rvalue references in the implementation files.
........
r44368 | danieljames | 2008-04-13 15:13:33 +0100 (Sun, 13 Apr 2008) | 6 lines
Use a cut down version of the work in progress move library to implement move
semantics on more compilers. Unfortunately the move constructor with allocator
isn't really practical at the moment, since in the case where the container
can't be moved, and the allocators aren't equal it will copy the container
twice.
........
[SVN r44486]
2008-04-17 07:34:15 +00:00
|
|
|
|
2017-06-11 20:55:59 +01:00
|
|
|
template <class T>
|
|
|
|
|
void move_construct_tests2(T*, test::random_generator const& generator)
|
|
|
|
|
{
|
2017-02-19 13:05:17 +00:00
|
|
|
BOOST_DEDUCED_TYPENAME T::hasher hf(1);
|
|
|
|
|
BOOST_DEDUCED_TYPENAME T::key_equal eq(1);
|
|
|
|
|
BOOST_DEDUCED_TYPENAME T::allocator_type al(1);
|
|
|
|
|
BOOST_DEDUCED_TYPENAME T::allocator_type al2(2);
|
Movable unordered containers, full support only for compilers with rvalue references.
Merged revisions 44076-44414 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
........
r44076 | danieljames | 2008-04-06 20:41:19 +0100 (Sun, 06 Apr 2008) | 1 line
Move semantics for compilers with rvalue references.
........
r44077 | danieljames | 2008-04-06 20:48:59 +0100 (Sun, 06 Apr 2008) | 1 line
Do move assignment 'properly'.
........
r44085 | danieljames | 2008-04-06 22:46:04 +0100 (Sun, 06 Apr 2008) | 1 line
Use normal references for the move members, reset the source buckets_ pointer to stop the buckets getting deleted, and remove a superflous pointer check.
........
r44109 | danieljames | 2008-04-07 23:49:36 +0100 (Mon, 07 Apr 2008) | 1 line
Add missing tests.
........
r44366 | danieljames | 2008-04-13 12:59:46 +0100 (Sun, 13 Apr 2008) | 1 line
Avoid using rvalue references in the implementation files.
........
r44368 | danieljames | 2008-04-13 15:13:33 +0100 (Sun, 13 Apr 2008) | 6 lines
Use a cut down version of the work in progress move library to implement move
semantics on more compilers. Unfortunately the move constructor with allocator
isn't really practical at the moment, since in the case where the container
can't be moved, and the allocators aren't equal it will copy the container
twice.
........
[SVN r44486]
2008-04-17 07:34:15 +00:00
|
|
|
|
2017-02-19 13:05:17 +00:00
|
|
|
test::object_count count;
|
Movable unordered containers, full support only for compilers with rvalue references.
Merged revisions 44076-44414 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
........
r44076 | danieljames | 2008-04-06 20:41:19 +0100 (Sun, 06 Apr 2008) | 1 line
Move semantics for compilers with rvalue references.
........
r44077 | danieljames | 2008-04-06 20:48:59 +0100 (Sun, 06 Apr 2008) | 1 line
Do move assignment 'properly'.
........
r44085 | danieljames | 2008-04-06 22:46:04 +0100 (Sun, 06 Apr 2008) | 1 line
Use normal references for the move members, reset the source buckets_ pointer to stop the buckets getting deleted, and remove a superflous pointer check.
........
r44109 | danieljames | 2008-04-07 23:49:36 +0100 (Mon, 07 Apr 2008) | 1 line
Add missing tests.
........
r44366 | danieljames | 2008-04-13 12:59:46 +0100 (Sun, 13 Apr 2008) | 1 line
Avoid using rvalue references in the implementation files.
........
r44368 | danieljames | 2008-04-13 15:13:33 +0100 (Sun, 13 Apr 2008) | 6 lines
Use a cut down version of the work in progress move library to implement move
semantics on more compilers. Unfortunately the move constructor with allocator
isn't really practical at the moment, since in the case where the container
can't be moved, and the allocators aren't equal it will copy the container
twice.
........
[SVN r44486]
2008-04-17 07:34:15 +00:00
|
|
|
|
2017-02-19 13:05:17 +00:00
|
|
|
{
|
2017-06-11 20:55:59 +01:00
|
|
|
test::check_instances check_;
|
2011-08-14 18:52:43 +00:00
|
|
|
|
2017-06-11 20:55:59 +01:00
|
|
|
test::random_values<T> v(500, generator);
|
|
|
|
|
T y(create(v, count, hf, eq, al, 0.5));
|
2009-11-10 18:17:53 +00:00
|
|
|
#if defined(BOOST_HAS_NRVO)
|
2017-06-11 20:55:59 +01:00
|
|
|
BOOST_TEST(count == test::global_object_count);
|
2009-11-10 18:17:53 +00:00
|
|
|
#endif
|
2017-06-11 20:55:59 +01:00
|
|
|
test::check_container(y, v);
|
|
|
|
|
BOOST_TEST(test::equivalent(y.hash_function(), hf));
|
|
|
|
|
BOOST_TEST(test::equivalent(y.key_eq(), eq));
|
|
|
|
|
BOOST_TEST(test::equivalent(y.get_allocator(), al));
|
|
|
|
|
BOOST_TEST(y.max_load_factor() == 0.5); // Not necessarily required.
|
|
|
|
|
test::check_equivalent_keys(y);
|
2017-02-19 13:05:17 +00:00
|
|
|
}
|
Movable unordered containers, full support only for compilers with rvalue references.
Merged revisions 44076-44414 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
........
r44076 | danieljames | 2008-04-06 20:41:19 +0100 (Sun, 06 Apr 2008) | 1 line
Move semantics for compilers with rvalue references.
........
r44077 | danieljames | 2008-04-06 20:48:59 +0100 (Sun, 06 Apr 2008) | 1 line
Do move assignment 'properly'.
........
r44085 | danieljames | 2008-04-06 22:46:04 +0100 (Sun, 06 Apr 2008) | 1 line
Use normal references for the move members, reset the source buckets_ pointer to stop the buckets getting deleted, and remove a superflous pointer check.
........
r44109 | danieljames | 2008-04-07 23:49:36 +0100 (Mon, 07 Apr 2008) | 1 line
Add missing tests.
........
r44366 | danieljames | 2008-04-13 12:59:46 +0100 (Sun, 13 Apr 2008) | 1 line
Avoid using rvalue references in the implementation files.
........
r44368 | danieljames | 2008-04-13 15:13:33 +0100 (Sun, 13 Apr 2008) | 6 lines
Use a cut down version of the work in progress move library to implement move
semantics on more compilers. Unfortunately the move constructor with allocator
isn't really practical at the moment, since in the case where the container
can't be moved, and the allocators aren't equal it will copy the container
twice.
........
[SVN r44486]
2008-04-17 07:34:15 +00:00
|
|
|
|
2017-02-19 13:05:17 +00:00
|
|
|
{
|
2017-06-11 20:55:59 +01:00
|
|
|
test::check_instances check_;
|
|
|
|
|
|
|
|
|
|
// TODO: To do this correctly requires the fancy new allocator
|
|
|
|
|
// stuff.
|
|
|
|
|
test::random_values<T> v(500, generator);
|
|
|
|
|
T y(create(v, count, hf, eq, al, 2.0), al2);
|
|
|
|
|
BOOST_TEST(count != test::global_object_count);
|
|
|
|
|
test::check_container(y, v);
|
|
|
|
|
BOOST_TEST(test::equivalent(y.hash_function(), hf));
|
|
|
|
|
BOOST_TEST(test::equivalent(y.key_eq(), eq));
|
|
|
|
|
BOOST_TEST(test::equivalent(y.get_allocator(), al2));
|
|
|
|
|
BOOST_TEST(y.max_load_factor() == 2.0); // Not necessarily required.
|
|
|
|
|
test::check_equivalent_keys(y);
|
2017-02-19 13:05:17 +00:00
|
|
|
}
|
2011-08-14 18:53:29 +00:00
|
|
|
|
2017-02-19 13:05:17 +00:00
|
|
|
{
|
2017-06-11 20:55:59 +01:00
|
|
|
test::check_instances check_;
|
2011-08-14 18:52:43 +00:00
|
|
|
|
2017-06-11 20:55:59 +01:00
|
|
|
test::random_values<T> v(25, generator);
|
|
|
|
|
T y(create(v, count, hf, eq, al, 1.0), al);
|
2012-11-26 17:47:12 +00:00
|
|
|
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
2017-06-11 20:55:59 +01:00
|
|
|
BOOST_TEST(count == test::global_object_count);
|
2011-08-15 20:23:29 +00:00
|
|
|
#elif defined(BOOST_HAS_NRVO)
|
2017-06-11 20:55:59 +01:00
|
|
|
BOOST_TEST(
|
|
|
|
|
static_cast<std::size_t>(
|
|
|
|
|
test::global_object_count.constructions - count.constructions) <=
|
|
|
|
|
(test::is_set<T>::value ? 1 : 2) *
|
|
|
|
|
(test::has_unique_keys<T>::value ? 25 : v.size()));
|
|
|
|
|
BOOST_TEST(count.instances == test::global_object_count.instances);
|
2011-08-15 20:23:29 +00:00
|
|
|
#else
|
2017-06-11 20:55:59 +01:00
|
|
|
BOOST_TEST(
|
|
|
|
|
static_cast<std::size_t>(
|
|
|
|
|
test::global_object_count.constructions - count.constructions) <=
|
|
|
|
|
(test::is_set<T>::value ? 2 : 4) *
|
|
|
|
|
(test::has_unique_keys<T>::value ? 25 : v.size()));
|
|
|
|
|
BOOST_TEST(count.instances == test::global_object_count.instances);
|
2008-05-28 10:58:42 +00:00
|
|
|
#endif
|
2017-06-11 20:55:59 +01:00
|
|
|
test::check_container(y, v);
|
|
|
|
|
BOOST_TEST(test::equivalent(y.hash_function(), hf));
|
|
|
|
|
BOOST_TEST(test::equivalent(y.key_eq(), eq));
|
|
|
|
|
BOOST_TEST(test::equivalent(y.get_allocator(), al));
|
|
|
|
|
BOOST_TEST(y.max_load_factor() == 1.0); // Not necessarily required.
|
|
|
|
|
test::check_equivalent_keys(y);
|
2011-08-14 18:53:29 +00:00
|
|
|
}
|
2017-06-11 20:55:59 +01:00
|
|
|
}
|
2017-02-19 13:05:17 +00:00
|
|
|
|
2017-06-11 20:55:59 +01:00
|
|
|
template <class T>
|
|
|
|
|
void move_assign_tests2(T*, test::random_generator const& generator)
|
|
|
|
|
{
|
2017-02-19 13:05:17 +00:00
|
|
|
BOOST_DEDUCED_TYPENAME T::hasher hf(1);
|
|
|
|
|
BOOST_DEDUCED_TYPENAME T::key_equal eq(1);
|
|
|
|
|
BOOST_DEDUCED_TYPENAME T::allocator_type al1(1);
|
|
|
|
|
BOOST_DEDUCED_TYPENAME T::allocator_type al2(2);
|
|
|
|
|
typedef BOOST_DEDUCED_TYPENAME T::allocator_type allocator_type;
|
2011-08-14 18:53:29 +00:00
|
|
|
|
|
|
|
|
{
|
2017-06-11 20:55:59 +01:00
|
|
|
test::random_values<T> v(500, generator);
|
|
|
|
|
test::random_values<T> v2(0, generator);
|
|
|
|
|
T y(v.begin(), v.end(), 0, hf, eq, al1);
|
|
|
|
|
test::object_count count;
|
|
|
|
|
y = create(v2, count, hf, eq, al2, 2.0);
|
|
|
|
|
BOOST_TEST(y.empty());
|
|
|
|
|
test::check_container(y, v2);
|
|
|
|
|
test::check_equivalent_keys(y);
|
|
|
|
|
BOOST_TEST(y.max_load_factor() == 2.0);
|
2011-10-11 08:37:06 +00:00
|
|
|
|
|
|
|
|
#if defined(BOOST_HAS_NRVO)
|
2017-06-11 20:55:59 +01:00
|
|
|
if (BOOST_UNORDERED_TEST_MOVING
|
|
|
|
|
? (bool)allocator_type::is_propagate_on_move
|
|
|
|
|
: (bool)allocator_type::is_propagate_on_assign) {
|
|
|
|
|
BOOST_TEST(test::equivalent(y.get_allocator(), al2));
|
|
|
|
|
} else {
|
|
|
|
|
BOOST_TEST(test::equivalent(y.get_allocator(), al1));
|
|
|
|
|
}
|
2017-02-19 13:05:17 +00:00
|
|
|
#endif
|
|
|
|
|
}
|
2011-08-14 18:53:29 +00:00
|
|
|
|
2017-02-19 13:05:17 +00:00
|
|
|
{
|
2017-06-11 20:55:59 +01:00
|
|
|
test::random_values<T> v(500, generator);
|
|
|
|
|
test::object_count count;
|
|
|
|
|
T y(0, hf, eq, al1);
|
|
|
|
|
y = create(v, count, hf, eq, al2, 0.5);
|
2011-08-14 18:53:29 +00:00
|
|
|
#if defined(BOOST_HAS_NRVO)
|
2017-06-11 20:55:59 +01:00
|
|
|
if (BOOST_UNORDERED_TEST_MOVING && allocator_type::is_propagate_on_move) {
|
|
|
|
|
BOOST_TEST(count == test::global_object_count);
|
|
|
|
|
}
|
2011-08-14 18:53:29 +00:00
|
|
|
#endif
|
2017-06-11 20:55:59 +01:00
|
|
|
test::check_container(y, v);
|
|
|
|
|
test::check_equivalent_keys(y);
|
|
|
|
|
BOOST_TEST(y.max_load_factor() == 0.5);
|
2011-10-11 08:37:06 +00:00
|
|
|
|
|
|
|
|
#if defined(BOOST_HAS_NRVO)
|
2017-06-11 20:55:59 +01:00
|
|
|
if (BOOST_UNORDERED_TEST_MOVING
|
|
|
|
|
? (bool)allocator_type::is_propagate_on_move
|
|
|
|
|
: (bool)allocator_type::is_propagate_on_assign) {
|
|
|
|
|
BOOST_TEST(test::equivalent(y.get_allocator(), al2));
|
|
|
|
|
} else {
|
|
|
|
|
BOOST_TEST(test::equivalent(y.get_allocator(), al1));
|
|
|
|
|
}
|
2011-10-11 08:37:06 +00:00
|
|
|
#endif
|
2017-02-19 13:05:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
2017-06-11 20:55:59 +01:00
|
|
|
test::check_instances check_;
|
|
|
|
|
|
|
|
|
|
test::random_values<T> v(500, generator);
|
|
|
|
|
T y(0, hf, eq, al1);
|
|
|
|
|
|
|
|
|
|
T x(0, hf, eq, al2);
|
|
|
|
|
x.max_load_factor(0.25);
|
|
|
|
|
x.insert(v.begin(), v.end());
|
|
|
|
|
|
|
|
|
|
test::object_count count = test::global_object_count;
|
|
|
|
|
y = boost::move(x);
|
|
|
|
|
if (BOOST_UNORDERED_TEST_MOVING && allocator_type::is_propagate_on_move) {
|
|
|
|
|
BOOST_TEST(count == test::global_object_count);
|
|
|
|
|
}
|
|
|
|
|
test::check_container(y, v);
|
|
|
|
|
test::check_equivalent_keys(y);
|
|
|
|
|
BOOST_TEST(y.max_load_factor() == 0.25);
|
|
|
|
|
|
|
|
|
|
if (BOOST_UNORDERED_TEST_MOVING
|
|
|
|
|
? (bool)allocator_type::is_propagate_on_move
|
|
|
|
|
: (bool)allocator_type::is_propagate_on_assign) {
|
|
|
|
|
BOOST_TEST(test::equivalent(y.get_allocator(), al2));
|
|
|
|
|
} else {
|
|
|
|
|
BOOST_TEST(test::equivalent(y.get_allocator(), al1));
|
|
|
|
|
}
|
2017-02-19 13:05:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
2017-06-11 20:55:59 +01:00
|
|
|
test::check_instances check_;
|
2017-02-19 13:05:17 +00:00
|
|
|
|
2017-06-11 20:55:59 +01:00
|
|
|
test::random_values<T> v1(1000, generator);
|
|
|
|
|
test::random_values<T> v2(200, generator);
|
2011-10-11 08:37:06 +00:00
|
|
|
|
2017-06-11 20:55:59 +01:00
|
|
|
T x(0, hf, eq, al2);
|
|
|
|
|
x.max_load_factor(0.5);
|
|
|
|
|
x.insert(v2.begin(), v2.end());
|
2017-02-19 13:05:17 +00:00
|
|
|
|
2017-06-11 20:55:59 +01:00
|
|
|
test::object_count count1 = test::global_object_count;
|
2017-02-19 13:05:17 +00:00
|
|
|
|
2017-06-11 20:55:59 +01:00
|
|
|
T y(v1.begin(), v1.end(), 0, hf, eq, al1);
|
|
|
|
|
y = boost::move(x);
|
2017-02-19 13:05:17 +00:00
|
|
|
|
2017-06-11 20:55:59 +01:00
|
|
|
test::object_count count2 = test::global_object_count;
|
2017-02-19 13:05:17 +00:00
|
|
|
|
2017-06-11 20:55:59 +01:00
|
|
|
if (BOOST_UNORDERED_TEST_MOVING && allocator_type::is_propagate_on_move) {
|
|
|
|
|
BOOST_TEST(count1.instances == test::global_object_count.instances);
|
|
|
|
|
BOOST_TEST(
|
|
|
|
|
count2.constructions == test::global_object_count.constructions);
|
|
|
|
|
}
|
2011-10-11 08:37:06 +00:00
|
|
|
|
2017-06-11 20:55:59 +01:00
|
|
|
test::check_container(y, v2);
|
|
|
|
|
test::check_equivalent_keys(y);
|
|
|
|
|
BOOST_TEST(y.max_load_factor() == 0.5);
|
2017-02-19 13:05:17 +00:00
|
|
|
|
2017-06-11 20:55:59 +01:00
|
|
|
if (BOOST_UNORDERED_TEST_MOVING
|
|
|
|
|
? (bool)allocator_type::is_propagate_on_move
|
|
|
|
|
: (bool)allocator_type::is_propagate_on_assign) {
|
|
|
|
|
BOOST_TEST(test::equivalent(y.get_allocator(), al2));
|
|
|
|
|
} else {
|
|
|
|
|
BOOST_TEST(test::equivalent(y.get_allocator(), al1));
|
|
|
|
|
}
|
2011-08-14 18:53:29 +00:00
|
|
|
}
|
2017-06-11 20:55:59 +01:00
|
|
|
}
|
2017-02-19 13:05:17 +00:00
|
|
|
|
2017-06-11 20:55:59 +01:00
|
|
|
boost::unordered_map<test::object, test::object, test::hash, test::equal_to,
|
2017-02-19 13:05:17 +00:00
|
|
|
std::allocator<test::object> >* test_map_std_alloc;
|
|
|
|
|
|
2017-06-11 20:55:59 +01:00
|
|
|
boost::unordered_set<test::object, test::hash, test::equal_to,
|
2017-02-19 13:05:17 +00:00
|
|
|
test::allocator2<test::object> >* test_set;
|
2017-06-11 20:55:59 +01:00
|
|
|
boost::unordered_multiset<test::object, test::hash, test::equal_to,
|
2017-02-19 13:05:17 +00:00
|
|
|
test::allocator1<test::object> >* test_multiset;
|
2017-06-11 20:55:59 +01:00
|
|
|
boost::unordered_map<test::object, test::object, test::hash, test::equal_to,
|
2017-02-19 13:05:17 +00:00
|
|
|
test::allocator1<test::object> >* test_map;
|
2017-06-11 20:55:59 +01:00
|
|
|
boost::unordered_multimap<test::object, test::object, test::hash,
|
2017-02-19 13:05:17 +00:00
|
|
|
test::equal_to, test::allocator2<test::object> >* test_multimap;
|
Movable unordered containers, full support only for compilers with rvalue references.
Merged revisions 44076-44414 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
........
r44076 | danieljames | 2008-04-06 20:41:19 +0100 (Sun, 06 Apr 2008) | 1 line
Move semantics for compilers with rvalue references.
........
r44077 | danieljames | 2008-04-06 20:48:59 +0100 (Sun, 06 Apr 2008) | 1 line
Do move assignment 'properly'.
........
r44085 | danieljames | 2008-04-06 22:46:04 +0100 (Sun, 06 Apr 2008) | 1 line
Use normal references for the move members, reset the source buckets_ pointer to stop the buckets getting deleted, and remove a superflous pointer check.
........
r44109 | danieljames | 2008-04-07 23:49:36 +0100 (Mon, 07 Apr 2008) | 1 line
Add missing tests.
........
r44366 | danieljames | 2008-04-13 12:59:46 +0100 (Sun, 13 Apr 2008) | 1 line
Avoid using rvalue references in the implementation files.
........
r44368 | danieljames | 2008-04-13 15:13:33 +0100 (Sun, 13 Apr 2008) | 6 lines
Use a cut down version of the work in progress move library to implement move
semantics on more compilers. Unfortunately the move constructor with allocator
isn't really practical at the moment, since in the case where the container
can't be moved, and the allocators aren't equal it will copy the container
twice.
........
[SVN r44486]
2008-04-17 07:34:15 +00:00
|
|
|
|
2017-06-11 20:55:59 +01:00
|
|
|
boost::unordered_set<test::object, test::hash, test::equal_to,
|
2017-02-19 13:05:17 +00:00
|
|
|
test::cxx11_allocator<test::object, test::propagate_move> >*
|
2011-08-14 18:53:29 +00:00
|
|
|
test_set_prop_move;
|
2017-06-11 20:55:59 +01:00
|
|
|
boost::unordered_multiset<test::object, test::hash, test::equal_to,
|
2017-02-19 13:05:17 +00:00
|
|
|
test::cxx11_allocator<test::object, test::propagate_move> >*
|
2011-08-14 18:53:29 +00:00
|
|
|
test_multiset_prop_move;
|
2017-06-11 20:55:59 +01:00
|
|
|
boost::unordered_map<test::object, test::object, test::hash, test::equal_to,
|
2017-02-19 13:05:17 +00:00
|
|
|
test::cxx11_allocator<test::object, test::propagate_move> >*
|
2011-08-14 18:53:29 +00:00
|
|
|
test_map_prop_move;
|
2017-06-11 20:55:59 +01:00
|
|
|
boost::unordered_multimap<test::object, test::object, test::hash,
|
2017-02-19 13:05:17 +00:00
|
|
|
test::equal_to, test::cxx11_allocator<test::object, test::propagate_move> >*
|
2011-08-14 18:53:29 +00:00
|
|
|
test_multimap_prop_move;
|
|
|
|
|
|
2017-06-11 20:55:59 +01:00
|
|
|
boost::unordered_set<test::object, test::hash, test::equal_to,
|
2017-02-19 13:05:17 +00:00
|
|
|
test::cxx11_allocator<test::object, test::no_propagate_move> >*
|
2011-08-14 18:53:29 +00:00
|
|
|
test_set_no_prop_move;
|
2017-06-11 20:55:59 +01:00
|
|
|
boost::unordered_multiset<test::object, test::hash, test::equal_to,
|
2017-02-19 13:05:17 +00:00
|
|
|
test::cxx11_allocator<test::object, test::no_propagate_move> >*
|
2011-08-14 18:53:29 +00:00
|
|
|
test_multiset_no_prop_move;
|
2017-06-11 20:55:59 +01:00
|
|
|
boost::unordered_map<test::object, test::object, test::hash, test::equal_to,
|
2017-02-19 13:05:17 +00:00
|
|
|
test::cxx11_allocator<test::object, test::no_propagate_move> >*
|
2011-08-14 18:53:29 +00:00
|
|
|
test_map_no_prop_move;
|
2017-06-11 20:55:59 +01:00
|
|
|
boost::unordered_multimap<test::object, test::object, test::hash,
|
2017-02-19 13:05:17 +00:00
|
|
|
test::equal_to,
|
|
|
|
|
test::cxx11_allocator<test::object, test::no_propagate_move> >*
|
2011-08-14 18:53:29 +00:00
|
|
|
test_multimap_no_prop_move;
|
|
|
|
|
|
2017-06-11 20:55:59 +01:00
|
|
|
using test::default_generator;
|
|
|
|
|
using test::generate_collisions;
|
|
|
|
|
using test::limited_range;
|
2017-02-19 13:05:17 +00:00
|
|
|
|
2017-06-11 20:55:59 +01:00
|
|
|
UNORDERED_TEST(move_construct_tests1,
|
2017-02-19 13:05:17 +00:00
|
|
|
((test_map_std_alloc)(test_set)(test_multiset)(test_map)(test_multimap)(
|
2017-06-11 20:55:59 +01:00
|
|
|
test_set_prop_move)(test_multiset_prop_move)(test_map_prop_move)(
|
|
|
|
|
test_multimap_prop_move)(test_set_no_prop_move)(
|
|
|
|
|
test_multiset_no_prop_move)(test_map_no_prop_move)(
|
|
|
|
|
test_multimap_no_prop_move))(
|
2017-10-05 10:54:22 +01:00
|
|
|
(default_generator)(generate_collisions)(limited_range)))
|
2017-06-11 20:55:59 +01:00
|
|
|
UNORDERED_TEST(move_assign_tests1,
|
2017-02-19 13:05:17 +00:00
|
|
|
((test_map_std_alloc)(test_set)(test_multiset)(test_map)(test_multimap)(
|
2017-06-11 20:55:59 +01:00
|
|
|
test_set_prop_move)(test_multiset_prop_move)(test_map_prop_move)(
|
|
|
|
|
test_multimap_prop_move)(test_set_no_prop_move)(
|
|
|
|
|
test_multiset_no_prop_move)(test_map_no_prop_move)(
|
|
|
|
|
test_multimap_no_prop_move))(
|
2017-10-05 10:54:22 +01:00
|
|
|
(default_generator)(generate_collisions)(limited_range)))
|
2017-06-11 20:55:59 +01:00
|
|
|
UNORDERED_TEST(move_construct_tests2,
|
2017-02-19 13:05:17 +00:00
|
|
|
((test_set)(test_multiset)(test_map)(test_multimap)(test_set_prop_move)(
|
2017-06-11 20:55:59 +01:00
|
|
|
test_multiset_prop_move)(test_map_prop_move)(test_multimap_prop_move)(
|
|
|
|
|
test_set_no_prop_move)(test_multiset_no_prop_move)(test_map_no_prop_move)(
|
|
|
|
|
test_multimap_no_prop_move))(
|
2017-10-05 10:54:22 +01:00
|
|
|
(default_generator)(generate_collisions)(limited_range)))
|
2017-06-11 20:55:59 +01:00
|
|
|
UNORDERED_TEST(move_assign_tests2,
|
2017-02-19 13:05:17 +00:00
|
|
|
((test_set)(test_multiset)(test_map)(test_multimap)(test_set_prop_move)(
|
2017-06-11 20:55:59 +01:00
|
|
|
test_multiset_prop_move)(test_map_prop_move)(test_multimap_prop_move)(
|
|
|
|
|
test_set_no_prop_move)(test_multiset_no_prop_move)(test_map_no_prop_move)(
|
|
|
|
|
test_multimap_no_prop_move))(
|
2017-10-05 10:54:22 +01:00
|
|
|
(default_generator)(generate_collisions)(limited_range)))
|
Movable unordered containers, full support only for compilers with rvalue references.
Merged revisions 44076-44414 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
........
r44076 | danieljames | 2008-04-06 20:41:19 +0100 (Sun, 06 Apr 2008) | 1 line
Move semantics for compilers with rvalue references.
........
r44077 | danieljames | 2008-04-06 20:48:59 +0100 (Sun, 06 Apr 2008) | 1 line
Do move assignment 'properly'.
........
r44085 | danieljames | 2008-04-06 22:46:04 +0100 (Sun, 06 Apr 2008) | 1 line
Use normal references for the move members, reset the source buckets_ pointer to stop the buckets getting deleted, and remove a superflous pointer check.
........
r44109 | danieljames | 2008-04-07 23:49:36 +0100 (Mon, 07 Apr 2008) | 1 line
Add missing tests.
........
r44366 | danieljames | 2008-04-13 12:59:46 +0100 (Sun, 13 Apr 2008) | 1 line
Avoid using rvalue references in the implementation files.
........
r44368 | danieljames | 2008-04-13 15:13:33 +0100 (Sun, 13 Apr 2008) | 6 lines
Use a cut down version of the work in progress move library to implement move
semantics on more compilers. Unfortunately the move constructor with allocator
isn't really practical at the moment, since in the case where the container
can't be moved, and the allocators aren't equal it will copy the container
twice.
........
[SVN r44486]
2008-04-17 07:34:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
RUN_TESTS()
|