]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/music-iterator.hh
release: 0.0.68pre
[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     
21 public:
22     Music_iterator *daddy_iter_l_;
23     NAME_MEMBERS();
24     Register_group_register *report_to_reg_l_;
25     
26     static Music_iterator* static_get_iterator_p(Music*,Register_group_register*);
27     Music_iterator* get_iterator_p(Music*)const;
28     Music_iterator();
29     virtual void next(Moment until);
30     virtual Moment next_moment()const;
31     virtual bool ok()const;
32     virtual ~Music_iterator();
33     virtual void construct_children();
34     virtual Register_group_register * get_req_acceptor_l();
35 };
36
37 // duh.
38 class Request_iterator : public Music_iterator {
39     Request  *req_l_;
40 public:
41     Request_iterator(Request const *);
42     NAME_MEMBERS();
43 protected:
44     virtual void next(Moment);
45 };
46
47 class Change_iterator : public Music_iterator {
48     Change_reg * change_l_;
49 public:
50      NAME_MEMBERS();
51     virtual void next(Moment);
52     Change_iterator(Change_reg*);
53 };
54
55 class Chord_iterator : public Music_iterator
56 {
57     const Chord *chord_C_;
58     Pointer_list<Music_iterator*> children_p_list_;
59 public:
60     Chord_iterator(Chord const*);
61     NAME_MEMBERS();
62 protected:
63     virtual void construct_children();
64     virtual void next(Moment);
65     virtual Moment next_moment()const;
66     virtual bool ok()const;
67 };
68
69 class Voice_element_iterator : public Chord_iterator {
70
71 protected:
72     virtual void construct_children();
73 public:
74     Voice_element_iterator(Voice_element*);
75     NAME_MEMBERS();
76 };
77
78
79 class Voice_iterator :  private PCursor<Music*>, public Music_iterator
80 {
81     Moment here_mom_;
82     const Voice * voice_C_;
83     Music_iterator * iter_p_;
84     void next_element();
85 public:
86     Voice_iterator(Voice const*);
87     NAME_MEMBERS();
88 protected:
89     virtual void construct_children();
90     ~Voice_iterator();    
91     virtual void next(Moment);
92     virtual Moment next_moment()const;
93     virtual bool ok()const;
94 };
95
96 #endif // MUSIC_ITERATOR_HH