From 559122f67a2c01474c9e76e0ff7465424f63a9b2 Mon Sep 17 00:00:00 2001 From: Daniel James Date: Sun, 14 Aug 2011 21:03:18 +0000 Subject: [PATCH] Unordered: Small improvements for windows. [SVN r73760] --- include/boost/unordered/detail/table.hpp | 4 +--- test/objects/cxx11_allocator.hpp | 8 ++++---- test/unordered/assign_tests.cpp | 4 ++++ test/unordered/move_tests.cpp | 4 ++++ test/unordered/swap_tests.cpp | 4 ++++ test/unordered/unnecessary_copy_tests.cpp | 23 +++++++++++++++-------- 6 files changed, 32 insertions(+), 15 deletions(-) diff --git a/include/boost/unordered/detail/table.hpp b/include/boost/unordered/detail/table.hpp index f55c8afd..fa8d4521 100644 --- a/include/boost/unordered/detail/table.hpp +++ b/include/boost/unordered/detail/table.hpp @@ -134,8 +134,6 @@ namespace boost { namespace unordered { namespace detail { std::size_t calculate_max_load() { - BOOST_ASSERT(this->buckets_); - using namespace std; // From 6.3.1/13: @@ -196,7 +194,7 @@ namespace boost { namespace unordered { namespace detail { : buckets(x, m), functions(x), mlf_(x.mlf_), - max_load_(this->buckets_ ? calculate_max_load() : 0) {} + max_load_(calculate_max_load()) {} // TODO: Why do I use x's bucket count? table(table& x, node_allocator const& a, move_tag m) diff --git a/test/objects/cxx11_allocator.hpp b/test/objects/cxx11_allocator.hpp index d26b7d27..61f24e49 100644 --- a/test/objects/cxx11_allocator.hpp +++ b/test/objects/cxx11_allocator.hpp @@ -149,7 +149,7 @@ namespace test // Note that tags will be tested // properly in the normal allocator. detail::tracker.track_deallocate((void*) p, n, sizeof(T), tag_, - (Flags & propagate_swap)); + (Flags & propagate_swap) ? true : false); ::operator delete((void*) p); } @@ -198,13 +198,13 @@ namespace test template struct is_propagate_on_swap > - : bool_type<(bool)(Flags & propagate_swap)> {}; + : bool_type<(Flags & propagate_swap) ? true : false> {}; template struct is_propagate_on_assign > - : bool_type<(bool)(Flags & propagate_assign)> {}; + : bool_type<(Flags & propagate_assign) ? true : false> {}; template struct is_propagate_on_move > - : bool_type<(bool)(Flags & propagate_move)> {}; + : bool_type<(Flags & propagate_move) ? true : false> {}; } #endif diff --git a/test/unordered/assign_tests.cpp b/test/unordered/assign_tests.cpp index 3e1a85aa..f19b894f 100644 --- a/test/unordered/assign_tests.cpp +++ b/test/unordered/assign_tests.cpp @@ -16,6 +16,10 @@ #include +#if defined(BOOST_MSVC) +#pragma warning(disable:4127) // conditional expression is constant +#endif + namespace assign_tests { test::seed_t seed(96785); diff --git a/test/unordered/move_tests.cpp b/test/unordered/move_tests.cpp index daf4ecf3..479437dd 100644 --- a/test/unordered/move_tests.cpp +++ b/test/unordered/move_tests.cpp @@ -15,6 +15,10 @@ #include "../helpers/equivalent.hpp" #include "../helpers/invariants.hpp" +#if defined(BOOST_MSVC) +#pragma warning(disable:4127) // conditional expression is constant +#endif + namespace move_tests { test::seed_t seed(98624); diff --git a/test/unordered/swap_tests.cpp b/test/unordered/swap_tests.cpp index 4ff5fda9..a1aca83a 100644 --- a/test/unordered/swap_tests.cpp +++ b/test/unordered/swap_tests.cpp @@ -17,6 +17,10 @@ #include "../helpers/tracker.hpp" #include "../helpers/invariants.hpp" +#if defined(BOOST_MSVC) +#pragma warning(disable:4127) // conditional expression is constant +#endif + namespace swap_tests { diff --git a/test/unordered/unnecessary_copy_tests.cpp b/test/unordered/unnecessary_copy_tests.cpp index 73da7d50..4b9ec9c7 100644 --- a/test/unordered/unnecessary_copy_tests.cpp +++ b/test/unordered/unnecessary_copy_tests.cpp @@ -38,14 +38,21 @@ namespace unnecessary_copy_tests x.tag_ = -1; ++moves; } - int tag_; - private: - // I think the standard might require assignment (or move - // assignment) for some operations. That Boost.Unordered doesn't - // is an implementation detail. But these tests are very specific - // to the implementation, so it's probably okay that this doesn't - // meet the standard requirements. - count_copies& operator=(count_copies const&); + count_copies& operator=(BOOST_COPY_ASSIGN_REF(count_copies) p) // Copy assignment + { + tag_ = p.tag_; + ++copies; + return *this; + } + + count_copies& operator=(BOOST_RV_REF(count_copies) p) //Move assignment + { + tag_ = p.tag_; + ++moves; + return *this; + } + + int tag_; }; bool operator==(count_copies const& x, count_copies const& y) {