public Range getSpan() { if (lowIndexedRanges.isEmpty()) { throw new IllegalStateException("Can not get span if no ranges exist"); } return lowIndexedRanges.firstEntry().getValue().span(lowIndexedRanges.lastEntry().getValue()); }
SortedRangeSet build() { Collections.sort(ranges, Comparator.comparing(Range::getLow)); NavigableMap<Marker, Range> result = new TreeMap<>(); Range current = null; for (Range next : ranges) { if (current == null) { current = next; continue; } if (current.overlaps(next) || current.getHigh().isAdjacent(next.getLow())) { current = current.span(next); } else { result.put(current.getLow(), current); current = next; } } if (current != null) { result.put(current.getLow(), current); } return new SortedRangeSet(type, result); } }
@Test public void testSpan() { assertEquals(Range.greaterThan(BIGINT, 1L).span(Range.lessThanOrEqual(BIGINT, 2L)), Range.all(BIGINT)); assertEquals(Range.greaterThan(BIGINT, 2L).span(Range.lessThanOrEqual(BIGINT, 0L)), Range.all(BIGINT)); assertEquals(Range.range(BIGINT, 1L, true, 3L, false).span(Range.equal(BIGINT, 2L)), Range.range(BIGINT, 1L, true, 3L, false)); assertEquals(Range.range(BIGINT, 1L, true, 3L, false).span(Range.range(BIGINT, 2L, false, 10L, false)), Range.range(BIGINT, 1L, true, 10L, false)); assertEquals(Range.greaterThan(BIGINT, 1L).span(Range.equal(BIGINT, 0L)), Range.greaterThanOrEqual(BIGINT, 0L)); assertEquals(Range.greaterThan(BIGINT, 1L).span(Range.greaterThanOrEqual(BIGINT, 10L)), Range.greaterThan(BIGINT, 1L)); assertEquals(Range.lessThan(BIGINT, 1L).span(Range.lessThanOrEqual(BIGINT, 1L)), Range.lessThanOrEqual(BIGINT, 1L)); assertEquals(Range.all(BIGINT).span(Range.lessThanOrEqual(BIGINT, 1L)), Range.all(BIGINT)); }
public Range getSpan() { if (lowIndexedRanges.isEmpty()) { throw new IllegalStateException("Can not get span if no ranges exist"); } return lowIndexedRanges.firstEntry().getValue().span(lowIndexedRanges.lastEntry().getValue()); }
SortedRangeSet build() { Collections.sort(ranges, Comparator.comparing(Range::getLow)); NavigableMap<Marker, Range> result = new TreeMap<>(); Range current = null; for (Range next : ranges) { if (current == null) { current = next; continue; } if (current.overlaps(next) || current.getHigh().isAdjacent(next.getLow())) { current = current.span(next); } else { result.put(current.getLow(), current); current = next; } } if (current != null) { result.put(current.getLow(), current); } return new SortedRangeSet(type, result); } }