]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/music-iterator.hh
release: 0.0.77.jcn1
[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 class Change_iterator : public Music_iterator {
49     Change_reg * change_l_;
50 public:
51      NAME_MEMBERS();
52     virtual void process_and_next(Moment);
53     Change_iterator(Change_reg*);
54 };
55
56 class Chord_iterator : public Music_iterator
57 {
58     const Chord *chord_C_;
59     Pointer_list<Music_iterator*> children_p_list_;
60 public:
61     ~Chord_iterator();
62     Chord_iterator(Chord const*);
63     NAME_MEMBERS();
64 protected:
65     virtual void do_print()const;
66     virtual void construct_children();
67     virtual void process_and_next(Moment);
68     virtual Moment next_moment()const;
69     virtual bool ok()const;
70 };
71
72 class Request_chord_iterator : public Music_iterator {
73     const Request_chord * elt_l_;
74     Moment elt_duration_;
75     bool last_b_;
76 public:
77     Request_chord_iterator(Request_chord*);
78     NAME_MEMBERS();
79
80 protected:
81     virtual void process_and_next(Moment);
82     virtual Moment next_moment()const;
83     virtual void construct_children();
84     virtual bool ok()const;
85     virtual void do_print()const;
86 };
87
88
89 class Voice_iterator :  private PCursor<Music*>, public Music_iterator
90 {
91     Moment here_mom_;
92     const Voice * voice_C_;
93     Music_iterator * iter_p_;
94     void next_element();
95 public:
96     Voice_iterator(Voice const*);
97     NAME_MEMBERS();
98 protected:
99     virtual void do_print()const;
100     virtual void construct_children();
101     ~Voice_iterator();    
102     virtual void process_and_next(Moment);
103     virtual Moment next_moment()const;
104     virtual bool ok()const;
105 };
106
107 #endif // MUSIC_ITERATOR_HH