]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/music-iterator.hh
release: 0.0.73pre
[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     Translator *report_to_l_;
26     
27     static Music_iterator* static_get_iterator_p(Music*,Translator*);
28     Music_iterator* get_iterator_p(Music*)const;
29     void set_translator(Translator*);
30     Music_iterator();
31     
32     virtual void process_and_next(Moment until);
33     virtual Moment next_moment()const;
34     virtual bool ok()const;
35     virtual ~Music_iterator();
36     virtual void construct_children();
37     void print()const;
38     virtual Translator * get_req_translator_l();
39 };
40
41 // duh.
42 class Request_iterator : public Music_iterator {
43     Request  *req_l_;
44     bool last_b_;
45 public:
46     Request_iterator(Request const *);
47     NAME_MEMBERS();
48 protected:
49     virtual bool ok() const;
50     virtual Moment next_moment() const;
51     
52     virtual void do_print()const;
53     virtual void process_and_next(Moment);
54 };
55
56 class Change_iterator : public Music_iterator {
57     Change_reg * change_l_;
58 public:
59      NAME_MEMBERS();
60     virtual void process_and_next(Moment);
61     Change_iterator(Change_reg*);
62 };
63
64 class Chord_iterator : public Music_iterator
65 {
66     const Chord *chord_C_;
67     Pointer_list<Music_iterator*> children_p_list_;
68 public:
69     Chord_iterator(Chord const*);
70     NAME_MEMBERS();
71 protected:
72     virtual void do_print()const;
73     virtual void construct_children();
74     virtual void process_and_next(Moment);
75     virtual Moment next_moment()const;
76     virtual bool ok()const;
77 };
78
79 class Voice_element_iterator : public Chord_iterator {
80
81 protected:
82     virtual void construct_children();
83 public:
84     Voice_element_iterator(Voice_element*);
85     NAME_MEMBERS();
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