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

org.infinispan.commons.util.OffsetIntSet Maven / Gradle / Ivy

There is a newer version: 15.1.0.Dev04
Show newest version
package org.infinispan.commons.util;

import java.util.BitSet;
import java.util.Collection;
import java.util.Objects;
import java.util.PrimitiveIterator;
import java.util.stream.IntStream;

/**
 * Read-only representation of all the integers between an open interval.
 * 

* This is a more general version of {@link RangeSet}. *

* * @author José Bolina * @since 15.0 * @see RangeSet */ class OffsetIntSet extends AbstractImmutableIntSet { private final int start; private final int end; OffsetIntSet(int start, int exclusiveEnd) { assert exclusiveEnd >= start : "End should be greater or equal than start"; this.start = start; this.end = exclusiveEnd; } @Override public boolean contains(int i) { return i >= start && i < end; } @Override public boolean containsAll(IntSet set) { if (set instanceof OffsetIntSet) { OffsetIntSet other = (OffsetIntSet) set; return other.start >= start && other.end <= end; } PrimitiveIterator.OfInt it = set.iterator(); while (it.hasNext()) { if (!contains(it.nextInt())) return false; } return true; } @Override public int size() { return end - start; } @Override public boolean isEmpty() { return start == end; } @Override public boolean contains(Object o) { return o instanceof Integer && contains((int) o); } @Override public PrimitiveIterator.OfInt iterator() { return intStream().iterator(); } @Override public Object[] toArray() { int size = size(); Object[] array = new Object[size]; for (int i = 0; i < size; i++) { array[i] = start + i; } return array; } @Override public T[] toArray(T[] a) { int size = size(); T[] array = a.length >= size ? a : (T[]) java.lang.reflect.Array.newInstance(a.getClass().getComponentType(), size); for (int i = 0; i < size; i++) { array[i] = (T) Integer.valueOf(i); } return array; } @Override public boolean containsAll(Collection c) { if (c instanceof IntSet) return containsAll((IntSet) c); for (Object o : c) { if (!contains(o)) return false; } return true; } @Override public IntStream intStream() { return IntStream.range(start, end); } @Override public byte[] toBitSet() { int size = size(); if (size == 0) { return Util.EMPTY_BYTE_ARRAY; } BitSet bs = new BitSet(); bs.flip(start, end); return bs.toByteArray(); } @Override public int nextSetBit(int fromIndex) { if (fromIndex <= start) return start; if (fromIndex >= end) return -1; return fromIndex; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (!(obj instanceof Collection)) return false; Collection other = (Collection) obj; return size() == other.size() && containsAll(other); } @Override public int hashCode() { return Objects.hash(start, end); } @Override public String toString() { return "{" + start + "-" + end + "}"; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy