X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmoment.cc;h=43c3e0bf1893dba18473af75a923061c8ac8c6e5;hb=de2b6d04ee98783f86b02047e41ee672f97a813d;hp=3889df8ea009a5e799399e4bca7a7668fec9ee7f;hpb=899a5926b98860f3d5db399616d9211927fbfa3c;p=lilypond.git diff --git a/lily/moment.cc b/lily/moment.cc index 3889df8ea0..43c3e0bf18 100644 --- a/lily/moment.cc +++ b/lily/moment.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1999--2002 Han-Wen Nienhuys + (c) 1999--2003 Han-Wen Nienhuys */ @@ -37,7 +37,7 @@ Moment::print_smob (SCM s, SCM port, scm_print_state *) Moment *r = (Moment *) ly_cdr (s); scm_puts ("#string (); + String str = r->to_string (); scm_puts ((char *)str.to_str0 (), port); scm_puts (" >", port); @@ -48,29 +48,62 @@ Moment::print_smob (SCM s, SCM port, scm_print_state *) 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}. + "create the rational number with main timing @var{n}/@var{d}. \n" +"\n" +"\n" +"Moment is a point in musical time. It is consists of a pair of\n" +"rationals (@var{m},@var{g}), where @var{m} is the timing for the main\n" +"notes, and @var{g} the timing for grace notes. In absence of grace\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"); + return Moment (Rational (gh_scm2int (n), gh_scm2int (d))).smobbed_copy(); +} -Moment is a point in musical time. It is consists of a pair of -rationals (@var{m},@var{g}), where @var{m} is the timing for the main -notes, and @var{g} the timing for grace notes. In absence of grace -notes, @var{g} is zero. -") +LY_DEFINE (add_moment,"ly:add-moment", 2,0,0, (SCM a, SCM b), + "Add two moments." +) { - Moment m (Rational (1,1)); + Moment * ma = unsmob_moment (a); + Moment * mb = unsmob_moment (b); + SCM_ASSERT_TYPE (ma, a, SCM_ARG1, __FUNCTION__, "moment"); + SCM_ASSERT_TYPE (mb, b, SCM_ARG2, __FUNCTION__, "moment"); - if (SCM_INUMP (n) && SCM_INUMP (d)) - { - m = Moment (Rational (gh_scm2int (n), gh_scm2int (d))); - } - else - { - ::error ("make-moment takes two integer arguments. Using 1/1"); - } + return (*ma + *mb).smobbed_copy(); +} + + +LY_DEFINE (mul_moment,"ly:mul-moment", 2,0,0, (SCM a, SCM b), + "Multiply two moments." +) +{ + Moment * ma = unsmob_moment (a); + Moment * mb = unsmob_moment (b); + SCM_ASSERT_TYPE (ma, a, SCM_ARG1, __FUNCTION__, "moment"); + SCM_ASSERT_TYPE (mb, b, SCM_ARG2, __FUNCTION__, "moment"); - return m.smobbed_copy (); + return (*ma * *mb).smobbed_copy(); } + + +LY_DEFINE (div_moment,"ly:div-moment", 2,0,0, (SCM a, SCM b), + "Divide two moments." +) +{ + Moment * ma = unsmob_moment (a); + Moment * mb = unsmob_moment (b); + SCM_ASSERT_TYPE (ma, a, SCM_ARG1, __FUNCTION__, "moment"); + SCM_ASSERT_TYPE (mb, b, SCM_ARG2, __FUNCTION__, "moment"); + + return (*ma / *mb).smobbed_copy(); +} + + + SCM Moment::equal_p (SCM a, SCM b) { @@ -182,12 +215,12 @@ Moment::set_infinite (int k) String -Moment::string () const +Moment::to_string () const { - String s = main_part_.string (); + String s = main_part_.to_string (); if (grace_part_) { - s += "G" + grace_part_.string (); + s += "G" + grace_part_.to_string (); } return s; } @@ -206,7 +239,7 @@ Moment::operator - () const std::ostream & operator << (std::ostream &os, Moment const &m) { - os << m.string (); + os << m.to_string (); return os; } #endif