X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fmusic-iterator.hh;h=bc99f499d3422fb3eb20cb60378729ebe977d64b;hb=5b6181075e3615dce049711973d3cd5caa60e5db;hp=43d39505d7687b9d3dfb6e432b0eb04da4e46bbe;hpb=ce9845392e4e22ae9c5f6ec1da914eb301f1892c;p=lilypond.git diff --git a/lily/include/music-iterator.hh b/lily/include/music-iterator.hh index 43d39505d7..bc99f499d3 100644 --- a/lily/include/music-iterator.hh +++ b/lily/include/music-iterator.hh @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2000 Han-Wen Nienhuys + (c) 1997--2001 Han-Wen Nienhuys */ @@ -15,6 +15,7 @@ #include "moment.hh" #include "virtual-methods.hh" #include "interpretation-context-handle.hh" +#include "cxx-function-smob.hh" /** Conceptually a music-iterator operates on a queue of musical events @@ -25,10 +26,10 @@ ok () -- events left ? pending_mom () -- time tag of the next event to be processed. - PRECONDITION: this->ok() holds. + PRECONDITION: this->ok () holds. process (M) -- process all at M (Precondition: no events exist - before M, this->ok() holds). Side-effects: + before M, this->ok () holds). Side-effects: * This removes all events at M from the pending queue. @@ -51,11 +52,12 @@ class Music_iterator { protected: Moment music_length_; - + Moment start_mom_; public: VIRTUAL_COPY_CONS (Music_iterator); Moment music_length_mom () const; + Moment music_start_mom () const; Music_iterator (); Music_iterator (Music_iterator const&); virtual ~Music_iterator (); @@ -90,10 +92,8 @@ public: report to. */ virtual void construct_children (); - -protected: - Music * music_l_; - + static SCM constructor_cxx_function; + /** Get an iterator for MUS, inheriting the translation unit from THIS. */ @@ -101,8 +101,38 @@ protected: virtual Music_iterator* try_music_in_children (Music *) const; + Music * music_l () const; private: Interpretation_context_handle handle_; + Music * music_l_; }; + +/* + implement Class::constructor, a SCM function that + returns an encapsulated factory function. + */ +#define IMPLEMENT_CTOR_CALLBACK(Class) \ +static void * \ +Class ## _ctor (SCM) \ +{ \ + return new Class ; \ +} \ +SCM Class :: constructor_cxx_function;\ +void \ +Class ## _constructor_init () \ +{ \ + SCM s = smobify_cxx_function (& Class ## _ctor); \ + scm_permanent_object (s);\ + gh_define (#Class "::constructor", s);\ + Class :: constructor_cxx_function = s;\ +}\ +ADD_SCM_INIT_FUNC (Class ## _ctor_init, Class ## _constructor_init); + + + + + + + #endif // MUSIC_ITERATOR_HH