30
Conceptually a music-iterator operates on a queue of musical events
31
that are pending. This queue does not actually exist, but it is a
32
way of viewing and traversing music-expressions.
35
ok () -- events left ?
37
pending_mom () -- time tag of the next event to be processed.
38
PRECONDITION: this->ok () holds.
40
process (M) -- process all at M (Precondition: no events exist
41
before M, this->ok () holds). Side-effects:
43
* This removes all events at M from the pending queue.
45
* Typically this reports the music to an interpretation context,
46
thus changing the state of the interpretation context.
51
merge pending_moment and process?
27
Conceptually a music-iterator operates on a queue of musical events
28
that are pending. This queue does not actually exist, but it is a
29
way of viewing and traversing music-expressions.
32
ok () -- events left ?
34
pending_mom () -- time tag of the next event to be processed.
35
PRECONDITION: this->ok () holds.
37
process (M) -- process all at M (Precondition: no events exist
38
before M, this->ok () holds). Side-effects:
40
* This removes all events at M from the pending queue.
42
* Typically this reports the music to an interpretation context,
43
thus changing the state of the interpretation context.
48
merge pending_moment and process?
54
50
class Music_iterator
57
53
Moment music_length_;
60
DECLARE_SMOBS (Music_iterator,dummy);
61
Music_iterator (Music_iterator const&);
56
DECLARE_CLASSNAME(Music_iterator);
57
DECLARE_SMOBS (Music_iterator, dummy);
58
Music_iterator (Music_iterator const &);
64
61
Moment music_get_length () const;
65
virtual Moment music_start_mom () const;
62
Moment music_start_mom () const;
69
Do the reporting. Will try MUSIC_L_ in its own translator first,
70
then its children. Returns the iterator that succeeded
72
Music_iterator * try_music (Music *) const;
75
The translation unit that we this iterator is reporting to now.
77
Context * get_outlet () const;
79
void set_translator (Context *);
81
/** Get an iterator matching the type of MUS, and use TRANS to find
82
an accompanying translation unit
84
static SCM get_static_get_iterator (Music * mus);
85
void init_translator (Music *, Context *);
64
Music_iterator *try_music (Music *) const;
65
Context *get_outlet () const;
66
void set_context (Context *);
67
static SCM get_static_get_iterator (Music *mus);
68
void init_translator (Music *, Context *);
87
void substitute_outlet (Context * from, Context *to);
70
void substitute_outlet (Context *from, Context *to);
88
71
virtual void derived_substitute (Context *, Context *);
89
72
virtual Moment pending_moment () const;
90
73
virtual bool ok () const;
92
virtual bool run_always () const;
74
virtual bool run_always () const;
93
75
virtual void process (Moment until);
94
virtual void derived_mark ()const;
76
virtual void derived_mark () const;
95
77
virtual void construct_children ();
98
Construct sub-iterators, and set the translator to
102
DECLARE_SCHEME_CALLBACK(constructor, ());
105
Get an iterator for MUS, inheriting the translation unit from THIS.
78
DECLARE_SCHEME_CALLBACK (constructor, ());
107
79
SCM get_iterator (Music *) const;
109
virtual Music_iterator* try_music_in_children (Music *) const;
81
virtual Music_iterator *try_music_in_children (Music *) const;
111
Music * get_music () const;
83
Music *get_music () const;
113
virtual void do_quit();
114
void descend_to_child (Context*);
85
virtual void do_quit ();
86
void descend_to_child (Context *);
116
Interpretation_context_handle handle_;
89
Context_handle handle_;
120
93
bool is_child_context (Context *me, Context *child);
122
#define IMPLEMENT_CTOR_CALLBACK(Class) \
123
LY_DEFINE_MEMBER_FUNCTION(Class,constructor, #Class "::constructor",\
128
SCM val = (new Class)->self_scm(); \
129
scm_gc_unprotect_object (val);\
95
#define IMPLEMENT_CTOR_CALLBACK(Class) \
96
LY_DEFINE_MEMBER_FUNCTION (Class, constructor, \
97
mangle_cxx_identifier (string (#Class) + "::constructor").c_str(), \
102
Class *c = (new Class); \
103
return c->unprotect (); \
133
DECLARE_UNSMOB(Music_iterator, iterator);
106
DECLARE_UNSMOB (Music_iterator, iterator);
135
108
#endif // MUSIC_ITERATOR_HH