From: Han-Wen Nienhuys Date: Thu, 9 Nov 2006 13:34:31 +0000 (+0100) Subject: Spanner::broken_neighbor() X-Git-Tag: release/2.10.0-2~25 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=6b2fa48e78eff68d3dde5fcd951d1c3a106a38ae;p=lilypond.git Spanner::broken_neighbor() --- diff --git a/lily/include/spanner.hh b/lily/include/spanner.hh index 91153b79b8..8267bf1af4 100644 --- a/lily/include/spanner.hh +++ b/lily/include/spanner.hh @@ -39,7 +39,8 @@ public: vector broken_intos_; vsize get_break_index () const; - + Spanner *broken_neighbor (Direction d) const; + // todo: move to somewhere else. Real get_broken_left_end_align () const; void substitute_one_mutable_property (SCM sym, SCM val); @@ -71,5 +72,5 @@ protected: void add_bound_item (Spanner *, Grob *); bool spanner_less (Spanner *s1, Spanner *s2); -int broken_spanner_index (Spanner *sp); +int broken_spanner_index (Spanner const *sp); #endif diff --git a/lily/spanner.cc b/lily/spanner.cc index 77285e8ed1..1dcae55298 100644 --- a/lily/spanner.cc +++ b/lily/spanner.cc @@ -244,6 +244,20 @@ Spanner::find_broken_piece (System *l) const return 0; } +Spanner * +Spanner::broken_neighbor (Direction d) const +{ + if (!original_) + return 0; + + vsize k = broken_spanner_index (this); + int j = int (k) + d; + if (j < 0 || vsize (j) >= broken_intos_.size ()) + return 0; + + return broken_intos_[j]; +} + int Spanner::compare (Spanner *const &p1, Spanner *const &p2) { @@ -342,10 +356,11 @@ Spanner::set_spacing_rods (SCM smob) Return I such that SP == SP->ORIGINAL ()->BROKEN_INTOS_[I]. */ int -broken_spanner_index (Spanner *sp) +broken_spanner_index (Spanner const *sp) { Spanner *parent = dynamic_cast (sp->original ()); - return find (parent->broken_intos_, sp) - parent->broken_intos_.begin (); + /* ugh: casting */ + return find (parent->broken_intos_, (Spanner*) sp) - parent->broken_intos_.begin (); } Spanner * @@ -362,3 +377,4 @@ ADD_INTERFACE (Spanner, "@code{Item} objects), one on the left and one on the right. The left bound is\n" "also the X-reference point of the spanner.\n", "minimum-length"); +