]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/music-list.hh
e00d9633ecb3afebb2a4e69a274deab239833912
[lilypond.git] / lily / include / music-list.hh
1 /*
2   music-list.hh -- declare Music_sequence,
3   Simultaneous_music and Sequential_music
4
5   source file of the GNU LilyPond music typesetter
6
7   (c)  1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
8 */
9
10
11 #ifndef Music_sequence_HH
12 #define Music_sequence_HH
13
14 #include "music.hh"
15 #include "cons.hh"
16
17
18 class Music_list : public Cons_list<Music> 
19 {
20 public:
21   Musical_pitch do_relative_octave (Musical_pitch, bool); 
22   Music_iterator* do_rhythm (Music_iterator*); 
23   void add_music (Music*);
24   Music_list (Music_list const&);
25   Music_list ();
26 };
27
28
29 /**
30   Music can be a list of other "Music" elements
31  */
32 class Music_sequence : public Music
33 {
34 public:
35   Music_list * music_p_list_p_;
36
37   Music_sequence (Music_sequence const&);
38   Music_sequence (Music_list *l_p);
39   
40   VIRTUAL_COPY_CONS(Music);
41   Musical_pitch do_relative_octave (Musical_pitch p, bool b);
42   Music_iterator* do_rhythm (Music_iterator*);
43   virtual void transpose (Musical_pitch );
44   virtual void compress (Moment);
45   void add_music (Music *music_p);
46   int length_i () const;
47   Moment cumulative_length () const;
48   Moment maximum_length () const;
49   virtual ~Music_sequence ();
50   
51 protected:
52   virtual Musical_pitch to_relative_octave (Musical_pitch);
53   virtual Music_iterator* to_rhythm (Music_iterator*);
54   virtual void do_print() const;
55 };
56
57 /**
58   Simultaneous_music is a list of music-elements which happen simultaneously
59  */
60 class Simultaneous_music : public Music_sequence
61 {
62 public:
63   
64   VIRTUAL_COPY_CONS(Music);
65   
66   Simultaneous_music(Music_list *);
67   virtual Musical_pitch to_relative_octave (Musical_pitch);
68   virtual Music_iterator* to_rhythm (Music_iterator*);
69   virtual Moment length_mom () const;
70 };
71
72
73 /**
74   The request is a collection of Requests. A note that you enter in mudela is 
75   one Request_chord, one syllable of lyrics is one Request_chord
76  */
77 class Request_chord : public Simultaneous_music
78 {
79 public:
80   VIRTUAL_COPY_CONS(Music);
81   
82   virtual Musical_pitch to_relative_octave (Musical_pitch);
83   virtual Music_iterator* to_rhythm (Music_iterator*);
84   Request_chord();
85 };
86
87
88 /**
89   Sequential_music is a list of music-elements which are placed behind each other.
90  */
91 class Sequential_music : public Music_sequence
92 {
93 public:
94   VIRTUAL_COPY_CONS(Music);
95
96   Sequential_music(Music_list*);
97   virtual Moment length_mom () const;
98 };
99 #endif // Music_sequence_HH