]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/music-iterator.hh
release: 0.0.74pre
[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 "varray.hh"
16 #include "moment.hh"
17
18 class Music_iterator {
19 protected:
20     bool first_b_;
21     virtual void do_print()const;
22     
23 public:
24     Music_iterator *daddy_iter_l_;
25     NAME_MEMBERS();
26     Array<Translator *>report_to_l_arr_;
27
28     Translator *report_to_l()const;
29     
30     static Music_iterator* static_get_iterator_p(Music*,Translator*);
31     Music_iterator* get_iterator_p(Music*)const;
32     void set_translator(Translator*);
33     void push_translator(Translator*);
34     void pop_translator();
35
36     
37     Music_iterator();
38     
39     virtual void process_and_next(Moment until);
40     virtual Moment next_moment()const;
41     virtual bool ok()const;
42     virtual ~Music_iterator();
43     virtual void construct_children();
44     void print()const;
45     virtual Translator * get_req_translator_l();
46 };
47
48 // duh.
49 class Request_iterator : public Music_iterator {
50     Request  *req_l_;
51     bool last_b_;
52 public:
53     Request_iterator(Request const *);
54     NAME_MEMBERS();
55 protected:
56     virtual bool ok() const;
57     virtual Moment next_moment() const;
58     
59     virtual void do_print()const;
60     virtual void process_and_next(Moment);
61 };
62
63 class Change_iterator : public Music_iterator {
64     Change_reg * change_l_;
65 public:
66      NAME_MEMBERS();
67     virtual void process_and_next(Moment);
68     Change_iterator(Change_reg*);
69 };
70
71 class Chord_iterator : public Music_iterator
72 {
73     const Chord *chord_C_;
74     Pointer_list<Music_iterator*> children_p_list_;
75 public:
76     Chord_iterator(Chord const*);
77     NAME_MEMBERS();
78 protected:
79     virtual void do_print()const;
80     virtual void construct_children();
81     virtual void process_and_next(Moment);
82     virtual Moment next_moment()const;
83     virtual bool ok()const;
84 };
85
86 class Voice_element_iterator : public Chord_iterator {
87
88 protected:
89     virtual void construct_children();
90 public:
91     Voice_element_iterator(Voice_element*);
92     NAME_MEMBERS();
93 };
94
95
96 class Voice_iterator :  private PCursor<Music*>, public Music_iterator
97 {
98     Moment here_mom_;
99     const Voice * voice_C_;
100     Music_iterator * iter_p_;
101     void next_element();
102 public:
103     Voice_iterator(Voice const*);
104     NAME_MEMBERS();
105 protected:
106     virtual void do_print()const;
107     virtual void construct_children();
108     ~Voice_iterator();    
109     virtual void process_and_next(Moment);
110     virtual Moment next_moment()const;
111     virtual bool ok()const;
112 };
113
114 #endif // MUSIC_ITERATOR_HH