diff options
| author | Jon A. Cruz <jon@joncruz.org> | 2006-05-16 16:27:15 +0000 |
|---|---|---|
| committer | joncruz <joncruz@users.sourceforge.net> | 2006-05-16 16:27:15 +0000 |
| commit | 1fe3ba4e4a0443db3e692ebdc18123aa256a3741 (patch) | |
| tree | 4494f91e5d3d476c4aa05552ffc90081d66efe03 /src/document-subset.cpp | |
| parent | require libsigc++-2.0.11 for compiling (diff) | |
| download | inkscape-1fe3ba4e4a0443db3e692ebdc18123aa256a3741.tar.gz inkscape-1fe3ba4e4a0443db3e692ebdc18123aa256a3741.zip | |
Corrected ordering of children in subset
(bzr r855)
Diffstat (limited to 'src/document-subset.cpp')
| -rw-r--r-- | src/document-subset.cpp | 35 |
1 files changed, 17 insertions, 18 deletions
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<GC::ATOMIC>, } 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++; } } |
