(c) 1996--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
#include <math.h>
+#include <libc-extension.hh>
#include "dimension-cache.hh"
#include "debug.hh"
//break_into_pieces
Item * left = spanned_drul_[LEFT];
Item * right = spanned_drul_[RIGHT];
+
+ if (!left || !right)
+ return;
if (left == right)
{
Direction d = LEFT;
do
{
- Item* bound = left->find_broken_piece (d);
+ Item* bound = left->find_prebroken_piece (d);
if (bound->line_l ())
{
Spanner * span_p = dynamic_cast<Spanner*>( clone ());
Direction d = LEFT;
do
{
- Item *&pc_l = bounds[d] ;
- if (!pc_l->line_l())
- pc_l = pc_l->find_broken_piece(- d);
-
- assert (pc_l);
+ if (!bounds[d]->line_l())
+ bounds[d] = bounds[d]->find_prebroken_piece(- d);
}
while ((flip(&d))!= LEFT);
+ if (!bounds[LEFT] || ! bounds[RIGHT])
+ {
+ programming_error ("bounds of this piece aren't breakable. ");
+ continue;
+ }
+
Spanner *span_p = dynamic_cast<Spanner*>(clone ());
span_p->set_bound(LEFT,bounds[LEFT]);
span_p->set_bound(RIGHT,bounds[RIGHT]);
do
{
if (!spanned_drul_[i]->line_l())
- set_bound(i,spanned_drul_[i]->find_broken_piece((Direction) -i));
+ set_bound(i,spanned_drul_[i]->find_prebroken_piece((Direction) -i));
}
while (flip(&i) != LEFT);
}
{
iv[LEFT] = spanned_drul_[LEFT]->column_l ()->rank_i ();
}
- if ( spanned_drul_[RIGHT])
+ if (spanned_drul_[RIGHT])
{
iv[RIGHT] = spanned_drul_[RIGHT]->column_l ()->rank_i ();
}
Spanner::set_bound(Direction d, Item*i)
{
spanned_drul_[d] =i;
- if (i)
- {
- i->used_b_ = true;
- }
/**
- Prevent the column -> line_of_score -> column -> line_of_score -> etc situation
- */
+ We check for Line_of_score to prevent the column -> line_of_score
+ -> column -> line_of_score -> etc situation */
if (d== LEFT && !dynamic_cast<Line_of_score*> (this))
{
set_parent (i, X_AXIS);
}
-Spanner::Spanner ()
+Spanner::Spanner (SCM s)
+ : Score_element (s)
{
spanned_drul_[LEFT]=0;
spanned_drul_[RIGHT]=0;
return 0.0;
}
+
+void
+Spanner::do_derived_mark ()
+{
+ Direction d = LEFT;
+ do
+ if (spanned_drul_[d])
+ scm_gc_mark (spanned_drul_[d]->self_scm_);
+ while (flip (&d) != LEFT);
+}
+