Command_req* c_l = r_l->command();
if (!c_l|| !c_l->bar())
return false;
-
- assert(!bar_req_l_);
- bar_req_l_ = c_l->bar();
+ Bar_req * b= c_l->bar();
+ if (bar_req_l_ && bar_req_l_->compare(*b))
+ return false;
+
+ bar_req_l_ = b;
return true;
}
}
}
+
+
void
Bar_register::split_bar(Bar *& pre, Bar * no, Bar * &post)
{
bar_req_l_ = 0;
bar_p_ =0;
}
+
+IMPLEMENT_STATIC_NAME(Bar_register);
+
+
struct Meter_change_req : Timing_req {
int beats_i_, one_beat_i_;
+ int compare(Meter_change_req const&);
Meter_change_req();
void set(int,int);
REQUESTMETHODS(Meter_change_req, meterchange);
};
+/**
+ Handle key changes.
+ Routines for sharps and flats are separated,
+ so that caller may identify non-conventional keys.
+*/
struct Key_change_req : Command_req {
Array<Melodic_req*> melodic_p_arr_;
- virtual void transpose(Melodic_req const &)const;
+ bool minor_b_;
+
Key_change_req();
Key_change_req(Key_change_req const&);
~Key_change_req();
REQUESTMETHODS(Key_change_req, keychange);
+
+ /// return number of flats in key
+ int flats_i();
+
+ /// return number of sharps in key
+ int sharps_i();
+
+ void transpose(Melodic_req const & d) const;
+ /// is minor key?
+ int minor_b();
};
struct Clef_change_req : Command_req {
#include "command-request.hh"
Meter_register::Meter_register()
-
{
post_move_processing();
}
Command_req* creq_l= r_l->command();
if (!creq_l || !creq_l->meterchange())
return false;
-
- assert(!meter_req_l_);
- meter_req_l_ = r_l->command()->meterchange();
-
+ Meter_change_req *m = creq_l->meterchange();
+ if (meter_req_l_ && meter_req_l_->compare(*m))
+ return false;
+
+ meter_req_l_ = m;
return true;
}
meter_req_l_ = 0;
meter_p_ =0;
}
+IMPLEMENT_STATIC_NAME(Meter_register);