X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fmusic-iterator.hh;h=bb095df71869e84bbd25d84042cd30adab580e79;hb=528d28e079419b3a45098b42b8b2b4eb9f1b15b1;hp=c2613bdbdfeac98890537bab6df17b4359a6bc8c;hpb=9e781b7dc83b60a543ce218aa1a5f139f74c760f;p=lilypond.git diff --git a/lily/include/music-iterator.hh b/lily/include/music-iterator.hh index c2613bdbdf..bb095df718 100644 --- a/lily/include/music-iterator.hh +++ b/lily/include/music-iterator.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2014 Han-Wen Nienhuys + Copyright (C) 1997--2015 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -43,10 +43,10 @@ ok () -- events left ? pending_mom () -- time tag of the next event to be processed. - PRECONDITION: this->ok () holds. + PRECONDITION: ok () holds. process (M) -- process all at M (Precondition: no events exist - before M, this->ok () holds). Side-effects: + before M, ok () holds). Side-effects: * This removes all events at M from the pending queue. @@ -58,23 +58,31 @@ merge pending_moment and process? */ -class Music_iterator +class Music_iterator : public Smob { +public: + int print_smob (SCM, scm_print_state *) const; + SCM mark_smob () const; + static const char * const type_p_name_; + virtual ~Music_iterator (); protected: Moment music_length_; Moment start_mom_; DECLARE_CLASSNAME (Music_iterator); - DECLARE_SMOBS (Music_iterator); - Music_iterator (Music_iterator const &); +private: + Music_iterator (Music_iterator const &); // Do not define! Not copyable! public: Moment music_get_length () const; + // music_start_mom () is calculated relative to the time where the + // iterator occurs in the music stream, so it will usually be + // non-zero only for expressions starting with grace notes. Moment music_start_mom () const; Music_iterator (); void report_event (Music *); - Context *get_outlet () const; - void set_context (Context *); + virtual Context *get_outlet () const; + virtual void set_context (Context *); static SCM get_static_get_iterator (Music *mus); void init_context (Music *, Context *); void quit (); @@ -84,6 +92,8 @@ public: virtual Moment pending_moment () const; virtual bool ok () const; virtual bool run_always () const; + // process is called with a time relative to the iterator start, so + // usually the last processed moment is the same as music_get_length. virtual void process (Moment until); virtual void derived_mark () const; virtual void construct_children (); @@ -113,6 +123,5 @@ bool is_child_context (Context *me, Context *child); return c->unprotect (); \ } -DECLARE_UNSMOB (Music_iterator, iterator); #endif // MUSIC_ITERATOR_HH