]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/music-iterator.hh
release: 0.0.70pre
[lilypond.git] / lily / include / music-iterator.hh
1 /*
2   music-iterator.hh -- declare {Music,Chord,Voice}_iterator
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.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 "moment.hh"
16
17 class Music_iterator {
18 protected:
19     bool first_b_;
20     virtual void do_print()const;
21     
22 public:
23     Music_iterator *daddy_iter_l_;
24     NAME_MEMBERS();
25     Register_group_register *report_to_reg_l_;
26     
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*);
30     Music_iterator();
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();
36     void print()const;
37     virtual Register_group_register * get_req_acceptor_l();
38 };
39
40 // duh.
41 class Request_iterator : public Music_iterator {
42     Request  *req_l_;
43     bool last_b_;
44 public:
45     Request_iterator(Request const *);
46     NAME_MEMBERS();
47 protected:
48     virtual bool ok() const;
49     virtual Moment next_moment() const;
50     
51     virtual void do_print()const;
52     virtual void next(Moment);
53 };
54
55 class Change_iterator : public Music_iterator {
56     Change_reg * change_l_;
57 public:
58      NAME_MEMBERS();
59     virtual void next(Moment);
60     Change_iterator(Change_reg*);
61 };
62
63 class Chord_iterator : public Music_iterator
64 {
65     const Chord *chord_C_;
66     Pointer_list<Music_iterator*> children_p_list_;
67 public:
68     Chord_iterator(Chord const*);
69     NAME_MEMBERS();
70 protected:
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;
76 };
77
78 class Voice_element_iterator : public Chord_iterator {
79
80 protected:
81     virtual void construct_children();
82 public:
83     Voice_element_iterator(Voice_element*);
84     NAME_MEMBERS();
85 };
86
87
88 class Voice_iterator :  private PCursor<Music*>, public Music_iterator
89 {
90     Moment here_mom_;
91     const Voice * voice_C_;
92     Music_iterator * iter_p_;
93     void next_element();
94 public:
95     Voice_iterator(Voice const*);
96     NAME_MEMBERS();
97 protected:
98     virtual void do_print()const;
99     virtual void construct_children();
100     ~Voice_iterator();    
101     virtual void next(Moment);
102     virtual Moment next_moment()const;
103     virtual bool ok()const;
104 };
105
106 #endif // MUSIC_ITERATOR_HH