lilypond-0.1.59
[lilypond.git] / hdr / grouping.hh
blob06b4421b0a6a22462f3256d086682550db09622e
1 /*
2 grouping.hh -- part of LilyPond
4 (c) 1996,97 Han-Wen Nienhuys
5 */
7 #ifndef GROUPING_HH
8 #define GROUPING_HH
10 #include "moment.hh"
11 #include "interval.hh"
12 #include "varray.hh"
14 typedef Interval_t<Moment> MInterval;
16 /** data structure which represents rhythmic units this is a tree. It groupes notes according to rules
18 struct Rhythmic_grouping {
19 Array<Rhythmic_grouping*> children;
20 MInterval *interval_;
22 /* *************** */
24 Array<MInterval> intervals();
25 MInterval interval()const;
26 Moment length() const;
27 void intersect(MInterval);
29 void operator=(Rhythmic_grouping const&);
30 Rhythmic_grouping(Rhythmic_grouping const&);
31 Rhythmic_grouping(MInterval, int n=1);
32 Rhythmic_grouping();
33 Rhythmic_grouping(Array<Rhythmic_grouping*>);
34 ~Rhythmic_grouping();
36 void add_child(Moment start, Moment len);
37 bool child_fit_query(Moment start);
38 void split(Rhythmic_grouping r);
39 void split(Array<MInterval>);
40 void split(int n);
42 void print() const;
43 void OK() const;
45 Array<int> generate_beams(Array<int>, int&);
47 /** multiply self to span #i#.
48 In implementation, this isn't really const, but conceptually it is.
50 void extend(MInterval i) const;
51 void translate(Moment);
52 private:
53 void init();
54 void junk();
55 void copy(Rhythmic_grouping const&);
59 Rhythmic_grouping parse_grouping(Array<int> beat_i_arr, Array<Moment> elt_length_arr);
62 #endif