final sclass DoubleRange implements Comparable { gettable double start; gettable double end; *() {} *(double *start, double *end) {} [stdEq] double length() { ret end-start; } bool isEmpty() { ret start >= end; } double center() { ret (start+end)/2; } sS _fieldOrder = "start end"; toString { ret "[" + start + ";" + end + "]"; } @Override public int compareTo(DoubleRange r) { int c = cmp(start, r.start); if (c != 0) ret c; ret cmp(end, r.end); } bool contains(double d) { ret d >= start && d <= end; } DoubleRange sort() { ret start > end ? doubleRange(end, start) : this; } }