package client.net.sf.saxon.ce.expr.z;
/**
* An immutable integer set where membership is tested algorithmically
*/
public abstract class IntCheckingSet implements IntSet {
public void clear() {
throw new UnsupportedOperationException("IntCheckingSet is immutable");
}
public IntSet copy() {
return this;
}
public IntSet mutableCopy() {
throw new UnsupportedOperationException("IntCheckingSet cannot be copied");
}
public int size() {
return Integer.MAX_VALUE;
}
public boolean isEmpty() {
return false;
}
public abstract boolean contains(int value);
public boolean remove(int value) {
throw new UnsupportedOperationException("IntCheckingSet is immutable");
}
public boolean add(int value) {
throw new UnsupportedOperationException("IntCheckingSet is immutable");
}
public IntIterator iterator() {
throw new UnsupportedOperationException("Cannot iterate over IntCheckingSet");
}
public IntSet union(final IntSet other) {
final IntSet is = this;
return new IntCheckingSet() {
@Override
public boolean contains(int value) {
return is.contains(value) || other.contains(value);
}
};
}
public IntSet intersect(final IntSet other) {
final IntSet is = this;
return new IntCheckingSet() {
@Override
public boolean contains(int value) {
return is.contains(value) && other.contains(value);
}
};
}
public IntSet except(final IntSet other) {
final IntSet is = this;
return new IntCheckingSet() {
@Override
public boolean contains(int value) {
return is.contains(value) && !other.contains(value);
}
};
}
public boolean containsAll(/*@NotNull*/ IntSet other) {
IntIterator ii = other.iterator();
while (ii.hasNext()) {
if (!contains(ii.next())) {
return false;
}
}
return true;
}
}
// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
// If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
// This Source Code Form is “Incompatible With Secondary Licenses”, as defined by the Mozilla Public License, v. 2.0.