]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/music-iterator.hh
release: 1.0.15
[lilypond.git] / lily / include / music-iterator.hh
1 /*
2   music-iterator.hh -- declare Music_iterator
3
4   source file of the GNU LilyPond music typesetter
5
6   (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7 */
8
9
10 #ifndef MUSIC_ITERATOR_HH
11 #define MUSIC_ITERATOR_HH
12
13 #include "lily-proto.hh"
14 #include "plist.hh"
15 #include "array.hh"
16 #include "moment.hh"
17 #include "virtual-methods.hh"
18
19 class Music_iterator {
20   Array<Translator_group*>report_to_l_arr_;
21   void push_translator (Translator_group*);
22   void pop_translator();
23 protected:
24   Music const * music_l_;
25   bool first_b_;
26   virtual void do_print() const;
27     
28   virtual Translator_group* get_req_translator_l();
29   Music_iterator* get_iterator_p (Music const*) const;
30   void set_translator (Translator_group*);
31   virtual void do_process_and_next (Moment until);
32   void inherit_info (Music_iterator const *parent);
33 public:
34   Translator_group*report_to_l() const;
35   DECLARE_MY_RUNTIME_TYPEINFO;
36  
37   static Music_iterator* static_get_iterator_p (Music const*,Translator_group*);
38   Music_iterator();
39     
40   virtual Moment next_moment() const;
41   virtual bool ok() const;
42   virtual ~Music_iterator();
43   void process_and_next (Moment until);
44
45   /**
46     Construct sub-iterators, and set the translator to 
47     report to
48    */
49   virtual void construct_children();
50   void print() const;
51 };
52
53 #endif // MUSIC_ITERATOR_HH