From: Han-Wen Nienhuys Date: Fri, 8 Dec 2006 17:38:50 +0000 (+0100) Subject: make broken_col_range() take log(N) time, by using binary search. X-Git-Tag: release/2.11.2-1~51 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=c73d2572d8e4c6fedba455b9f7c611fb3fcb2c45;p=lilypond.git make broken_col_range() take log(N) time, by using binary search. --- diff --git a/lily/system.cc b/lily/system.cc index c53099257f..c4aaca306a 100644 --- a/lily/system.cc +++ b/lily/system.cc @@ -445,17 +445,18 @@ System::broken_col_range (Item const *left, Item const *right) const left = left->get_column (); right = right->get_column (); + extract_grob_set (this, "columns", cols); - vsize i = 0; - while (i < cols.size () - && cols[i] != left) - i++; + vsize i = binary_search (cols, (Grob *) left, + Paper_column::less_than); + + int end_rank = Paper_column::get_rank (right); if (i < cols.size ()) i++; while (i < cols.size () - && cols[i] != right) + && Paper_column::get_rank (cols[i]) < end_rank) { Paper_column *c = dynamic_cast (cols[i]); if (Paper_column::is_breakable (c) && !c->system_)