}
-SCM
-Moment::smobbed_copy () const
-{
- Moment * m = new Moment (*this);
- return m->smobbed_self ();
-}
int
/*
TODO: add optional factor argument.
*/
-LY_DEFINE (make_moment,"ly:make-moment", 2,0,0, (SCM n, SCM d),
- "create the rational number with main timing @var{n}/@var{d}. \n"
+LY_DEFINE (make_moment,"ly:make-moment", 2,2,0, (SCM n, SCM d, SCM gn, SCM gd),
+ "Create the rational number with main timing @var{n}/@var{d}, "
+ "and optional grace timin @var{gn}/@var{gd}.\n"
"\n"
"\n"
"Moment is a point in musical time. It is consists of a pair of\n"
"notes, @var{g} is zero.\n"
)
{
- SCM_ASSERT_TYPE(SCM_INUMP (n), n, SCM_ARG1, __FUNCTION__, "integer");
- SCM_ASSERT_TYPE(SCM_INUMP (d), d, SCM_ARG2, __FUNCTION__, "integer");
+ SCM_ASSERT_TYPE (SCM_INUMP (n), n, SCM_ARG1, __FUNCTION__, "integer");
+ SCM_ASSERT_TYPE (SCM_INUMP (d), d, SCM_ARG2, __FUNCTION__, "integer");
+
+ int grace_num = 0;
+ if (gn != SCM_UNDEFINED)
+ {
+ SCM_ASSERT_TYPE (SCM_INUMP (gn), gn, SCM_ARG3, __FUNCTION__, "integer");
+ grace_num = gh_scm2int (gn);
+ }
+
+ int grace_den = 1;
+ if (gd != SCM_UNDEFINED)
+ {
+ SCM_ASSERT_TYPE (SCM_INUMP (gd), gd, SCM_ARG4, __FUNCTION__, "integer");
+ grace_den = gh_scm2int (gd);
+ }
- return Moment (Rational (gh_scm2int (n), gh_scm2int (d))).smobbed_copy();
+ return Moment (Rational (gh_scm2int (n), gh_scm2int (d)),
+ Rational (grace_num, grace_den)).smobbed_copy ();
}
LY_DEFINE (add_moment,"ly:add-moment", 2,0,0, (SCM a, SCM b),
SCM_ASSERT_TYPE (ma, a, SCM_ARG1, __FUNCTION__, "moment");
SCM_ASSERT_TYPE (mb, b, SCM_ARG2, __FUNCTION__, "moment");
- return (*ma + *mb).smobbed_copy();
+ return (*ma + *mb).smobbed_copy ();
}
SCM_ASSERT_TYPE (ma, a, SCM_ARG1, __FUNCTION__, "moment");
SCM_ASSERT_TYPE (mb, b, SCM_ARG2, __FUNCTION__, "moment");
- return (*ma * *mb).smobbed_copy();
+ return (*ma * *mb).smobbed_copy ();
}
SCM_ASSERT_TYPE (ma, a, SCM_ARG1, __FUNCTION__, "moment");
SCM_ASSERT_TYPE (mb, b, SCM_ARG2, __FUNCTION__, "moment");
- return (*ma / *mb).smobbed_copy();
+ return (*ma / *mb).smobbed_copy ();
}
LY_DEFINE (ly_moment_less_p,"ly:moment<?", 2,0,0, (SCM a, SCM b),
- "Comparation.")
+ "Compare two moments.")
{
Moment * ma = unsmob_moment (a);
Moment * mb = unsmob_moment (b);
Moment::Moment (int m)
{
- main_part_ = Rational(m);
- grace_part_ = Rational( 0);
+ main_part_ = Rational (m);
+ grace_part_ = Rational ( 0);
}
Moment::Moment (Rational m, Rational g)