]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/music-iterator.hh
release: 0.1.8
[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    Array<Translator *>report_to_l_arr_;
20    void push_translator (Translator*);
21     void pop_translator();
22 protected:
23     bool first_b_;
24     virtual void do_print()const;
25     
26     virtual Translator * get_req_translator_l();
27     Music_iterator* get_iterator_p (Music*)const;
28     void set_translator (Translator*);
29     Music_iterator *daddy_iter_l_;
30     
31 public:
32     Translator *report_to_l()const;
33     DECLARE_MY_RUNTIME_TYPEINFO;
34  
35     static Music_iterator* static_get_iterator_p (Music*,Translator*);
36     Music_iterator();
37     
38     virtual void process_and_next (Moment until);
39     virtual Moment next_moment()const;
40     virtual bool ok()const;
41     virtual ~Music_iterator();
42     virtual void construct_children();
43     void print()const;
44 };
45
46
47 class Chord_iterator : public Music_iterator
48 {
49     const Chord *chord_C_;
50     Pointer_list<Music_iterator*> children_p_list_;
51 public:
52     ~Chord_iterator();
53     Chord_iterator (Chord const*);
54     DECLARE_MY_RUNTIME_TYPEINFO;
55 protected:
56     virtual void do_print()const;
57     virtual void construct_children();
58     virtual void process_and_next (Moment);
59     virtual Moment next_moment()const;
60     virtual bool ok()const;
61 };
62
63 class Request_chord_iterator : public Music_iterator {
64     const Request_chord * elt_l_;
65     Moment elt_duration_;
66     bool last_b_;
67 public:
68     Request_chord_iterator (Request_chord*);
69     DECLARE_MY_RUNTIME_TYPEINFO;
70
71 protected:
72     virtual void process_and_next (Moment);
73     virtual Moment next_moment()const;
74     virtual void construct_children();
75     virtual bool ok()const;
76     virtual void do_print()const;
77 };
78
79
80 class Voice_iterator :  private PCursor<Music*>, public Music_iterator
81 {
82     Moment here_mom_;
83     const Voice * voice_C_;
84     Music_iterator * iter_p_;
85     void start_next_element();
86     void leave_element();
87     void set_voice_translator();
88     
89 public:
90     Voice_iterator (Voice const*);
91     DECLARE_MY_RUNTIME_TYPEINFO;
92 protected:
93     virtual void do_print()const;
94     virtual void construct_children();
95     ~Voice_iterator();    
96     virtual void process_and_next (Moment);
97     virtual Moment next_moment()const;
98     virtual bool ok()const;
99 };
100
101 #endif // MUSIC_ITERATOR_HH