public:
TRANSLATOR_DECLARATIONS(Tie_performer);
private:
- bool done_;
-
+
+ bool ties_created_;
Array<CNote_melodic_tuple> now_notes_;
Array<CNote_melodic_tuple> tied_notes_;
Tie_performer::Tie_performer ()
{
event_ = 0;
- done_ = false;
+ ties_created_ = false;
}
ENTER_DESCRIPTION (Tie_performer, "", "",
Tie_performer::initialize ()
{
event_ = 0;
+ prev_event_ = 0;
}
p->set_note (RIGHT, now_notes_[j].note_);
ties_.push (p);
announce_element (Audio_element_info (p, event_));
+ ties_created_ = true;
tied_notes_.del (i);
+ break ;
}
}
}
void
Tie_performer::stop_translation_timestep ()
{
- if (prev_event_ && tied_notes_.size () && !ties_.size ())
+ if (prev_event_ && tied_notes_.size () && !ties_.size ()
+ && now_notes_.size ())
{
prev_event_->origin ()->warning (_ ("No ties were performed."));
}
- else
- prev_event_ = 0;
+
+ if (ties_created_)
+ {
+ prev_event_ = 0;
+ tied_notes_.clear();
+ }
if (event_)
{
tied_notes_ = now_notes_ ;
prev_event_ = event_;
}
- else
- {
- tied_notes_.clear ();
- }
event_ = 0;
now_notes_ .clear ();
- for (int i=0; i< ties_.size (); i++)
+ for (int i=ties_.size (); i--;)
{
ties_[i]->note_drul_[RIGHT]->tie_to (ties_[i]->note_drul_[LEFT]);
}
Tie_performer::start_translation_timestep ()
{
event_ =0;
- done_ = false;
+ ties_created_ = false;
Moment now = now_mom ();
- for (int i= tied_notes_.size ();
- i -- ;)
+ for (int i= tied_notes_.size (); i-- ;)
{
if (tied_notes_[i].end_ < now)
tied_notes_.del (i);