misc/persolijn

osm-routing/src/main/java/osm/routing/entity/Interval.java in master
Repositories | Summary | Log | Files

Interval.java (1666B) download


 1package osm.routing.entity;
 2
 3public class Interval {
 4    public static final long DEFAULT_INTERVAL = 30 * 60; // 30 min
 5
 6    public static enum IntervalFinal {
 7        START,
 8        END,
 9        NONE
10    }
11
12    public final IntervalFinal isFinal;
13    public final long start;
14    public final long end;
15
16    public Interval(IntervalFinal isFinal, long start, long end) {
17        this.isFinal = isFinal;
18        this.start = start;
19        this.end = end;
20    }
21
22    public static Interval fromInterval(IntervalFinal isFinal, long time) {
23        return fromInterval(isFinal, time, DEFAULT_INTERVAL);
24    }
25
26    public static Interval fromInterval(IntervalFinal isFinal, long time, long offset) {
27        long start, end;
28        switch (isFinal) {
29            case START:
30                start = time;
31                end = time + offset;
32                break;
33            case END:
34                start = time - offset;
35                end = time;
36                break;
37            default: // NONE
38                start = time - (offset / 2);
39                end = time + (offset / 2);
40        }
41        return new Interval(isFinal, start, end);
42    }
43
44    public boolean isBetweenTime(long time) {
45        return switch (isFinal) {
46            case START -> time > start;
47            case END -> time < end;
48            case NONE -> true;
49        };
50    }
51
52    public long outsideTime(long time) {
53        if (!isBetweenTime(time))
54            return -1;
55
56        return Math.max(0, switch (isFinal) {
57            case START -> time - end;
58            case END -> start - time;
59            case NONE -> Math.max(start - time, time - end);
60        });
61    }
62
63}