srecord TimestampRange(Timestamp start, Timestamp end) is Comparable { *(long start, long end) { this(Timestamp(start), Timestamp(end)); } Timestamp start aka startTime() { ret start; } Timestamp end aka endTime() { ret end; } selfType start aka startTime(Timestamp start) { this.start = start; this; } selfType end aka endTime(Timestamp end) { this.end = end; this; } bool complete() { ret start != null && end != null; } Duration duration() { ret !complete() ? null : end.minusAsDuration(start); } long length() { ret !complete() ? 0 : end.unixDate()-start.unixDate(); } toString { ret start + " to " + end; } public int compareTo(TimestampRange r) { ret cmp(start, r.start); } L toList() { ret ll(start, end); } }