When we are copying things around, we have to ensure we copy Entries,
because they cannot be shared.
JIRA: CONTROLLER-2015
Change-Id: I8a484a3bf52ffeaf4f4d0e770bc77dba31dbb221
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
return of();
}
if (mutable.size() <= ARRAY_MAX_ELEMENTS) {
return of();
}
if (mutable.size() <= ARRAY_MAX_ELEMENTS) {
- return new ImmutableUnsignedLongSet(ImmutableSortedSet.copyOfSorted(mutable.trustedRanges()));
+ return new ImmutableUnsignedLongSet(ImmutableSortedSet.copyOf(mutable.copiedRanges()));
- return new ImmutableUnsignedLongSet(new TreeSet<>(mutable.trustedRanges()));
+ return new ImmutableUnsignedLongSet(new TreeSet<>(mutable.copiedRanges()));
}
public static @NonNull ImmutableUnsignedLongSet of() {
}
public static @NonNull ImmutableUnsignedLongSet of() {
}
public void add(final long longBits) {
}
public void add(final long longBits) {
- addOne(trustedRanges(), Entry.of(longBits), longBits);
+ addOne(trustedRanges(), longBits);
}
public void addAll(final UnsignedLongSet other) {
final var ranges = trustedRanges();
for (var range : other.trustedRanges()) {
if (range.lowerBits == range.upperBits) {
}
public void addAll(final UnsignedLongSet other) {
final var ranges = trustedRanges();
for (var range : other.trustedRanges()) {
if (range.lowerBits == range.upperBits) {
- addOne(ranges, range, range.lowerBits);
+ addOne(ranges, range.lowerBits);
} else {
addRange(ranges, range);
}
}
}
} else {
addRange(ranges, range);
}
}
}
- private static void addOne(final NavigableSet<Entry> ranges, final Entry range, final long longBits) {
+ private static void addOne(final NavigableSet<Entry> ranges, final long longBits) {
+ final var range = Entry.of(longBits);
// We need Iterator.remove() to perform efficient merge below
final var headIt = ranges.headSet(range, true).descendingIterator();
if (headIt.hasNext()) {
// We need Iterator.remove() to perform efficient merge below
final var headIt = ranges.headSet(range, true).descendingIterator();
if (headIt.hasNext()) {
+ ranges.add(range.copy());
}
private static void expandLower(final NavigableSet<Entry> ranges, final Entry entry, final long upperBits) {
}
private static void expandLower(final NavigableSet<Entry> ranges, final Entry entry, final long upperBits) {
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
+import java.util.Collection;
import java.util.Collections;
import java.util.NavigableSet;
import java.util.TreeSet;
import java.util.Collections;
import java.util.NavigableSet;
import java.util.TreeSet;
public abstract @NonNull ImmutableUnsignedLongSet immutableCopy();
public final @NonNull MutableUnsignedLongSet mutableCopy() {
public abstract @NonNull ImmutableUnsignedLongSet immutableCopy();
public final @NonNull MutableUnsignedLongSet mutableCopy() {
- return new MutableUnsignedLongSet(new TreeSet<>(Collections2.transform(ranges, Entry::copy)));
+ return new MutableUnsignedLongSet(new TreeSet<>(copiedRanges()));
}
public final @NonNull NavigableSet<Entry> ranges() {
}
public final @NonNull NavigableSet<Entry> ranges() {
+ final @NonNull Collection<Entry> copiedRanges() {
+ return Collections2.transform(ranges, Entry::copy);
+ }
+
@Override
public final int hashCode() {
return ranges.hashCode();
@Override
public final int hashCode() {
return ranges.hashCode();