2 music-iterator.hh -- declare {Music,Chord,Voice}_iterator
4 source file of the GNU LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
10 #ifndef MUSIC_ITERATOR_HH
11 #define MUSIC_ITERATOR_HH
13 #include "lily-proto.hh"
17 class Music_iterator {
20 virtual void do_print()const;
23 Music_iterator *daddy_iter_l_;
25 Translator *report_to_l_;
27 static Music_iterator* static_get_iterator_p(Music*,Translator*);
28 Music_iterator* get_iterator_p(Music*)const;
29 void set_translator(Translator*);
32 virtual void process_and_next(Moment until);
33 virtual Moment next_moment()const;
34 virtual bool ok()const;
35 virtual ~Music_iterator();
36 virtual void construct_children();
38 virtual Translator * get_req_translator_l();
42 class Request_iterator : public Music_iterator {
46 Request_iterator(Request const *);
49 virtual bool ok() const;
50 virtual Moment next_moment() const;
52 virtual void do_print()const;
53 virtual void process_and_next(Moment);
56 class Change_iterator : public Music_iterator {
57 Change_reg * change_l_;
60 virtual void process_and_next(Moment);
61 Change_iterator(Change_reg*);
64 class Chord_iterator : public Music_iterator
66 const Chord *chord_C_;
67 Pointer_list<Music_iterator*> children_p_list_;
69 Chord_iterator(Chord const*);
72 virtual void do_print()const;
73 virtual void construct_children();
74 virtual void process_and_next(Moment);
75 virtual Moment next_moment()const;
76 virtual bool ok()const;
79 class Voice_element_iterator : public Chord_iterator {
82 virtual void construct_children();
84 Voice_element_iterator(Voice_element*);
89 class Voice_iterator : private PCursor<Music*>, public Music_iterator
92 const Voice * voice_C_;
93 Music_iterator * iter_p_;
96 Voice_iterator(Voice const*);
99 virtual void do_print()const;
100 virtual void construct_children();
102 virtual void process_and_next(Moment);
103 virtual Moment next_moment()const;
104 virtual bool ok()const;
107 #endif // MUSIC_ITERATOR_HH