$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: daniel_james_at_[hidden]
Date: 2007-12-20 16:22:20
Author: danieljames
Date: 2007-12-20 16:22:20 EST (Thu, 20 Dec 2007)
New Revision: 42218
URL: http://svn.boost.org/trac/boost/changeset/42218
Log:
Get rid of last_in_group.
Text files modified: 
   branches/unordered/dev/boost/unordered/detail/hash_table_impl.hpp |    29 +++++++++++++++--------------           
   1 files changed, 15 insertions(+), 14 deletions(-)
Modified: branches/unordered/dev/boost/unordered/detail/hash_table_impl.hpp
==============================================================================
--- branches/unordered/dev/boost/unordered/detail/hash_table_impl.hpp	(original)
+++ branches/unordered/dev/boost/unordered/detail/hash_table_impl.hpp	2007-12-20 16:22:20 EST (Thu, 20 Dec 2007)
@@ -32,6 +32,8 @@
         class BOOST_UNORDERED_TABLE_DATA
         {
         public:
+            typedef BOOST_UNORDERED_TABLE_DATA data;
+
             struct node_base;
             struct node;
             struct bucket;
@@ -244,21 +246,11 @@
             }
 
             // pre: Must be pointing to the first node in a group.
-            static inline link_ptr last_in_group(link_ptr n) {
-                BOOST_ASSERT(BOOST_UNORDERED_BORLAND_BOOL(n) && n != prev_in_group(n)->next_);
-                return prev_in_group(n);
-            }
-
-            // pre: Must be pointing to the first node in a group.
             static inline link_ptr& next_group(link_ptr n) {
                 BOOST_ASSERT(BOOST_UNORDERED_BORLAND_BOOL(n) && n != prev_in_group(n)->next_);
                 return prev_in_group(n)->next_;
             }
 #else
-            static inline link_ptr last_in_group(link_ptr n) {
-                return n;
-            }
-
             static inline link_ptr& next_group(link_ptr n) {
                 BOOST_ASSERT(n);
                 return n->next_;
@@ -321,6 +313,16 @@
                         node_ = bucket_->next_;
                     }
                 }
+
+                void incrementGroup()
+                {
+                    node_ = data::next_group(node_);
+
+                    while (!node_) {
+                        ++bucket_;
+                        node_ = bucket_->next_;
+                    }
+                }
             };
 
             // Member Variables
@@ -627,8 +629,7 @@
             {
                 size_type count = group_count(*pos);
                 size_ -= count;
-                link_ptr last = last_in_group(*pos);
-                *pos = last->next_;
+                *pos = next_group(*pos);
                 return count;
             }
 #else
@@ -1827,8 +1828,8 @@
                 link_ptr it = find_iterator(bucket, k);
                 if (BOOST_UNORDERED_BORLAND_BOOL(it)) {
                     iterator_base first(iterator_base(bucket, it));
-                    iterator_base second(iterator_base(bucket, this->last_in_group(it)));
-                    second.increment();
+                    iterator_base second(first);
+                    second.incrementGroup();
                     return std::pair<iterator_base, iterator_base>(first, second);
                 }
                 else {