All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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