@Override public SortedRangeSet intersect(ValueSet other) { SortedRangeSet otherRangeSet = checkCompatibility(other); Builder builder = new Builder(type); Iterator<Range> iterator1 = getOrderedRanges().iterator(); Iterator<Range> iterator2 = otherRangeSet.getOrderedRanges().iterator(); if (iterator1.hasNext() && iterator2.hasNext()) { Range range1 = iterator1.next(); Range range2 = iterator2.next(); while (true) { if (range1.overlaps(range2)) { builder.add(range1.intersect(range2)); } if (range1.getHigh().compareTo(range2.getHigh()) <= 0) { if (!iterator1.hasNext()) { break; } range1 = iterator1.next(); } else { if (!iterator2.hasNext()) { break; } range2 = iterator2.next(); } } } return builder.build(); }
@Override public SortedRangeSet complement() { Builder builder = new Builder(type); if (lowIndexedRanges.isEmpty()) { return builder.add(Range.all(type)).build(); } Iterator<Range> rangeIterator = lowIndexedRanges.values().iterator(); Range firstRange = rangeIterator.next(); if (!firstRange.getLow().isLowerUnbounded()) { builder.add(new Range(Marker.lowerUnbounded(type), firstRange.getLow().lesserAdjacent())); } Range previousRange = firstRange; while (rangeIterator.hasNext()) { Range currentRange = rangeIterator.next(); Marker lowMarker = previousRange.getHigh().greaterAdjacent(); Marker highMarker = currentRange.getLow().lesserAdjacent(); builder.add(new Range(lowMarker, highMarker)); previousRange = currentRange; } Range lastRange = previousRange; if (!lastRange.getHigh().isUpperUnbounded()) { builder.add(new Range(lastRange.getHigh().greaterAdjacent(), Marker.upperUnbounded(type))); } return builder.build(); }
@Override public SortedRangeSet intersect(ValueSet other) { SortedRangeSet otherRangeSet = checkCompatibility(other); Builder builder = new Builder(type); Iterator<Range> iterator1 = getOrderedRanges().iterator(); Iterator<Range> iterator2 = otherRangeSet.getOrderedRanges().iterator(); if (iterator1.hasNext() && iterator2.hasNext()) { Range range1 = iterator1.next(); Range range2 = iterator2.next(); while (true) { if (range1.overlaps(range2)) { builder.add(range1.intersect(range2)); } if (range1.getHigh().compareTo(range2.getHigh()) <= 0) { if (!iterator1.hasNext()) { break; } range1 = iterator1.next(); } else { if (!iterator2.hasNext()) { break; } range2 = iterator2.next(); } } } return builder.build(); }
@Override public SortedRangeSet complement() { Builder builder = new Builder(type); if (lowIndexedRanges.isEmpty()) { return builder.add(Range.all(type)).build(); } Iterator<Range> rangeIterator = lowIndexedRanges.values().iterator(); Range firstRange = rangeIterator.next(); if (!firstRange.getLow().isLowerUnbounded()) { builder.add(new Range(Marker.lowerUnbounded(type), firstRange.getLow().lesserAdjacent())); } Range previousRange = firstRange; while (rangeIterator.hasNext()) { Range currentRange = rangeIterator.next(); Marker lowMarker = previousRange.getHigh().greaterAdjacent(); Marker highMarker = currentRange.getLow().lesserAdjacent(); builder.add(new Range(lowMarker, highMarker)); previousRange = currentRange; } Range lastRange = previousRange; if (!lastRange.getHigh().isUpperUnbounded()) { builder.add(new Range(lastRange.getHigh().greaterAdjacent(), Marker.upperUnbounded(type))); } return builder.build(); }
@Override public SortedRangeSet union(Collection<ValueSet> valueSets) { Builder builder = new Builder(type); builder.addAll(this.getOrderedRanges()); for (ValueSet valueSet : valueSets) { builder.addAll(checkCompatibility(valueSet).getOrderedRanges()); } return builder.build(); }
@Override public SortedRangeSet union(ValueSet other) { SortedRangeSet otherRangeSet = checkCompatibility(other); return new Builder(type) .addAll(this.getOrderedRanges()) .addAll(otherRangeSet.getOrderedRanges()) .build(); }
/** * Provided Ranges are unioned together to form the SortedRangeSet */ static SortedRangeSet copyOf(Type type, Iterable<Range> ranges) { return new Builder(type).addAll(ranges).build(); }
@Override public SortedRangeSet union(Collection<ValueSet> valueSets) { Builder builder = new Builder(type); builder.addAll(this.getOrderedRanges()); for (ValueSet valueSet : valueSets) { builder.addAll(checkCompatibility(valueSet).getOrderedRanges()); } return builder.build(); }
@Override public SortedRangeSet union(ValueSet other) { SortedRangeSet otherRangeSet = checkCompatibility(other); return new Builder(type) .addAll(this.getOrderedRanges()) .addAll(otherRangeSet.getOrderedRanges()) .build(); }
@Benchmark public SortedRangeSet benchmarkBuilder(Data data) { SortedRangeSet build = new SortedRangeSet.Builder(BIGINT) .addAll(data.ranges) .build(); return build; }
/** * Provided Ranges are unioned together to form the SortedRangeSet */ static SortedRangeSet copyOf(Type type, Iterable<Range> ranges) { return new Builder(type).addAll(ranges).build(); }