]> git.donarmstrong.com Git - lilypond.git/blob - flower/interval.cc
release: 0.0.15
[lilypond.git] / flower / interval.cc
1 #include <assert.h> 
2 #include <math.h>
3 #include "interval.hh"
4 #include "string.hh"
5
6
7 const Real INFTY = HUGE;
8
9 void
10 Interval::set_empty() {
11     min = INFTY;
12     max = -INFTY;
13 }
14
15 Real
16 Interval::length() const {
17     assert(max >= min);
18     return max-min;
19 }
20 void
21 Interval::unite(Interval h)
22 {
23     if (h.min<min)
24         min = h.min;
25     if (h.max>max)
26         max = h.max;
27 }
28 void
29 Interval::intersect(Interval h)
30 {
31     min = MAX(h.min, min);
32     max = MIN(h.max, max);
33 }
34 Interval
35 intersection(Interval a, Interval const&b)
36 {
37     a.intersect(b);
38     return a;
39     
40 }
41 int
42 Interval::compare(const Interval&a,Interval const&b)
43 {
44     if (a.min == b.min && a.max == b.max)
45         return 0;
46     
47     if (a.min <= b.min && a.max >= b.max)
48         return 1;
49
50     if (a.min >= b.min && a.max <= b.max)
51         return -1;
52
53     assert(false);              // not comparable
54
55     return 0;
56 }
57
58 Interval
59 intersect(Interval x, Interval const &y)
60 {
61     x.intersect(y);
62     return x;
63 }
64     
65
66 Interval::operator String() const
67 {
68     if (empty())
69         return "[empty]";
70     String s("[");
71  
72     return s + min + "," + max +"]";
73 }
74 bool
75 Interval::elt_q(Real r)
76 {
77     return r >= min && r <= max;
78 }