|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r51702 - in sandbox/SOC/2006/tree/trunk: boost/tree libs/tree/test
From: ockham_at_[hidden]
Date: 2009-03-11 10:46:22
Author: bernhard.reiter
Date: 2009-03-11 10:46:20 EDT (Wed, 11 Mar 2009)
New Revision: 51702
URL: http://svn.boost.org/trac/boost/changeset/51702
Log:
Introduce leftmost() and rightmost() functions
Text files modified:
sandbox/SOC/2006/tree/trunk/boost/tree/algorithm.hpp | 4 +---
sandbox/SOC/2006/tree/trunk/boost/tree/general_algorithms.hpp | 30 ++++++++++++++++++++++++++++++
sandbox/SOC/2006/tree/trunk/boost/tree/inorder_algorithms.hpp | 5 +++--
sandbox/SOC/2006/tree/trunk/libs/tree/test/predecessor_test.cpp | 7 +++++++
sandbox/SOC/2006/tree/trunk/libs/tree/test/successor_test.cpp | 7 +++++++
5 files changed, 48 insertions(+), 5 deletions(-)
Modified: sandbox/SOC/2006/tree/trunk/boost/tree/algorithm.hpp
==============================================================================
--- sandbox/SOC/2006/tree/trunk/boost/tree/algorithm.hpp (original)
+++ sandbox/SOC/2006/tree/trunk/boost/tree/algorithm.hpp 2009-03-11 10:46:20 EDT (Wed, 11 Mar 2009)
@@ -102,9 +102,7 @@
(void)) // return type
to_forest_end(BinaryCursor& c)
{
- c.to_begin();
- while (!c.is_leaf())
- c.to_end();
+ rightmost(c.to_begin());
}
//template <class BinaryCursor>
Modified: sandbox/SOC/2006/tree/trunk/boost/tree/general_algorithms.hpp
==============================================================================
--- sandbox/SOC/2006/tree/trunk/boost/tree/general_algorithms.hpp (original)
+++ sandbox/SOC/2006/tree/trunk/boost/tree/general_algorithms.hpp 2009-03-11 10:46:20 EDT (Wed, 11 Mar 2009)
@@ -21,6 +21,36 @@
using namespace boost_concepts;
+/**
+ * @brief The leftmost descendant of the given cursor
+ * @param c Cursor to be set to its leftmost descendant
+ * @ingroup traversal
+ */
+template <class Cursor>
+inline
+BOOST_CONCEPT_REQUIRES(
+ ((DescendingCursor<Cursor>)),
+ (void)) // return type
+leftmost(Cursor& c)
+{
+ while (!c.to_begin().is_leaf());
+}
+
+/**
+ * @brief The rightmost descendant of the given cursor
+ * @param c Cursor to be set to its rightmost descendant
+ * @ingroup traversal
+ */
+template <class Cursor>
+inline
+BOOST_CONCEPT_REQUIRES(
+ ((DescendingCursor<Cursor>)),
+ (void)) // return type
+rightmost(Cursor& c)
+{
+ while (!c.to_end().is_leaf());
+}
+
// These algorithms are actually mostly preorder, as it's most efficient, but I
// think it doesn't make much sense having in- and postorder versions of them.
// The only reason I can think of is that there might be some cases
Modified: sandbox/SOC/2006/tree/trunk/boost/tree/inorder_algorithms.hpp
==============================================================================
--- sandbox/SOC/2006/tree/trunk/boost/tree/inorder_algorithms.hpp (original)
+++ sandbox/SOC/2006/tree/trunk/boost/tree/inorder_algorithms.hpp 2009-03-11 10:46:20 EDT (Wed, 11 Mar 2009)
@@ -12,6 +12,7 @@
#ifndef BOOST_TREE_INORDER_ALGORITHMS_HPP
#define BOOST_TREE_INORDER_ALGORITHMS_HPP
+#include <boost/tree/general_algorithms.hpp>
#include <boost/tree/root_tracking_cursor.hpp>
#include <boost/tree/ascending_cursor.hpp>
#include <boost/tree/cursor_concepts.hpp>
@@ -46,7 +47,7 @@
successor(inorder, MultiwayCursor& c)
{
if (!(++c).is_leaf()) {
- while (!c.to_begin().is_leaf());
+ leftmost(c);
return;
}
@@ -68,7 +69,7 @@
predecessor(inorder, MultiwayCursor& c)
{
if (!c.is_leaf()) {
- while (!c.to_end().is_leaf());
+ rightmost(c);
--c;
return;
}
Modified: sandbox/SOC/2006/tree/trunk/libs/tree/test/predecessor_test.cpp
==============================================================================
--- sandbox/SOC/2006/tree/trunk/libs/tree/test/predecessor_test.cpp (original)
+++ sandbox/SOC/2006/tree/trunk/libs/tree/test/predecessor_test.cpp 2009-03-11 10:46:20 EDT (Wed, 11 Mar 2009)
@@ -19,6 +19,13 @@
BOOST_FIXTURE_TEST_SUITE(cursor_algorithms_test, fake_binary_tree_fixture<int>)
+BOOST_AUTO_TEST_CASE( test_rightmost )
+{
+ fake_binary_tree<int>::root_tracking_cursor c = fbt1.root_tracking_root(); //.begin();
+ rightmost(c);
+ BOOST_CHECK_EQUAL(*c, 14);
+}
+
BOOST_AUTO_TEST_CASE_TEMPLATE( test_predecessor, Order, orders )
{
fake_binary_tree<int>::root_tracking_cursor c = fbt1.root_tracking_root(); //.begin();
Modified: sandbox/SOC/2006/tree/trunk/libs/tree/test/successor_test.cpp
==============================================================================
--- sandbox/SOC/2006/tree/trunk/libs/tree/test/successor_test.cpp (original)
+++ sandbox/SOC/2006/tree/trunk/libs/tree/test/successor_test.cpp 2009-03-11 10:46:20 EDT (Wed, 11 Mar 2009)
@@ -17,6 +17,13 @@
BOOST_FIXTURE_TEST_SUITE(cursor_algorithms_test, fake_binary_tree_fixture<int>)
+BOOST_AUTO_TEST_CASE( test_leftmost )
+{
+ fake_binary_tree<int>::root_tracking_cursor c = fbt1.root_tracking_root(); //.begin();
+ leftmost(c);
+ BOOST_CHECK_EQUAL(*c, 1);
+}
+
BOOST_AUTO_TEST_CASE_TEMPLATE( test_successor, Order, orders )
{
fake_binary_tree<int>::root_tracking_cursor c = fbt1.root_tracking_root(); //.begin();
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