2 stream-event.cc -- implement Stream_event
4 source file of the GNU LilyPond music typesetter
6 (c) 2005-2006 Erik Sandberg <mandolaerik@gmail.com>
9 #include "stream-event.hh"
11 #include "ly-smobs.icc"
14 #include "input-smob.hh"
16 Stream_event::~Stream_event ()
24 property_alist_ = SCM_EOL;
29 Stream_event::Stream_event ()
34 Stream_event::Stream_event (SCM property_alist)
37 property_alist_ = property_alist;
41 Hm. Perhaps Stream_event should be a prob, with class_name as an
44 Stream_event::Stream_event (SCM class_name, Input *origin)
47 set_property ("class", class_name);
52 Stream_event::Stream_event (Stream_event *ev)
55 property_alist_ = scm_copy_tree (ev->property_alist_);
59 Stream_event::origin () const
61 Input *i = unsmob_input (get_property ("origin"));
62 return i ? i : &dummy_input_global;
65 void Stream_event::set_spot (Input *i)
67 set_property ("origin", make_input (*i));
71 Stream_event::mark_smob (SCM sm)
73 Stream_event *me = (Stream_event *) SCM_CELL_WORD_1 (sm);
74 return me->property_alist_;
78 Stream_event::print_smob (SCM s, SCM port, scm_print_state *)
80 scm_puts ("#<Stream_event ", port);
81 scm_write (dump (s), port);
82 scm_puts (" >", port);
86 IMPLEMENT_SMOBS (Stream_event);
87 IMPLEMENT_DEFAULT_EQUAL_P (Stream_event);
88 IMPLEMENT_TYPE_P (Stream_event, "ly:stream-event?");
90 MAKE_SCHEME_CALLBACK (Stream_event, undump, 1);
91 MAKE_SCHEME_CALLBACK (Stream_event, dump, 1);
94 Stream_event::dump (SCM self)
96 Stream_event *ev = unsmob_stream_event (self);
97 // Reversed alists look prettier.
98 return scm_reverse (ev->property_alist_);
102 Stream_event::undump (SCM data)
104 Stream_event *obj = new Stream_event ();
105 obj->property_alist_ = scm_reverse (data);
106 return obj->unprotect ();
110 Stream_event::internal_get_property (SCM sym) const
112 SCM s = scm_sloppy_assq (sym, property_alist_);
119 Stream_event::internal_set_property (SCM prop, SCM val)
121 property_alist_ = scm_assq_set_x (property_alist_, prop, val);