]> git.donarmstrong.com Git - lilypond.git/commitdiff
Spanner::broken_neighbor()
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Thu, 9 Nov 2006 13:34:31 +0000 (14:34 +0100)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Thu, 9 Nov 2006 13:34:31 +0000 (14:34 +0100)
lily/include/spanner.hh
lily/spanner.cc

index 91153b79b8e43b5ed959fc379003ad869f638add..8267bf1af44dbd830c1624d1d020325a80e2be17 100644 (file)
@@ -39,7 +39,8 @@ public:
   vector<Spanner*> 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
index 77285e8ed12599b45120eec59d79f52ba431adb5..1dcae55298d3130077a06fa24bcf5e74368940e5 100644 (file)
@@ -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<Spanner *> (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");
+