778 lines
33 KiB
Java
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;
|
|
}
|
|
}
|