+pl 31.jcn2
+ - fix: rat != float
+
pl 31.jcn1
- bf: slur-follow-music
MAJOR_VERSION=1
MINOR_VERSION=1
PATCH_LEVEL=31
-MY_PATCH_LEVEL=jcn1
+MY_PATCH_LEVEL=jcn2
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
int den () const { return den_; }
int num_i () const { return sign_ * num_; }
int den_i () const { return den_; }
- Rational truncated () const;
+ Rational trunc_rat () const;
+ Rational div_rat (Rational) const;
+ Rational mod_rat (Rational) const;
void negate ();
operator bool () const;
operator int () const;
Rational &operator /= (Rational);
Rational &operator += (Rational);
Rational &operator -= (Rational);
+ Rational &operator %= (Rational);
static int compare (Rational const&, Rational const&);
int sign () const;
String str () const;
IMPLEMENT_ARITHMETIC_OPERATOR (Rational, + );
IMPLEMENT_ARITHMETIC_OPERATOR (Rational, * );
IMPLEMENT_ARITHMETIC_OPERATOR (Rational, - );
+IMPLEMENT_ARITHMETIC_OPERATOR (Rational, % );
INSTANTIATE_COMPARE (Rational const&, Rational::compare);
}
Rational
-Rational::truncated () const
+Rational::trunc_rat () const
{
return Rational(num_ - (num_ % den_), den_);
}
return r;
}
+Rational
+Rational::div_rat (Rational div) const
+{
+ Rational r (*this);
+ r /= div;
+ return r.trunc_rat ();
+}
+
+Rational
+Rational::mod_rat (Rational div) const
+{
+ Rational r (*this);
+ r = (r / div - r.div_rat (div)) * div;
+ return r;
+}
+
void
Rational::normalise ()
{
return Rational::compare (r, s );
}
+Rational &
+Rational::operator %= (Rational r)
+{
+ *this = r.mod_rat (r);
+ return *this;
+}
+
Rational &
Rational::operator += (Rational r)
{
--- /dev/null
+
+\version "1.0.14";
+
+\score{
+ \notes\relative c'' {
+ % set either property -> core dump: two autobeams?
+% \property Voice.fontsize= "-2"
+ \property Voice.pletvisibility = 0
+
+ % strange staffs, but no core dump
+ \times 2/3 { [ c16 c c] } c4 c2
+ }
+ \paper {
+ \translator { \VoiceContext
+% \remove Auto_beam_engraver;
+ }
+ }
+}
+
begin_mom = begin_mult.to_rat ();
}
- /* UGH
- Rational != Float
- */
- Real f;
+ Rational r;
if (end_mom)
- f = fmod (time->whole_in_measure_, end_mom);
+ r = time->whole_in_measure_.mod_rat (end_mom);
else
- f = Moment (1);
+ r = Moment (1);
- // enge floots
- Real epsilon_f = Moment (1, 512);
- if (beam_p_ && (abs (f) < epsilon_f))
+ if (beam_p_ && !r)
end_beam ();
/*
return;
if (begin_mom)
- f = fmod (time->whole_in_measure_, begin_mom);
- if (!beam_p_ && (!begin_mom || (abs (f) < epsilon_f)))
+ r = time->whole_in_measure_.mod_rat (begin_mom);
+ if (!beam_p_ && (!begin_mom || !r))
begin_beam ();
}
Auto_beam_engraver::junk_beam ()
{
assert (beam_p_);
+#if 0
for (int i=0; i < beam_p_->stems_.size (); i++)
{
Stem* s = beam_p_->stems_[i];
s->mult_i_ = 0;
s->beam_l_ = 0;
}
+#endif
beam_p_->unlink ();
beam_p_ = 0;
head_l_arr_.substitute (h, dynamic_cast<Note_head*>(n));
if (Rest *r=dynamic_cast<Rest*> (o))
rest_l_arr_.substitute (r, dynamic_cast<Rest*>(n));
+ if (Beam* b = dynamic_cast<Beam*> (o))
+ {
+ if (b == beam_l_)
+ {
+ beam_l_ = dynamic_cast<Beam*> (n);
+ if (!beam_l_)
+ {
+ beams_i_drul_[LEFT] = 0;
+ beams_i_drul_[RIGHT] = 0;
+ mult_i_ = 0;
+ }
+ }
+ }
}
void
error_t (String const & s, Moment const & r)
{
- String t_mom = r.truncated ().str () + (r - r.truncated ()).str ();
+ String t_mom = r.trunc_rat ().str () + (r - r.trunc_rat ()).str ();
String e=s+ " (t = " + t_mom + ")";
error (e);
}
time3_2beamAutoEnd32 = "1/8";
time3_4beamAutoBegin = "1/4";
time3_4beamAutoEnd8 = "3/4";
+time3_4beamAutoBegin32 = "1/8";
time3_4beamAutoEnd32 = "1/8";
time3_8beamAutoBegin = "1/8";
time3_8beamAutoEnd = "3/8";
+pl 70
+ - GUILE config fixes (AF)
+
pl 69
- package_depth detection fix
PACKAGE_NAME=StepMake
MAJOR_VERSION=0
MINOR_VERSION=1
-PATCH_LEVEL=69
+PATCH_LEVEL=70
MY_PATCH_LEVEL=
# use the above to send patches, always empty for released version: