jimu-decompiled/sources/com/google/common/collect/TreeRangeSet.java
2025-05-13 19:24:51 +02:00

778 lines
33 KiB
Java

package com.google.common.collect;
import com.google.common.base.MoreObjects;
import com.google.common.base.Preconditions;
import java.io.Serializable;
import java.lang.Comparable;
import java.util.Collection;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Map;
import java.util.NavigableMap;
import java.util.NoSuchElementException;
import java.util.Set;
import java.util.TreeMap;
/* loaded from: classes.dex */
public class TreeRangeSet<C extends Comparable<?>> extends AbstractRangeSet<C> implements Serializable {
private transient Set<Range<C>> asDescendingSetOfRanges;
private transient Set<Range<C>> asRanges;
private transient RangeSet<C> complement;
final NavigableMap<Cut<C>, Range<C>> rangesByLowerBound;
final class AsRanges extends ForwardingCollection<Range<C>> implements Set<Range<C>> {
final Collection<Range<C>> a;
AsRanges(TreeRangeSet treeRangeSet, Collection<Range<C>> collection) {
this.a = collection;
}
@Override // java.util.Collection, java.util.Set
public boolean equals(Object obj) {
return Sets.a(this, obj);
}
@Override // java.util.Collection, java.util.Set
public int hashCode() {
return Sets.a(this);
}
/* JADX INFO: Access modifiers changed from: protected */
@Override // com.google.common.collect.ForwardingCollection, com.google.common.collect.ForwardingObject
public Collection<Range<C>> delegate() {
return this.a;
}
}
private final class Complement extends TreeRangeSet<C> {
Complement() {
super(new ComplementRangesByLowerBound(TreeRangeSet.this.rangesByLowerBound));
}
@Override // com.google.common.collect.TreeRangeSet, com.google.common.collect.AbstractRangeSet
public void add(Range<C> range) {
TreeRangeSet.this.remove(range);
}
@Override // com.google.common.collect.TreeRangeSet, com.google.common.collect.RangeSet
public RangeSet<C> complement() {
return TreeRangeSet.this;
}
@Override // com.google.common.collect.TreeRangeSet, com.google.common.collect.AbstractRangeSet
public boolean contains(C c) {
return !TreeRangeSet.this.contains(c);
}
@Override // com.google.common.collect.TreeRangeSet, com.google.common.collect.AbstractRangeSet
public void remove(Range<C> range) {
TreeRangeSet.this.add(range);
}
}
private static final class ComplementRangesByLowerBound<C extends Comparable<?>> extends AbstractNavigableMap<Cut<C>, Range<C>> {
private final NavigableMap<Cut<C>, Range<C>> a;
private final NavigableMap<Cut<C>, Range<C>> b;
private final Range<Cut<C>> c;
ComplementRangesByLowerBound(NavigableMap<Cut<C>, Range<C>> navigableMap) {
this(navigableMap, Range.all());
}
@Override // java.util.NavigableMap
/* renamed from: b, reason: merged with bridge method [inline-methods] */
public NavigableMap<Cut<C>, Range<C>> tailMap(Cut<C> cut, boolean z) {
return a(Range.downTo(cut, BoundType.forBoolean(z)));
}
@Override // java.util.SortedMap
public Comparator<? super Cut<C>> comparator() {
return Ordering.c();
}
@Override // java.util.AbstractMap, java.util.Map
public boolean containsKey(Object obj) {
return get(obj) != null;
}
@Override // com.google.common.collect.Maps.IteratorBasedAbstractMap
Iterator<Map.Entry<Cut<C>, Range<C>>> entryIterator() {
Collection<Range<C>> values;
final Cut cut;
if (this.c.hasLowerBound()) {
values = this.b.tailMap(this.c.lowerEndpoint(), this.c.lowerBoundType() == BoundType.CLOSED).values();
} else {
values = this.b.values();
}
final PeekingIterator f = Iterators.f(values.iterator());
if (this.c.contains(Cut.g()) && (!f.hasNext() || ((Range) f.peek()).lowerBound != Cut.g())) {
cut = Cut.g();
} else {
if (!f.hasNext()) {
return Iterators.a();
}
cut = ((Range) f.next()).upperBound;
}
return new AbstractIterator<Map.Entry<Cut<C>, Range<C>>>() { // from class: com.google.common.collect.TreeRangeSet.ComplementRangesByLowerBound.1
Cut<C> c;
{
this.c = cut;
}
/* JADX INFO: Access modifiers changed from: protected */
@Override // com.google.common.collect.AbstractIterator
public Map.Entry<Cut<C>, Range<C>> a() {
Range create;
if (ComplementRangesByLowerBound.this.c.upperBound.a(this.c) || this.c == Cut.f()) {
return (Map.Entry) b();
}
if (f.hasNext()) {
Range range = (Range) f.next();
create = Range.create(this.c, range.lowerBound);
this.c = range.upperBound;
} else {
create = Range.create(this.c, Cut.f());
this.c = Cut.f();
}
return Maps.a(create.lowerBound, create);
}
};
}
@Override // com.google.common.collect.Maps.IteratorBasedAbstractMap, java.util.AbstractMap, java.util.Map
public int size() {
return Iterators.h(entryIterator());
}
private ComplementRangesByLowerBound(NavigableMap<Cut<C>, Range<C>> navigableMap, Range<Cut<C>> range) {
this.a = navigableMap;
this.b = new RangesByUpperBound(navigableMap);
this.c = range;
}
private NavigableMap<Cut<C>, Range<C>> a(Range<Cut<C>> range) {
if (!this.c.isConnected(range)) {
return ImmutableSortedMap.of();
}
return new ComplementRangesByLowerBound(this.a, range.intersection(this.c));
}
@Override // java.util.AbstractMap, java.util.Map
public Range<C> get(Object obj) {
if (obj instanceof Cut) {
try {
Cut<C> cut = (Cut) obj;
Map.Entry<Cut<C>, Range<C>> firstEntry = tailMap(cut, true).firstEntry();
if (firstEntry != null && firstEntry.getKey().equals(cut)) {
return firstEntry.getValue();
}
} catch (ClassCastException unused) {
}
}
return null;
}
@Override // java.util.NavigableMap
/* renamed from: a, reason: merged with bridge method [inline-methods] */
public NavigableMap<Cut<C>, Range<C>> subMap(Cut<C> cut, boolean z, Cut<C> cut2, boolean z2) {
return a(Range.range(cut, BoundType.forBoolean(z), cut2, BoundType.forBoolean(z2)));
}
@Override // java.util.NavigableMap
/* renamed from: a, reason: merged with bridge method [inline-methods] */
public NavigableMap<Cut<C>, Range<C>> headMap(Cut<C> cut, boolean z) {
return a(Range.upTo(cut, BoundType.forBoolean(z)));
}
@Override // com.google.common.collect.AbstractNavigableMap
Iterator<Map.Entry<Cut<C>, Range<C>>> a() {
Cut<C> f;
Cut<C> higherKey;
if (this.c.hasUpperBound()) {
f = this.c.upperEndpoint();
} else {
f = Cut.f();
}
final PeekingIterator f2 = Iterators.f(this.b.headMap(f, this.c.hasUpperBound() && this.c.upperBoundType() == BoundType.CLOSED).descendingMap().values().iterator());
if (f2.hasNext()) {
if (((Range) f2.peek()).upperBound == Cut.f()) {
higherKey = ((Range) f2.next()).lowerBound;
} else {
higherKey = this.a.higherKey(((Range) f2.peek()).upperBound);
}
} else if (this.c.contains(Cut.g()) && !this.a.containsKey(Cut.g())) {
higherKey = this.a.higherKey(Cut.g());
} else {
return Iterators.a();
}
final Cut cut = (Cut) MoreObjects.a(higherKey, Cut.f());
return new AbstractIterator<Map.Entry<Cut<C>, Range<C>>>() { // from class: com.google.common.collect.TreeRangeSet.ComplementRangesByLowerBound.2
Cut<C> c;
{
this.c = cut;
}
/* JADX INFO: Access modifiers changed from: protected */
@Override // com.google.common.collect.AbstractIterator
public Map.Entry<Cut<C>, Range<C>> a() {
if (this.c == Cut.g()) {
return (Map.Entry) b();
}
if (f2.hasNext()) {
Range range = (Range) f2.next();
Range create = Range.create(range.upperBound, this.c);
this.c = range.lowerBound;
if (ComplementRangesByLowerBound.this.c.lowerBound.a((Cut<C>) create.lowerBound)) {
return Maps.a(create.lowerBound, create);
}
} else if (ComplementRangesByLowerBound.this.c.lowerBound.a((Cut<C>) Cut.g())) {
Range create2 = Range.create(Cut.g(), this.c);
this.c = Cut.g();
return Maps.a(Cut.g(), create2);
}
return (Map.Entry) b();
}
};
}
}
static final class RangesByUpperBound<C extends Comparable<?>> extends AbstractNavigableMap<Cut<C>, Range<C>> {
private final NavigableMap<Cut<C>, Range<C>> a;
private final Range<Cut<C>> b;
RangesByUpperBound(NavigableMap<Cut<C>, Range<C>> navigableMap) {
this.a = navigableMap;
this.b = Range.all();
}
@Override // java.util.NavigableMap
/* renamed from: b, reason: merged with bridge method [inline-methods] */
public NavigableMap<Cut<C>, Range<C>> tailMap(Cut<C> cut, boolean z) {
return a(Range.downTo(cut, BoundType.forBoolean(z)));
}
@Override // java.util.SortedMap
public Comparator<? super Cut<C>> comparator() {
return Ordering.c();
}
@Override // java.util.AbstractMap, java.util.Map
public boolean containsKey(Object obj) {
return get(obj) != null;
}
@Override // com.google.common.collect.Maps.IteratorBasedAbstractMap
Iterator<Map.Entry<Cut<C>, Range<C>>> entryIterator() {
final Iterator<Range<C>> it;
if (this.b.hasLowerBound()) {
Map.Entry lowerEntry = this.a.lowerEntry(this.b.lowerEndpoint());
it = lowerEntry == null ? this.a.values().iterator() : this.b.lowerBound.a((Cut<Cut<C>>) ((Range) lowerEntry.getValue()).upperBound) ? this.a.tailMap(lowerEntry.getKey(), true).values().iterator() : this.a.tailMap(this.b.lowerEndpoint(), true).values().iterator();
} else {
it = this.a.values().iterator();
}
return new AbstractIterator<Map.Entry<Cut<C>, Range<C>>>() { // from class: com.google.common.collect.TreeRangeSet.RangesByUpperBound.1
/* JADX INFO: Access modifiers changed from: protected */
@Override // com.google.common.collect.AbstractIterator
public Map.Entry<Cut<C>, Range<C>> a() {
if (!it.hasNext()) {
return (Map.Entry) b();
}
Range range = (Range) it.next();
return RangesByUpperBound.this.b.upperBound.a((Cut<C>) range.upperBound) ? (Map.Entry) b() : Maps.a(range.upperBound, range);
}
};
}
@Override // java.util.AbstractMap, java.util.Map
public boolean isEmpty() {
return this.b.equals(Range.all()) ? this.a.isEmpty() : !entryIterator().hasNext();
}
@Override // com.google.common.collect.Maps.IteratorBasedAbstractMap, java.util.AbstractMap, java.util.Map
public int size() {
return this.b.equals(Range.all()) ? this.a.size() : Iterators.h(entryIterator());
}
private NavigableMap<Cut<C>, Range<C>> a(Range<Cut<C>> range) {
return range.isConnected(this.b) ? new RangesByUpperBound(this.a, range.intersection(this.b)) : ImmutableSortedMap.of();
}
@Override // java.util.AbstractMap, java.util.Map
public Range<C> get(Object obj) {
Map.Entry<Cut<C>, Range<C>> lowerEntry;
if (obj instanceof Cut) {
try {
Cut<C> cut = (Cut) obj;
if (this.b.contains(cut) && (lowerEntry = this.a.lowerEntry(cut)) != null && lowerEntry.getValue().upperBound.equals(cut)) {
return lowerEntry.getValue();
}
} catch (ClassCastException unused) {
}
}
return null;
}
private RangesByUpperBound(NavigableMap<Cut<C>, Range<C>> navigableMap, Range<Cut<C>> range) {
this.a = navigableMap;
this.b = range;
}
@Override // java.util.NavigableMap
/* renamed from: a, reason: merged with bridge method [inline-methods] */
public NavigableMap<Cut<C>, Range<C>> subMap(Cut<C> cut, boolean z, Cut<C> cut2, boolean z2) {
return a(Range.range(cut, BoundType.forBoolean(z), cut2, BoundType.forBoolean(z2)));
}
@Override // java.util.NavigableMap
/* renamed from: a, reason: merged with bridge method [inline-methods] */
public NavigableMap<Cut<C>, Range<C>> headMap(Cut<C> cut, boolean z) {
return a(Range.upTo(cut, BoundType.forBoolean(z)));
}
@Override // com.google.common.collect.AbstractNavigableMap
Iterator<Map.Entry<Cut<C>, Range<C>>> a() {
Collection<Range<C>> values;
if (this.b.hasUpperBound()) {
values = this.a.headMap(this.b.upperEndpoint(), false).descendingMap().values();
} else {
values = this.a.descendingMap().values();
}
final PeekingIterator f = Iterators.f(values.iterator());
if (f.hasNext() && this.b.upperBound.a((Cut<Cut<C>>) ((Range) f.peek()).upperBound)) {
f.next();
}
return new AbstractIterator<Map.Entry<Cut<C>, Range<C>>>() { // from class: com.google.common.collect.TreeRangeSet.RangesByUpperBound.2
/* JADX INFO: Access modifiers changed from: protected */
@Override // com.google.common.collect.AbstractIterator
public Map.Entry<Cut<C>, Range<C>> a() {
if (!f.hasNext()) {
return (Map.Entry) b();
}
Range range = (Range) f.next();
return RangesByUpperBound.this.b.lowerBound.a((Cut<C>) range.upperBound) ? Maps.a(range.upperBound, range) : (Map.Entry) b();
}
};
}
}
private final class SubRangeSet extends TreeRangeSet<C> {
private final Range<C> a;
/* JADX WARN: Illegal instructions before constructor call */
/*
Code decompiled incorrectly, please refer to instructions dump.
To view partially-correct code enable 'Show inconsistent code' option in preferences
*/
SubRangeSet(com.google.common.collect.Range<C> r5) {
/*
r3 = this;
com.google.common.collect.TreeRangeSet.this = r4
com.google.common.collect.TreeRangeSet$SubRangeSetRangesByLowerBound r0 = new com.google.common.collect.TreeRangeSet$SubRangeSetRangesByLowerBound
com.google.common.collect.Range r1 = com.google.common.collect.Range.all()
java.util.NavigableMap<com.google.common.collect.Cut<C extends java.lang.Comparable<?>>, com.google.common.collect.Range<C extends java.lang.Comparable<?>>> r4 = r4.rangesByLowerBound
r2 = 0
r0.<init>(r1, r5, r4)
r3.<init>(r0)
r3.a = r5
return
*/
throw new UnsupportedOperationException("Method not decompiled: com.google.common.collect.TreeRangeSet.SubRangeSet.<init>(com.google.common.collect.TreeRangeSet, com.google.common.collect.Range):void");
}
@Override // com.google.common.collect.TreeRangeSet, com.google.common.collect.AbstractRangeSet
public void add(Range<C> range) {
Preconditions.a(this.a.encloses(range), "Cannot add range %s to subRangeSet(%s)", range, this.a);
super.add(range);
}
@Override // com.google.common.collect.TreeRangeSet, com.google.common.collect.AbstractRangeSet
public void clear() {
TreeRangeSet.this.remove(this.a);
}
@Override // com.google.common.collect.TreeRangeSet, com.google.common.collect.AbstractRangeSet
public boolean contains(C c) {
return this.a.contains(c) && TreeRangeSet.this.contains(c);
}
@Override // com.google.common.collect.TreeRangeSet, com.google.common.collect.AbstractRangeSet, com.google.common.collect.RangeSet
public boolean encloses(Range<C> range) {
Range rangeEnclosing;
return (this.a.isEmpty() || !this.a.encloses(range) || (rangeEnclosing = TreeRangeSet.this.rangeEnclosing(range)) == null || rangeEnclosing.intersection(this.a).isEmpty()) ? false : true;
}
@Override // com.google.common.collect.TreeRangeSet, com.google.common.collect.AbstractRangeSet
public Range<C> rangeContaining(C c) {
Range<C> rangeContaining;
if (this.a.contains(c) && (rangeContaining = TreeRangeSet.this.rangeContaining(c)) != null) {
return rangeContaining.intersection(this.a);
}
return null;
}
@Override // com.google.common.collect.TreeRangeSet, com.google.common.collect.AbstractRangeSet
public void remove(Range<C> range) {
if (range.isConnected(this.a)) {
TreeRangeSet.this.remove(range.intersection(this.a));
}
}
@Override // com.google.common.collect.TreeRangeSet
public RangeSet<C> subRangeSet(Range<C> range) {
return range.encloses(this.a) ? this : range.isConnected(this.a) ? new SubRangeSet(this, this.a.intersection(range)) : ImmutableRangeSet.of();
}
}
private static final class SubRangeSetRangesByLowerBound<C extends Comparable<?>> extends AbstractNavigableMap<Cut<C>, Range<C>> {
private final Range<Cut<C>> a;
private final Range<C> b;
private final NavigableMap<Cut<C>, Range<C>> c;
private final NavigableMap<Cut<C>, Range<C>> d;
@Override // java.util.SortedMap
public Comparator<? super Cut<C>> comparator() {
return Ordering.c();
}
@Override // java.util.AbstractMap, java.util.Map
public boolean containsKey(Object obj) {
return get(obj) != null;
}
@Override // com.google.common.collect.Maps.IteratorBasedAbstractMap
Iterator<Map.Entry<Cut<C>, Range<C>>> entryIterator() {
final Iterator<Range<C>> it;
if (this.b.isEmpty()) {
return Iterators.a();
}
if (this.a.upperBound.a((Cut<Cut<C>>) this.b.lowerBound)) {
return Iterators.a();
}
if (this.a.lowerBound.a((Cut<Cut<C>>) this.b.lowerBound)) {
it = this.d.tailMap(this.b.lowerBound, false).values().iterator();
} else {
it = this.c.tailMap(this.a.lowerBound.c(), this.a.lowerBoundType() == BoundType.CLOSED).values().iterator();
}
final Cut cut = (Cut) Ordering.c().b(this.a.upperBound, Cut.c(this.b.upperBound));
return new AbstractIterator<Map.Entry<Cut<C>, Range<C>>>() { // from class: com.google.common.collect.TreeRangeSet.SubRangeSetRangesByLowerBound.1
/* JADX INFO: Access modifiers changed from: protected */
@Override // com.google.common.collect.AbstractIterator
public Map.Entry<Cut<C>, Range<C>> a() {
if (!it.hasNext()) {
return (Map.Entry) b();
}
Range range = (Range) it.next();
if (cut.a((Cut) range.lowerBound)) {
return (Map.Entry) b();
}
Range intersection = range.intersection(SubRangeSetRangesByLowerBound.this.b);
return Maps.a(intersection.lowerBound, intersection);
}
};
}
@Override // com.google.common.collect.Maps.IteratorBasedAbstractMap, java.util.AbstractMap, java.util.Map
public int size() {
return Iterators.h(entryIterator());
}
private SubRangeSetRangesByLowerBound(Range<Cut<C>> range, Range<C> range2, NavigableMap<Cut<C>, Range<C>> navigableMap) {
Preconditions.a(range);
this.a = range;
Preconditions.a(range2);
this.b = range2;
Preconditions.a(navigableMap);
this.c = navigableMap;
this.d = new RangesByUpperBound(navigableMap);
}
private NavigableMap<Cut<C>, Range<C>> a(Range<Cut<C>> range) {
return !range.isConnected(this.a) ? ImmutableSortedMap.of() : new SubRangeSetRangesByLowerBound(this.a.intersection(range), this.b, this.c);
}
@Override // java.util.NavigableMap
/* renamed from: b, reason: merged with bridge method [inline-methods] */
public NavigableMap<Cut<C>, Range<C>> tailMap(Cut<C> cut, boolean z) {
return a(Range.downTo(cut, BoundType.forBoolean(z)));
}
@Override // java.util.AbstractMap, java.util.Map
public Range<C> get(Object obj) {
if (obj instanceof Cut) {
try {
Cut<C> cut = (Cut) obj;
if (this.a.contains(cut) && cut.compareTo(this.b.lowerBound) >= 0 && cut.compareTo(this.b.upperBound) < 0) {
if (cut.equals(this.b.lowerBound)) {
Range range = (Range) Maps.c(this.c.floorEntry(cut));
if (range != null && range.upperBound.compareTo(this.b.lowerBound) > 0) {
return range.intersection(this.b);
}
} else {
Range range2 = (Range) this.c.get(cut);
if (range2 != null) {
return range2.intersection(this.b);
}
}
}
} catch (ClassCastException unused) {
}
}
return null;
}
@Override // java.util.NavigableMap
/* renamed from: a, reason: merged with bridge method [inline-methods] */
public NavigableMap<Cut<C>, Range<C>> subMap(Cut<C> cut, boolean z, Cut<C> cut2, boolean z2) {
return a(Range.range(cut, BoundType.forBoolean(z), cut2, BoundType.forBoolean(z2)));
}
@Override // java.util.NavigableMap
/* renamed from: a, reason: merged with bridge method [inline-methods] */
public NavigableMap<Cut<C>, Range<C>> headMap(Cut<C> cut, boolean z) {
return a(Range.upTo(cut, BoundType.forBoolean(z)));
}
@Override // com.google.common.collect.AbstractNavigableMap
Iterator<Map.Entry<Cut<C>, Range<C>>> a() {
if (this.b.isEmpty()) {
return Iterators.a();
}
Cut cut = (Cut) Ordering.c().b(this.a.upperBound, Cut.c(this.b.upperBound));
final Iterator it = this.c.headMap(cut.c(), cut.e() == BoundType.CLOSED).descendingMap().values().iterator();
return new AbstractIterator<Map.Entry<Cut<C>, Range<C>>>() { // from class: com.google.common.collect.TreeRangeSet.SubRangeSetRangesByLowerBound.2
/* JADX INFO: Access modifiers changed from: protected */
@Override // com.google.common.collect.AbstractIterator
public Map.Entry<Cut<C>, Range<C>> a() {
if (!it.hasNext()) {
return (Map.Entry) b();
}
Range range = (Range) it.next();
if (SubRangeSetRangesByLowerBound.this.b.lowerBound.compareTo(range.upperBound) >= 0) {
return (Map.Entry) b();
}
Range intersection = range.intersection(SubRangeSetRangesByLowerBound.this.b);
return SubRangeSetRangesByLowerBound.this.a.contains(intersection.lowerBound) ? Maps.a(intersection.lowerBound, intersection) : (Map.Entry) b();
}
};
}
}
public static <C extends Comparable<?>> TreeRangeSet<C> create() {
return new TreeRangeSet<>(new TreeMap());
}
/* JADX INFO: Access modifiers changed from: private */
public Range<C> rangeEnclosing(Range<C> range) {
Preconditions.a(range);
Map.Entry<Cut<C>, Range<C>> floorEntry = this.rangesByLowerBound.floorEntry(range.lowerBound);
if (floorEntry == null || !floorEntry.getValue().encloses(range)) {
return null;
}
return floorEntry.getValue();
}
private void replaceRangeWithSameLowerBound(Range<C> range) {
if (range.isEmpty()) {
this.rangesByLowerBound.remove(range.lowerBound);
} else {
this.rangesByLowerBound.put(range.lowerBound, range);
}
}
@Override // com.google.common.collect.AbstractRangeSet
public void add(Range<C> range) {
Preconditions.a(range);
if (range.isEmpty()) {
return;
}
Cut<C> cut = range.lowerBound;
Cut<C> cut2 = range.upperBound;
Map.Entry<Cut<C>, Range<C>> lowerEntry = this.rangesByLowerBound.lowerEntry(cut);
if (lowerEntry != null) {
Range<C> value = lowerEntry.getValue();
if (value.upperBound.compareTo(cut) >= 0) {
if (value.upperBound.compareTo(cut2) >= 0) {
cut2 = value.upperBound;
}
cut = value.lowerBound;
}
}
Map.Entry<Cut<C>, Range<C>> floorEntry = this.rangesByLowerBound.floorEntry(cut2);
if (floorEntry != null) {
Range<C> value2 = floorEntry.getValue();
if (value2.upperBound.compareTo(cut2) >= 0) {
cut2 = value2.upperBound;
}
}
this.rangesByLowerBound.subMap(cut, cut2).clear();
replaceRangeWithSameLowerBound(Range.create(cut, cut2));
}
@Override // com.google.common.collect.AbstractRangeSet
public /* bridge */ /* synthetic */ void addAll(RangeSet rangeSet) {
super.addAll(rangeSet);
}
public Set<Range<C>> asDescendingSetOfRanges() {
Set<Range<C>> set = this.asDescendingSetOfRanges;
if (set != null) {
return set;
}
AsRanges asRanges = new AsRanges(this, this.rangesByLowerBound.descendingMap().values());
this.asDescendingSetOfRanges = asRanges;
return asRanges;
}
@Override // com.google.common.collect.RangeSet
public Set<Range<C>> asRanges() {
Set<Range<C>> set = this.asRanges;
if (set != null) {
return set;
}
AsRanges asRanges = new AsRanges(this, this.rangesByLowerBound.values());
this.asRanges = asRanges;
return asRanges;
}
@Override // com.google.common.collect.AbstractRangeSet
public /* bridge */ /* synthetic */ void clear() {
super.clear();
}
@Override // com.google.common.collect.RangeSet
public RangeSet<C> complement() {
RangeSet<C> rangeSet = this.complement;
if (rangeSet != null) {
return rangeSet;
}
Complement complement = new Complement();
this.complement = complement;
return complement;
}
@Override // com.google.common.collect.AbstractRangeSet
public /* bridge */ /* synthetic */ boolean contains(Comparable comparable) {
return super.contains(comparable);
}
@Override // com.google.common.collect.AbstractRangeSet, com.google.common.collect.RangeSet
public boolean encloses(Range<C> range) {
Preconditions.a(range);
Map.Entry<Cut<C>, Range<C>> floorEntry = this.rangesByLowerBound.floorEntry(range.lowerBound);
return floorEntry != null && floorEntry.getValue().encloses(range);
}
@Override // com.google.common.collect.AbstractRangeSet
public /* bridge */ /* synthetic */ boolean enclosesAll(RangeSet rangeSet) {
return super.enclosesAll(rangeSet);
}
@Override // com.google.common.collect.AbstractRangeSet
public /* bridge */ /* synthetic */ boolean equals(Object obj) {
return super.equals(obj);
}
@Override // com.google.common.collect.AbstractRangeSet
public boolean intersects(Range<C> range) {
Preconditions.a(range);
Map.Entry<Cut<C>, Range<C>> ceilingEntry = this.rangesByLowerBound.ceilingEntry(range.lowerBound);
if (ceilingEntry != null && ceilingEntry.getValue().isConnected(range) && !ceilingEntry.getValue().intersection(range).isEmpty()) {
return true;
}
Map.Entry<Cut<C>, Range<C>> lowerEntry = this.rangesByLowerBound.lowerEntry(range.lowerBound);
return (lowerEntry == null || !lowerEntry.getValue().isConnected(range) || lowerEntry.getValue().intersection(range).isEmpty()) ? false : true;
}
@Override // com.google.common.collect.AbstractRangeSet, com.google.common.collect.RangeSet
public /* bridge */ /* synthetic */ boolean isEmpty() {
return super.isEmpty();
}
@Override // com.google.common.collect.AbstractRangeSet
public Range<C> rangeContaining(C c) {
Preconditions.a(c);
Map.Entry<Cut<C>, Range<C>> floorEntry = this.rangesByLowerBound.floorEntry(Cut.c(c));
if (floorEntry == null || !floorEntry.getValue().contains(c)) {
return null;
}
return floorEntry.getValue();
}
@Override // com.google.common.collect.AbstractRangeSet
public void remove(Range<C> range) {
Preconditions.a(range);
if (range.isEmpty()) {
return;
}
Map.Entry<Cut<C>, Range<C>> lowerEntry = this.rangesByLowerBound.lowerEntry(range.lowerBound);
if (lowerEntry != null) {
Range<C> value = lowerEntry.getValue();
if (value.upperBound.compareTo(range.lowerBound) >= 0) {
if (range.hasUpperBound() && value.upperBound.compareTo(range.upperBound) >= 0) {
replaceRangeWithSameLowerBound(Range.create(range.upperBound, value.upperBound));
}
replaceRangeWithSameLowerBound(Range.create(value.lowerBound, range.lowerBound));
}
}
Map.Entry<Cut<C>, Range<C>> floorEntry = this.rangesByLowerBound.floorEntry(range.upperBound);
if (floorEntry != null) {
Range<C> value2 = floorEntry.getValue();
if (range.hasUpperBound() && value2.upperBound.compareTo(range.upperBound) >= 0) {
replaceRangeWithSameLowerBound(Range.create(range.upperBound, value2.upperBound));
}
}
this.rangesByLowerBound.subMap(range.lowerBound, range.upperBound).clear();
}
@Override // com.google.common.collect.AbstractRangeSet, com.google.common.collect.RangeSet
public /* bridge */ /* synthetic */ void removeAll(RangeSet rangeSet) {
super.removeAll(rangeSet);
}
public Range<C> span() {
Map.Entry<Cut<C>, Range<C>> firstEntry = this.rangesByLowerBound.firstEntry();
Map.Entry<Cut<C>, Range<C>> lastEntry = this.rangesByLowerBound.lastEntry();
if (firstEntry != null) {
return Range.create(firstEntry.getValue().lowerBound, lastEntry.getValue().upperBound);
}
throw new NoSuchElementException();
}
public RangeSet<C> subRangeSet(Range<C> range) {
return range.equals(Range.all()) ? this : new SubRangeSet(this, range);
}
private TreeRangeSet(NavigableMap<Cut<C>, Range<C>> navigableMap) {
this.rangesByLowerBound = navigableMap;
}
public static <C extends Comparable<?>> TreeRangeSet<C> create(RangeSet<C> rangeSet) {
TreeRangeSet<C> create = create();
create.addAll(rangeSet);
return create;
}
@Override // com.google.common.collect.AbstractRangeSet
public /* bridge */ /* synthetic */ void addAll(Iterable iterable) {
super.addAll(iterable);
}
@Override // com.google.common.collect.AbstractRangeSet
public /* bridge */ /* synthetic */ boolean enclosesAll(Iterable iterable) {
return super.enclosesAll(iterable);
}
@Override // com.google.common.collect.AbstractRangeSet
public /* bridge */ /* synthetic */ void removeAll(Iterable iterable) {
super.removeAll(iterable);
}
public static <C extends Comparable<?>> TreeRangeSet<C> create(Iterable<Range<C>> iterable) {
TreeRangeSet<C> create = create();
create.addAll(iterable);
return create;
}
}