virtual ~Input_music(){}
virtual void print() const =0;
virtual void set_default_group(String)=0;
- virtual bool find_plet_start_bo(char c, Moment& moment_r) = 0;
+ virtual bool find_plet_start_b(char c, Moment& moment_r) = 0;
virtual void set_plet_backwards(Moment& now_moment_r, Moment until_moment, int num_i, int den_i) = 0;
virtual void transpose(Melodic_req const&) const =0;
virtual Voice_list convert()const;
virtual void translate_time(Moment dt);
virtual void print() const;
- virtual bool find_plet_start_bo(char c, Moment& moment_r);
+ virtual bool find_plet_start_b(char c, Moment& moment_r);
virtual void set_plet_backwards(Moment& now_moment_r, Moment until_moment, int num_i, int den_i);
virtual Input_music *clone() const {
return new Simple_music(*this);
Complex_music(Complex_music const &);
virtual void print() const ;
void concatenate(Complex_music*);
- virtual bool find_plet_start_bo(char c, Moment& moment_r);
+ virtual bool find_plet_start_b(char c, Moment& moment_r);
virtual void set_plet_backwards(Moment& now_moment_r, Moment until_moment, int num_i, int den_i);
};
/** one horizontal bit. Voice_element is nothing but a container for
*the requests, */
struct Voice_element {
- Moment duration;
+ /** the duration of the element. This can be 0; The duration is
+ determined from rhythmical requests contained in this
+ Voice_element */
+ Moment duration_;
char const* defined_ch_C_;
Voice const *voice_l_;
IPointerList<Request*> reqs;
Voice_element(Voice_element const & src );
void add(Request*);
- bool find_plet_start_bo(char c, Moment& moment_r);
+ bool find_plet_start_b(char c, Moment& moment_r);
void print ()const;
void set_default_group(String id);
void set_plet_backwards(Moment& now_moment_r, Moment until_moment, int num_i, int den_i);
*/
struct Voice {
+ /** the elements, earliest first.
+ Please use the member #add()# to add a new element
+ */
IPointerList<Voice_element *> elts;
Moment start;
Moment last() const;
void transpose(Melodic_req const &)const;
void add(Voice_element*);
- bool find_plet_start_bo(char c, Moment& moment_r);
+ bool find_plet_start_b(char c, Moment& moment_r);
void print() const;
void set_default_group(String id);
void set_plet_backwards(Moment& now_moment_r, Moment until_moment, int num_i, int den_i);
#include "input-music.hh"
#include "voice.hh"
#include "musical-request.hh"
+#include "command-request.hh"
#include "voice-element.hh"
void
for (iter_top(velt_l->reqs,i); i.ok(); i++)
if ( i->plet() ) {
Moment start_moment = 0;
- if ( !find_plet_start_bo( i->plet()->type_c_, start_moment ) ) {
+ if ( !find_plet_start_b( i->plet()->type_c_, start_moment ) ) {
error( "begin of plet not found", i->defined_ch_C_ );
break;
}
Simple_music::convert()const
{
Voice_list l;
- l.bottom().add(new Voice(voice_));
+ Voice * v_p = new Voice(voice_);
+ PCursor<Voice_element*> i= v_p->elts.bottom();
+ // need-to-have, otherwise memory will be filled up with regs.
+ if (!i.ok() || i->duration_) {
+ v_p->add ( new Voice_element);
+ i=v_p->elts.bottom();
+ }
+ i->add(new Terminate_voice_req);
+ l.bottom().add(v_p);
return l;
}
void
Simple_music::print() const
{
+#ifndef NPRINT
mtor << "Simple_music {";
voice_.print();
mtor << "}\n";
+#endif
}
bool
-Simple_music::find_plet_start_bo(char c, Moment& moment_r)
+Simple_music::find_plet_start_b(char c, Moment& moment_r)
{
- return voice_.find_plet_start_bo(c, moment_r);
+ return voice_.find_plet_start_b(c, moment_r);
}
void
-Simple_music::set_plet_backwards(Moment& now_moment_r, Moment until_moment, int num_i, int den_i)
+Simple_music::set_plet_backwards(Moment& now_moment_r, Moment until_moment,
+ int num_i, int den_i)
{
voice_.set_plet_backwards(now_moment_r, until_moment, num_i, den_i);
}
i->set_default_group(g);
}
bool
-Complex_music::find_plet_start_bo(char c, Moment& moment_r)
+Complex_music::find_plet_start_b(char c, Moment& moment_r)
{
for (iter_bot(elts,i); i.ok(); i--) {
- if ( i->find_plet_start_bo(c, moment_r) )
+ if ( i->find_plet_start_b(c, moment_r) )
return true;
}
return false;
Voice_element::print() const
{
#ifndef NPRINT
- mtor << "voice_element { dur :"<< duration <<"\n";
+ mtor << "voice_element { dur :"<< duration_ <<"\n";
for (iter_top(reqs,rc); rc.ok(); rc++) {
rc->print();
}
Voice_element::add(Request*r)
{
if (r->duration()) {
- assert (!duration || duration == r->duration());
- duration = r->duration();
+ assert (!duration_ || duration_ == r->duration());
+ duration_ = r->duration();
}
r->elt_l_ = this;
Voice_element::Voice_element()
{
voice_l_ = 0;
- duration = 0;
+ duration_ = 0;
defined_ch_C_ = 0;
}
}
bool
-Voice_element::find_plet_start_bo(char c, Moment& moment_r)
+Voice_element::find_plet_start_b(char c, Moment& moment_r)
{
assert( c == ']' );
- moment_r += duration;
+ moment_r += duration_;
for ( PCursor<Request*> i( reqs.top() ); i.ok(); i++ ) {
if (i->beam() && i->beam()->spantype == Span_req::START )
return true;
Voice_element::set_plet_backwards(Moment& now_moment_r,
Moment until_moment, int num_i, int den_i)
{
- now_moment_r += duration;
+ now_moment_r += duration_;
if ( now_moment_r > until_moment )
return;
for ( PCursor<Request*> i( reqs.top() ); i.ok(); i++ ) {
}
bool
-Voice::find_plet_start_bo(char c, Moment& moment_r)
+Voice::find_plet_start_b(char c, Moment& moment_r)
{
for (iter_bot(elts, i); i.ok(); i--)
- if ( i->find_plet_start_bo(c, moment_r) )
+ if ( i->find_plet_start_b(c, moment_r) )
return true;
return false;
}
l = start;
for (iter_top(elts,i); i.ok(); i++)
- l += i->duration;
+ l += i->duration_;
return l;
}