X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fmusic-iterator.hh;h=810d230aac279b447a0c7bd989a1093141567221;hb=ec7f5aca60d3df0c22a51bd0c5b0274e0e5994f3;hp=c2613bdbdfeac98890537bab6df17b4359a6bc8c;hpb=0b544cfb7332615ef809b71b57ab656741311ae1;p=lilypond.git diff --git a/lily/include/music-iterator.hh b/lily/include/music-iterator.hh index c2613bdbdf..810d230aac 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 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