From 1fe3ba4e4a0443db3e692ebdc18123aa256a3741 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Tue, 16 May 2006 16:27:15 +0000 Subject: Corrected ordering of children in subset (bzr r855) --- src/document-subset.cpp | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) (limited to 'src/document-subset.cpp') diff --git a/src/document-subset.cpp b/src/document-subset.cpp index 4e7e9f694..4ef547320 100644 --- a/src/document-subset.cpp +++ b/src/document-subset.cpp @@ -57,29 +57,28 @@ struct DocumentSubset::Relations : public GC::Managed, } else { Siblings::const_iterator first=children.begin(); Siblings::const_iterator last=children.end() - 1; - if ( children.size() == 1 ) { - int pos = sp_object_compare_position(*first, obj); + + while ( first != last ) { + Siblings::const_iterator mid = first + ( last - first + 1 ) / 2; + int pos = sp_object_compare_position(*mid, obj); if ( pos < 0 ) { - // All good. + first = mid; } else if ( pos > 0 ) { - last++; + if ( last == mid ) { + last = mid - 1; // already at the top limit + } else { + last = mid; + } } else { g_assert_not_reached(); } - } else { - while ( first != last ) { - Siblings::const_iterator mid=first + ( last - first + 1 ) / 2; - int pos=sp_object_compare_position(*mid, obj); - if ( pos < 0 ) { - first = mid; - } else if ( pos > 0 ) { - if ( last == mid ) { - break; - } - last = mid; - } else { - g_assert_not_reached(); - } + } + + if ( first == last ) { + // compare to the single possiblity left + int pos = sp_object_compare_position(*last, obj); + if ( pos < 0 ) { + last++; } } -- cgit v1.2.3