
org.aksw.commons.collection.rangeset.RangeSetComplement Maven / Gradle / Ivy
package org.aksw.commons.collection.rangeset;
import java.util.NoSuchElementException;
import java.util.Set;
import com.google.common.collect.Iterables;
import com.google.common.collect.Range;
import com.google.common.collect.RangeSet;
public class RangeSetComplement>
implements RangeSet
{
protected RangeSet rangeSet;
protected Range restriction;
public RangeSetComplement(RangeSet rangeSet, Range restriction) {
super();
this.rangeSet = rangeSet;
this.restriction = restriction;
}
@Override
public boolean contains(T value) {
return !rangeSet.contains(value);
}
@Override
public Range rangeContaining(T value) {
Range result = RangeSetUtils.getRangesBeforeAndAfter(this, value).stream().filter(range -> range.contains(value)).findFirst().orElse(null);
return result;
}
@Override
public boolean intersects(Range otherRange) {
return !subRangeSet(otherRange).isEmpty();
}
@Override
public boolean encloses(Range otherRange) {
throw new UnsupportedOperationException();
}
@Override
public boolean enclosesAll(RangeSet other) {
throw new UnsupportedOperationException();
}
@Override
public boolean isEmpty() {
return !rangeSet.isEmpty();
}
@Override
public Range span() {
Range result;
if (isEmpty()) {
throw new NoSuchElementException();
} else {
Range first = Iterables.getFirst(asRanges(), null);
Range last = Iterables.getFirst(asDescendingSetOfRanges(), null);
result = first.span(last);
}
return result;
}
@Override
public Set> asRanges() {
return RangeSetUtils.complementAsRanges(rangeSet, restriction);
}
@Override
public Set> asDescendingSetOfRanges() {
return RangeSetUtils.complementAsDescendingSetOfRanges(rangeSet, restriction);
}
@Override
public RangeSet complement() {
throw new UnsupportedOperationException();
// FIXME Needs to consider restriction
// return rangeSet;
}
@Override
public RangeSet subRangeSet(Range view) {
return new RangeSetComplement<>(rangeSet, view);
}
// FIXME Methods below need to validate against restriction
@Override
public void add(Range range) {
rangeSet.remove(range);
}
@Override
public void remove(Range range) {
rangeSet.add(range);
}
@Override
public void clear() {
rangeSet.add(Range.all());
}
@Override
public void addAll(RangeSet other) {
rangeSet.removeAll(other);
}
@Override
public void removeAll(RangeSet other) {
rangeSet.addAll(other);
}
@Override
public String toString() {
return asRanges().toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy