Normand Briere
2018-07-07 e416acb9b012b17d1efe49ad2199ea7132d874d1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package timeflow.data.time;
 
import java.util.*;
 
public class Interval
{
 
        public long start;
        public long end;
 
        public Interval(long start, long end)
        {
                this.start = start;
                this.end = end;
        }
 
        public Interval copy()
        {
                return new Interval(start, end);
        }
 
        public boolean contains(long x)
        {
                return x >= start && x <= end;
        }
 
        public boolean intersects(Interval x)
        {
                return intersects(x.start, x.end);
        }
 
        public boolean intersects(long start1, long end1)
        {
                return start1 <= end && end1 >= start;
        }
 
        public Interval subinterval(double startFraction, double endFraction)
        {
                return new Interval((long) (start + startFraction * length()),
                        (long) (start + endFraction * length()));
        }
 
        public void setTo(long start, long end)
        {
                this.start = start;
                this.end = end;
        }
 
        public void setTo(Interval t)
        {
                start = t.start;
                end = t.end;
        }
 
        public void include(long time)
        {
                start = Math.min(start, time);
                end = Math.max(end, time);
        }
 
        public void include(Interval t)
        {
                include(t.start);
                include(t.end);
        }
 
        public void expand(long amount)
        {
                start -= amount;
                end += amount;
        }
 
        public void add(long amount)
        {
                start += amount;
                end += amount;
        }
 
        public long length()
        {
                return end - start;
        }
 
        public void translateTo(long newStart)
        {
                add(newStart - start);
        }
 
        public Interval intersection(Interval i)
        {
                start = Math.max(i.start, start);
                end = Math.min(i.end, end);
                return this;
        }
 
        public void clampInside(Interval container)
        {
                if (length() > container.length())
                {
                        throw new IllegalArgumentException("Containing interval too small: " + container + " < " + this);
                }
                if (start >= container.start && end <= container.end)
                {
                        return;
                }
                add(Math.max(0, container.start - start));
                add(Math.min(0, container.end - end));
        }
 
        public String toString()
        {
                return "[Interval: From " + new Date(start) + " to " + new Date(end) + "]";
        }
}