|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r76232 - in branches/release: boost/heap boost/heap/detail libs/heap libs/heap/test
From: tim_at_[hidden]
Date: 2011-12-30 08:16:33
Author: timblechmann
Date: 2011-12-30 08:16:31 EST (Fri, 30 Dec 2011)
New Revision: 76232
URL: http://svn.boost.org/trac/boost/changeset/76232
Log:
heap: merge fixes from trunk
Properties modified:
branches/release/boost/heap/ (props changed)
branches/release/libs/heap/ (props changed)
Text files modified:
branches/release/boost/heap/binomial_heap.hpp | 2 +-
branches/release/boost/heap/d_ary_heap.hpp | 3 ++-
branches/release/boost/heap/detail/heap_comparison.hpp | 8 ++++----
branches/release/boost/heap/detail/heap_node.hpp | 2 +-
branches/release/boost/heap/detail/mutable_heap.hpp | 17 ++++++++++++-----
branches/release/boost/heap/detail/ordered_adaptor_iterator.hpp | 5 ++++-
branches/release/boost/heap/detail/tree_iterator.hpp | 8 +++++---
branches/release/boost/heap/priority_queue.hpp | 3 ++-
branches/release/boost/heap/skew_heap.hpp | 8 ++++----
branches/release/libs/heap/test/common_heap_tests.hpp | 2 +-
branches/release/libs/heap/test/stable_heap_tests.hpp | 33 ++++++++++++++-------------------
11 files changed, 50 insertions(+), 41 deletions(-)
Modified: branches/release/boost/heap/binomial_heap.hpp
==============================================================================
--- branches/release/boost/heap/binomial_heap.hpp (original)
+++ branches/release/boost/heap/binomial_heap.hpp 2011-12-30 08:16:31 EST (Fri, 30 Dec 2011)
@@ -807,7 +807,7 @@
if (it != trees.end())
BOOST_HEAP_ASSERT(static_cast<node_pointer>(&*it)->child_count() >= n->child_count());
- for (;;) {
+ while(true) {
BOOST_HEAP_ASSERT(!n->is_linked());
if (it == trees.end())
break;
Modified: branches/release/boost/heap/d_ary_heap.hpp
==============================================================================
--- branches/release/boost/heap/d_ary_heap.hpp (original)
+++ branches/release/boost/heap/d_ary_heap.hpp 2011-12-30 08:16:31 EST (Fri, 30 Dec 2011)
@@ -65,7 +65,8 @@
typedef typename heap_base_maker::type super_t;
typedef typename super_t::internal_type internal_type;
- typedef std::vector<internal_type, typename heap_base_maker::allocator_argument> container_type;
+ typedef typename heap_base_maker::allocator_argument::template rebind<internal_type>::other internal_type_allocator;
+ typedef std::vector<internal_type, internal_type_allocator> container_type;
typedef typename container_type::const_iterator container_iterator;
typedef typename IndexUpdater::template rebind<internal_type>::other index_updater;
Modified: branches/release/boost/heap/detail/heap_comparison.hpp
==============================================================================
--- branches/release/boost/heap/detail/heap_comparison.hpp (original)
+++ branches/release/boost/heap/detail/heap_comparison.hpp 2011-12-30 08:16:31 EST (Fri, 30 Dec 2011)
@@ -70,7 +70,7 @@
Heap1 lhs_copy(lhs);
Heap2 rhs_copy(rhs);
- for (;;) {
+ while (true) {
if (!value_equality(lhs_copy, rhs_copy, lhs_copy.top(), rhs_copy.top()))
return false;
@@ -112,7 +112,7 @@
typename Heap1::ordered_iterator it1_end = lhs.ordered_end();
typename Heap1::ordered_iterator it2 = rhs.ordered_begin();
typename Heap1::ordered_iterator it2_end = rhs.ordered_end();
- for(;;) {
+ while (true) {
if (!value_equality(lhs, rhs, *it1, *it2))
return false;
@@ -165,7 +165,7 @@
typename Heap1::ordered_iterator it1_end = lhs.ordered_end();
typename Heap1::ordered_iterator it2 = rhs.ordered_begin();
typename Heap1::ordered_iterator it2_end = rhs.ordered_end();
- for(;;) {
+ while (true) {
if (value_compare(lhs, rhs, *it1, *it2))
return true;
@@ -202,7 +202,7 @@
Heap1 lhs_copy(lhs);
Heap2 rhs_copy(rhs);
- for (;;) {
+ while (true) {
if (value_compare(lhs_copy, rhs_copy, lhs_copy.top(), rhs_copy.top()))
return true;
Modified: branches/release/boost/heap/detail/heap_node.hpp
==============================================================================
--- branches/release/boost/heap/detail/heap_node.hpp (original)
+++ branches/release/boost/heap/detail/heap_node.hpp 2011-12-30 08:16:31 EST (Fri, 30 Dec 2011)
@@ -178,7 +178,7 @@
{}
#endif
-protected:
+/* protected: */
heap_node(heap_node const & rhs):
value(rhs.value)
{
Modified: branches/release/boost/heap/detail/mutable_heap.hpp
==============================================================================
--- branches/release/boost/heap/detail/mutable_heap.hpp (original)
+++ branches/release/boost/heap/detail/mutable_heap.hpp 2011-12-30 08:16:31 EST (Fri, 30 Dec 2011)
@@ -48,7 +48,7 @@
private:
typedef std::pair<value_type, size_type> node_type;
- typedef std::list<node_type, allocator_type> object_list;
+ typedef std::list<node_type, typename allocator_type::template rebind<node_type>::other> object_list;
typedef typename object_list::iterator list_iterator;
typedef typename object_list::const_iterator const_list_iterator;
@@ -149,13 +149,17 @@
#ifdef BOOST_HAS_RVALUE_REFS
priority_queue_mutable_wrapper (priority_queue_mutable_wrapper && rhs):
- q_(std::move(rhs.q_)), objects(std::move(rhs.objects))
- {}
+ q_(std::move(rhs.q_))
+ {
+ /// FIXME: msvc seems to invalidate iterators when moving std::list
+ std::swap(objects, rhs.objects);
+ }
priority_queue_mutable_wrapper & operator=(priority_queue_mutable_wrapper && rhs)
{
q_ = std::move(rhs.q_);
- objects = std::move(rhs.objects);
+ objects.clear();
+ std::swap(objects, rhs.objects);
return *this;
}
#endif
@@ -274,7 +278,10 @@
}
}
- std::priority_queue<iterator, std::vector<iterator, allocator_type>, indirect_cmp> unvisited_nodes;
+ std::priority_queue<iterator,
+ std::vector<iterator, typename allocator_type::template rebind<iterator>::other >,
+ indirect_cmp
+ > unvisited_nodes;
const priority_queue_mutable_wrapper * q_;
};
Modified: branches/release/boost/heap/detail/ordered_adaptor_iterator.hpp
==============================================================================
--- branches/release/boost/heap/detail/ordered_adaptor_iterator.hpp (original)
+++ branches/release/boost/heap/detail/ordered_adaptor_iterator.hpp 2011-12-30 08:16:31 EST (Fri, 30 Dec 2011)
@@ -132,7 +132,10 @@
unvisited_nodes.push(i);
}
- std::priority_queue<size_t, std::vector<size_t, Alloc>, compare_by_heap_value> unvisited_nodes;
+ std::priority_queue<size_t,
+ std::vector<size_t, typename Alloc::template rebind<size_t>::other >,
+ compare_by_heap_value
+ > unvisited_nodes;
};
Modified: branches/release/boost/heap/detail/tree_iterator.hpp
==============================================================================
--- branches/release/boost/heap/detail/tree_iterator.hpp (original)
+++ branches/release/boost/heap/detail/tree_iterator.hpp 2011-12-30 08:16:31 EST (Fri, 30 Dec 2011)
@@ -96,7 +96,7 @@
return data_.empty();
}
- std::vector<HandleType, Alloc> data_;
+ std::vector<HandleType, typename Alloc::template rebind<HandleType>::other > data_;
};
template <typename ValueType,
@@ -148,7 +148,9 @@
return data_.empty();
}
- std::priority_queue<HandleType, std::vector<HandleType, Alloc>, compare_values_by_handle> data_;
+ std::priority_queue<HandleType,
+ std::vector<HandleType, typename Alloc::template rebind<HandleType>::other>,
+ compare_values_by_handle> data_;
};
@@ -347,7 +349,7 @@
++next;
- for (;;) {
+ while (true) {
if (parent == NULL || next != parent->children.end())
break;
Modified: branches/release/boost/heap/priority_queue.hpp
==============================================================================
--- branches/release/boost/heap/priority_queue.hpp (original)
+++ branches/release/boost/heap/priority_queue.hpp 2011-12-30 08:16:31 EST (Fri, 30 Dec 2011)
@@ -61,7 +61,8 @@
typedef typename heap_base_maker::type super_t;
typedef typename super_t::internal_type internal_type;
- typedef std::vector<internal_type, typename heap_base_maker::allocator_argument> container_type;
+ typedef typename heap_base_maker::allocator_argument::template rebind<internal_type>::other internal_type_allocator;
+ typedef std::vector<internal_type, internal_type_allocator> container_type;
template <typename Heap1, typename Heap2>
friend struct detail::heap_merge_emulate;
Modified: branches/release/boost/heap/skew_heap.hpp
==============================================================================
--- branches/release/boost/heap/skew_heap.hpp (original)
+++ branches/release/boost/heap/skew_heap.hpp 2011-12-30 08:16:31 EST (Fri, 30 Dec 2011)
@@ -418,14 +418,14 @@
return push_helper::push(this, v);
}
-#ifdef BOOST_HAS_RVALUE_REFS
+#if defined(BOOST_HAS_RVALUE_REFS) && !defined(BOOST_NO_VARIADIC_TEMPLATES)
/**
* \b Effects: Adds a new element to the priority queue. The element is directly constructed in-place.
*
* \b Complexity: Logarithmic (amortized).
*
* */
- template <class... Args>
+ template <typename... Args>
typename mpl::if_c<is_mutable, handle_type, void>::type emplace(Args&&... args)
{
typedef typename mpl::if_c<is_mutable, push_handle, push_void>::type push_helper;
@@ -756,7 +756,7 @@
self->push_internal(v);
}
-#ifdef BOOST_HAS_RVALUE_REFS
+#if defined(BOOST_HAS_RVALUE_REFS) && !defined(BOOST_NO_VARIADIC_TEMPLATES)
template <class... Args>
static void emplace(skew_heap * self, Args&&... args)
{
@@ -772,7 +772,7 @@
return handle_type(self->push_internal(v));
}
-#ifdef BOOST_HAS_RVALUE_REFS
+#if defined(BOOST_HAS_RVALUE_REFS) && !defined(BOOST_NO_VARIADIC_TEMPLATES)
template <class... Args>
static handle_type emplace(skew_heap * self, Args&&... args)
{
Modified: branches/release/libs/heap/test/common_heap_tests.hpp
==============================================================================
--- branches/release/libs/heap/test/common_heap_tests.hpp (original)
+++ branches/release/libs/heap/test/common_heap_tests.hpp 2011-12-30 08:16:31 EST (Fri, 30 Dec 2011)
@@ -18,7 +18,7 @@
typedef std::vector<int> test_data;
-const int test_size = 128;
+const int test_size = 64;//128;
struct dummy_run
{
Modified: branches/release/libs/heap/test/stable_heap_tests.hpp
==============================================================================
--- branches/release/libs/heap/test/stable_heap_tests.hpp (original)
+++ branches/release/libs/heap/test/stable_heap_tests.hpp 2011-12-30 08:16:31 EST (Fri, 30 Dec 2011)
@@ -1,3 +1,4 @@
+#include <boost/foreach.hpp>
#include "common_heap_tests.hpp"
struct q_tester
@@ -11,9 +12,9 @@
return value < rhs.value;
}
- bool operator>= (q_tester const & rhs) const
+ bool operator> (q_tester const & rhs) const
{
- return value >= rhs.value;
+ return value > rhs.value;
}
bool operator== (q_tester const & rhs) const
@@ -27,7 +28,7 @@
std::ostream& operator<< (std::ostream& out, q_tester const & t)
{
- out << "[" << t.value << " " << t.id << "";
+ out << "[" << t.value << " " << t.id << "]";
return out;
}
@@ -44,7 +45,7 @@
return ret;
}
-struct cmp1
+struct compare_by_id
{
bool operator()(q_tester const & lhs, q_tester const & rhs)
{
@@ -52,19 +53,6 @@
}
};
-struct cmp2 {
- bool operator()(q_tester const & lhs, q_tester const & rhs)
- {
- return lhs.value < rhs.value;
- }
-};
-
-void fixup_test_data(stable_test_data & data)
-{
- std::stable_sort(data.begin(), data.end(), cmp1());
- std::stable_sort(data.begin(), data.end(), cmp2());
-}
-
template <typename pri_queue>
void pri_queue_stable_test_sequential_push(void)
{
@@ -72,7 +60,8 @@
pri_queue q;
fill_q(q, data);
- fixup_test_data(data);
+ std::stable_sort(data.begin(), data.end(), compare_by_id());
+ std::stable_sort(data.begin(), data.end(), std::less<q_tester>());
check_q(q, data);
}
@@ -82,8 +71,14 @@
stable_test_data data = make_stable_test_data(test_size);
pri_queue q;
stable_test_data push_data(data);
- std::stable_sort(push_data.begin(), push_data.end(), std::greater_equal<q_tester>());
+
+ std::stable_sort(push_data.begin(), push_data.end(), std::greater<q_tester>());
+
fill_q(q, push_data);
+
+ std::stable_sort(data.begin(), data.end(), compare_by_id());
+ std::stable_sort(data.begin(), data.end(), std::less<q_tester>());
+
check_q(q, data);
}
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk