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 Register_group_register *report_to_reg_l_;
27 static Music_iterator* static_get_iterator_p(Music*,Register_group_register*);
28 Music_iterator* get_iterator_p(Music*)const;
29 void set_reg(Register_group_register*);
31 virtual void next(Moment until);
32 virtual Moment next_moment()const;
33 virtual bool ok()const;
34 virtual ~Music_iterator();
35 virtual void construct_children();
37 virtual Register_group_register * get_req_acceptor_l();
41 class Request_iterator : public Music_iterator {
45 Request_iterator(Request const *);
48 virtual bool ok() const;
49 virtual Moment next_moment() const;
51 virtual void do_print()const;
52 virtual void next(Moment);
55 class Change_iterator : public Music_iterator {
56 Change_reg * change_l_;
59 virtual void next(Moment);
60 Change_iterator(Change_reg*);
63 class Chord_iterator : public Music_iterator
65 const Chord *chord_C_;
66 Pointer_list<Music_iterator*> children_p_list_;
68 Chord_iterator(Chord const*);
71 virtual void do_print()const;
72 virtual void construct_children();
73 virtual void next(Moment);
74 virtual Moment next_moment()const;
75 virtual bool ok()const;
78 class Voice_element_iterator : public Chord_iterator {
81 virtual void construct_children();
83 Voice_element_iterator(Voice_element*);
88 class Voice_iterator : private PCursor<Music*>, public Music_iterator
91 const Voice * voice_C_;
92 Music_iterator * iter_p_;
95 Voice_iterator(Voice const*);
98 virtual void do_print()const;
99 virtual void construct_children();
101 virtual void next(Moment);
102 virtual Moment next_moment()const;
103 virtual bool ok()const;
106 #endif // MUSIC_ITERATOR_HH