]> git.donarmstrong.com Git - lilypond.git/blob - lily/prob-scheme.cc
* lily/prob-scheme.cc (LY_DEFINE): new file.
[lilypond.git] / lily / prob-scheme.cc
1 /*
2   paper-system-scheme.cc -- implement Prob bindings
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
7 */
8
9 #include "prob.hh"
10
11 LY_DEFINE (ly_prob_set_property_x, "ly:prob-set-property!",
12            2, 1, 0, (SCM system, SCM sym, SCM value),
13            "Set property @var{sym} of @var{system} to @var{value}")
14 {
15   Prob *ps = unsmob_prob (system);
16   SCM_ASSERT_TYPE (ps, system, SCM_ARG1, __FUNCTION__, "Prob");
17   SCM_ASSERT_TYPE (scm_is_symbol (sym), sym, SCM_ARG2, __FUNCTION__, "symbol");
18
19   ps->internal_set_property (sym, value);
20   return SCM_UNSPECIFIED;
21 }
22
23 LY_DEFINE (ly_prob_property, "ly:prob-property",
24            2, 1, 0, (SCM system, SCM sym, SCM dfault),
25            "Return the value for @var{sym}.")
26 {
27   Prob *ps = unsmob_prob (system);
28   SCM_ASSERT_TYPE (ps, system, SCM_ARG1, __FUNCTION__, "Prob");
29   SCM_ASSERT_TYPE (scm_is_symbol (sym), sym, SCM_ARG2, __FUNCTION__, "symbol");
30
31   if (dfault == SCM_UNDEFINED)
32     dfault = SCM_EOL;
33
34   SCM retval = ps->internal_get_property (sym);
35   if (retval == SCM_EOL)
36     return dfault;
37   else
38     return retval;
39 }
40
41 LY_DEFINE (ly_prob_type_p, "ly:prob-type?",
42            1, 0, 0,
43            (SCM obj, SCM type),
44            "If obj the specified prob-type?")
45 {
46   Prob*prob = unsmob_prob (obj);
47   return scm_from_bool (prob && prob->type() == type);
48 }
49
50 LY_DEFINE (ly_make_prob, "ly:make-prob",
51            2, 0, 0,
52            (SCM type, SCM init),
53            "Create a Prob.")
54 {
55   Prob *pr = new Prob (type, init);
56   SCM x = pr->self_scm () ;
57   return scm_gc_unprotect_object (x);
58 }
59
60   
61 LY_DEFINE(ly_paper_system_p, "ly:paper-system?",
62           1, 0, 0, (SCM obj),
63           "Type predicate.")
64 {
65   return ly_prob_type_p (obj, ly_symbol2scm ("paper-system"));
66 }