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 // ES todo: Add stuff to lily-proto.hh: Stream_event and its subclasses, Stream_creator, etc.
18 Stream_event::~Stream_event ()
26 property_alist_ = SCM_EOL;
32 Stream_event::Stream_event ()
37 Stream_event::Stream_event (Context *c, Input *origin)
40 set_property ("context", scm_int2num (c->get_unique()));
44 Stream_event::Stream_event (SCM property_alist)
47 property_alist_ = property_alist;
48 origin_ = &dummy_input_global;
51 Stream_event::Stream_event (Context *c, SCM class_name)
54 set_property ("context", scm_int2num (c->get_unique()));
55 set_property ("class", class_name);
56 origin_ = &dummy_input_global;
59 Stream_event::Stream_event (Stream_event *ev)
62 property_alist_ = scm_copy_tree (ev->property_alist_);
63 origin_ = ev->origin_;
67 Stream_event::origin () const
73 Stream_event::mark_smob (SCM sm)
75 Stream_event *me = (Stream_event *) SCM_CELL_WORD_1 (sm);
76 return me->property_alist_;
80 Stream_event::print_smob (SCM s, SCM port, scm_print_state *)
82 scm_puts ("#<Stream_event ", port);
83 scm_write (dump (s), port);
84 scm_puts (" >", port);
88 IMPLEMENT_SMOBS (Stream_event);
89 IMPLEMENT_DEFAULT_EQUAL_P (Stream_event);
90 IMPLEMENT_TYPE_P (Stream_event, "ly:stream-event?");
92 MAKE_SCHEME_CALLBACK (Stream_event, undump, 1);
93 MAKE_SCHEME_CALLBACK (Stream_event, dump, 1);
96 Stream_event::dump (SCM self)
98 Stream_event *ev = unsmob_stream_event (self);
99 // Reversed alists look prettier.
100 return scm_reverse (ev->property_alist_);
104 Stream_event::undump (SCM data)
106 Stream_event *obj = new Stream_event ();
107 obj->property_alist_ = scm_reverse (data);
108 return obj->unprotect ();
112 Stream_event::internal_get_property (SCM sym) const
114 SCM s = scm_sloppy_assq (sym, property_alist_);
121 Stream_event::internal_set_property (SCM prop, SCM val)
123 property_alist_ = scm_assq_set_x (property_alist_, prop, val);