From 33e65aa0bff5323a2f8473f4a7f7a74a97ebf5d6 Mon Sep 17 00:00:00 2001 From: joncruz Date: Tue, 16 May 2006 16:27:15 +0000 Subject: [PATCH] Corrected ordering of children in subset --- ChangeLog | 5 +++++ src/document-subset.cpp | 35 +++++++++++++++++------------------ 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 66c748334..965fb1f2b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2006-05-16 Jon A. Cruz + + * src/document-subset.cpp: + Corrected ordering of children in subset. + 2006-05-15 Jon A. Cruz * src/Makefile_insert, src/desktop.cpp, src/desktop.h, src/layer-manager.cpp, src/menus-skeleton.h, src/verbs.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++; } } -- 2.30.2