discord-jadx/app/src/main/java/com/discord/utilities/collections/SparseMutableList.java

737 lines
23 KiB
Java

package com.discord.utilities.collections;
import c.d.b.a.a;
import d0.t.n;
import d0.t.q;
import d0.t.s;
import d0.z.d.g;
import d0.z.d.g0.c;
import d0.z.d.m;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import kotlin.jvm.functions.Function1;
import kotlin.jvm.internal.DefaultConstructorMarker;
/* compiled from: SparseMutableList.kt */
public final class SparseMutableList<T> implements List<T>, c {
private final List<Chunk<T>> chunks;
private final int expectedChunkSize;
private int size;
/* compiled from: SparseMutableList.kt */
public static final class Chunk<T> implements Comparable<Chunk<T>> {
public static final Companion Companion = new Companion(null);
private List<T> list;
private int startIndex;
/* compiled from: SparseMutableList.kt */
public static final class Companion {
private Companion() {
}
public /* synthetic */ Companion(DefaultConstructorMarker defaultConstructorMarker) {
this();
}
public final <T> Chunk<T> create(T t, int i, int i2) {
ArrayList arrayList = new ArrayList(i2);
arrayList.add(t);
return new Chunk<>(i, arrayList);
}
public final <T> Chunk<T> tryMergeChunks(Chunk<T> chunk, Chunk<T> chunk2) {
Chunk<T> chunk3;
m.checkNotNullParameter(chunk, "chunk1");
m.checkNotNullParameter(chunk2, "chunk2");
if (Chunk.access$getStartIndex$p(chunk) < Chunk.access$getStartIndex$p(chunk2)) {
chunk3 = chunk;
} else if (Chunk.access$getStartIndex$p(chunk2) < Chunk.access$getStartIndex$p(chunk)) {
chunk3 = chunk2;
} else {
throw new IllegalArgumentException("both chunks begin at the same index");
}
Chunk<T> chunk4 = chunk == chunk3 ? chunk2 : chunk;
int size = (chunk3.getSize() + Chunk.access$getStartIndex$p(chunk3)) - 1;
if (size >= Chunk.access$getStartIndex$p(chunk4)) {
throw new IllegalArgumentException("chunks overlap: " + chunk + ", " + chunk2);
} else if (size != Chunk.access$getStartIndex$p(chunk4) - 1) {
return null;
} else {
List<T> list = chunk3.getList();
list.addAll(chunk4.getList());
return new Chunk<>(Chunk.access$getStartIndex$p(chunk3), list);
}
}
}
public Chunk(int i, List<T> list) {
m.checkNotNullParameter(list, "list");
this.startIndex = i;
this.list = list;
}
public static final /* synthetic */ int access$getStartIndex$p(Chunk chunk) {
return chunk.startIndex;
}
public static final /* synthetic */ void access$setStartIndex$p(Chunk chunk, int i) {
chunk.startIndex = i;
}
private final int component1() {
return this.startIndex;
}
/* JADX DEBUG: Multi-variable search result rejected for r0v0, resolved type: com.discord.utilities.collections.SparseMutableList$Chunk */
/* JADX WARN: Multi-variable type inference failed */
public static /* synthetic */ Chunk copy$default(Chunk chunk, int i, List list, int i2, Object obj) {
if ((i2 & 1) != 0) {
i = chunk.startIndex;
}
if ((i2 & 2) != 0) {
list = chunk.list;
}
return chunk.copy(i, list);
}
public final void addAtListIndex(int i, T t) {
int i2 = i - this.startIndex;
if (i2 == 0 && t == null) {
incrementStartIndex();
} else {
this.list.add(i2, t);
}
}
public final boolean beginsAfterListIndex(int i) {
return this.startIndex > i;
}
public int compareTo(Chunk<T> chunk) {
m.checkNotNullParameter(chunk, "other");
return this.startIndex - chunk.startIndex;
}
@Override // java.lang.Comparable
public /* bridge */ /* synthetic */ int compareTo(Object obj) {
return compareTo((Chunk) ((Chunk) obj));
}
public final List<T> component2() {
return this.list;
}
public final boolean containsListIndex(int i) {
return this.startIndex <= i && n.getLastIndex(this.list) + this.startIndex >= i;
}
public final Chunk<T> copy(int i, List<T> list) {
m.checkNotNullParameter(list, "list");
return new Chunk<>(i, list);
}
public final void decrementStartIndex() {
this.startIndex--;
}
public final Chunk<T> deepCopy() {
return new Chunk<>(this.startIndex, new ArrayList(this.list));
}
public final <R> Chunk<R> deepCopy(Function1<? super T, ? extends R> function1) {
m.checkNotNullParameter(function1, "transform");
ArrayList arrayList = new ArrayList(this.list.size());
Iterator<T> it = this.list.iterator();
while (it.hasNext()) {
T next = it.next();
arrayList.add(next != null ? function1.invoke(next) : null);
}
return new Chunk<>(this.startIndex, arrayList);
}
@Override // java.lang.Object
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof Chunk)) {
return false;
}
Chunk chunk = (Chunk) obj;
return this.startIndex == chunk.startIndex && m.areEqual(this.list, chunk.list);
}
public final int firstListIndexOf(T t) {
int lastIndex = n.getLastIndex(this.list);
if (lastIndex < 0) {
return -1;
}
int i = 0;
while (!m.areEqual(this.list.get(i), t)) {
if (i == lastIndex) {
return -1;
}
i++;
}
return this.startIndex + i;
}
public final T getAtListIndex(int i) {
return this.list.get(i - this.startIndex);
}
public final List<T> getList() {
return this.list;
}
public final int getSize() {
return this.list.size();
}
@Override // java.lang.Object
public int hashCode() {
int i = this.startIndex * 31;
List<T> list = this.list;
return i + (list != null ? list.hashCode() : 0);
}
public final void incrementStartIndex() {
this.startIndex++;
}
public final boolean isEmpty() {
return this.list.isEmpty();
}
public final int lastListIndexOf(T t) {
for (int lastIndex = n.getLastIndex(this.list); lastIndex >= 0; lastIndex--) {
if (m.areEqual(this.list.get(lastIndex), t)) {
return this.startIndex + lastIndex;
}
}
return -1;
}
public final void removeAfterInclusive(int i) {
int i2 = i - this.startIndex;
if (i2 <= n.getLastIndex(this.list)) {
if (i2 <= 0) {
this.list.clear();
} else {
this.list = this.list.subList(0, i2);
}
}
}
public final T removeAtListIndex(int i) {
return this.list.remove(i - this.startIndex);
}
public final T setAtListIndex(int i, T t) {
int i2 = i - this.startIndex;
if (t != null) {
return this.list.set(i2, t);
}
if (i2 != 0) {
return this.list.set(i2, t);
}
incrementStartIndex();
return this.list.remove(0);
}
public final void setList(List<T> list) {
m.checkNotNullParameter(list, "<set-?>");
this.list = list;
}
@Override // java.lang.Object
public String toString() {
StringBuilder L = a.L("Chunk(startIndex=");
L.append(this.startIndex);
L.append(", list=");
return a.E(L, this.list, ")");
}
}
/* compiled from: SparseMutableList.kt */
public static final class SparseMutableListIterator<T> implements ListIterator<T>, d0.z.d.g0.a {
private int index;
private final SparseMutableList<T> sparseMutableList;
public SparseMutableListIterator(SparseMutableList<T> sparseMutableList, int i) {
m.checkNotNullParameter(sparseMutableList, "sparseMutableList");
this.sparseMutableList = sparseMutableList;
this.index = i;
}
/* JADX INFO: this call moved to the top of the method (can break code semantics) */
public /* synthetic */ SparseMutableListIterator(SparseMutableList sparseMutableList, int i, int i2, DefaultConstructorMarker defaultConstructorMarker) {
this(sparseMutableList, (i2 & 2) != 0 ? -1 : i);
}
@Override // java.util.ListIterator
public void add(T t) {
throw new UnsupportedOperationException("add not supported during iteration");
}
public final int getIndex() {
return this.index;
}
@Override // java.util.ListIterator, java.util.Iterator
public boolean hasNext() {
return nextIndex() < n.getLastIndex(this.sparseMutableList);
}
@Override // java.util.ListIterator
public boolean hasPrevious() {
return this.index > 0;
}
@Override // java.util.ListIterator, java.util.Iterator
public T next() {
int i = this.index + 1;
this.index = i;
return this.sparseMutableList.get(i);
}
@Override // java.util.ListIterator
public int nextIndex() {
return this.index + 1;
}
@Override // java.util.ListIterator
public T previous() {
int i = this.index - 1;
this.index = i;
return this.sparseMutableList.get(i);
}
@Override // java.util.ListIterator
public int previousIndex() {
return this.index - 1;
}
@Override // java.util.ListIterator, java.util.Iterator
public void remove() {
this.sparseMutableList.remove(this.index);
}
@Override // java.util.ListIterator
public void set(T t) {
this.sparseMutableList.set(this.index, t);
}
public final void setIndex(int i) {
this.index = i;
}
}
public SparseMutableList() {
this(0, 0, 3, null);
}
public SparseMutableList(int i, int i2) {
this.expectedChunkSize = i2;
this.chunks = new ArrayList();
this.size = i;
}
/* JADX INFO: this call moved to the top of the method (can break code semantics) */
public /* synthetic */ SparseMutableList(int i, int i2, int i3, DefaultConstructorMarker defaultConstructorMarker) {
this((i3 & 1) != 0 ? 0 : i, (i3 & 2) != 0 ? 5 : i2);
}
private final void addChunk(int i, Chunk<T> chunk) {
this.chunks.add(i, chunk);
q.sort(this.chunks);
}
private final void addChunk(Chunk<T> chunk) {
this.chunks.add(chunk);
q.sort(this.chunks);
}
private final void decrementChunksFromIndex(int i) {
int lastIndex;
int lastIndex2 = n.getLastIndex(this.chunks);
if (i >= 0 && lastIndex2 >= i && i <= (lastIndex = n.getLastIndex(this.chunks))) {
while (true) {
this.chunks.get(i).decrementStartIndex();
if (i != lastIndex) {
i++;
} else {
return;
}
}
}
}
private final int getChunkIndex(int i) {
int i2 = 0;
for (Chunk<T> chunk : this.chunks) {
if (chunk.containsListIndex(i)) {
return i2;
}
i2++;
}
return -1;
}
private final int getFirstChunkIndexAfter(int i) {
int i2 = 0;
for (Chunk<T> chunk : this.chunks) {
if (chunk.beginsAfterListIndex(i)) {
return i2;
}
i2++;
}
return -1;
}
private final void incrementChunksFromIndex(int i) {
int lastIndex;
int lastIndex2 = n.getLastIndex(this.chunks);
if (i >= 0 && lastIndex2 >= i && i <= (lastIndex = n.getLastIndex(this.chunks))) {
while (true) {
this.chunks.get(i).incrementStartIndex();
if (i != lastIndex) {
i++;
} else {
return;
}
}
}
}
private final void resolveChunks() {
q.sort(this.chunks);
int i = 0;
while (i < this.chunks.size() - 1) {
Chunk<T> chunk = this.chunks.get(i);
if (chunk.isEmpty()) {
this.chunks.remove(i);
} else {
int i2 = i + 1;
Chunk<T> tryMergeChunks = Chunk.Companion.tryMergeChunks(chunk, this.chunks.get(i2));
if (tryMergeChunks != null) {
this.chunks.set(i, tryMergeChunks);
this.chunks.remove(i2);
} else {
i = i2;
}
}
}
}
@Override // java.util.List
public void add(int i, T t) {
if (i == size()) {
add(t);
} else if (i <= size()) {
int chunkIndex = getChunkIndex(i);
if (t != null) {
if (chunkIndex >= 0) {
this.chunks.get(chunkIndex).addAtListIndex(i, t);
incrementChunksFromIndex(chunkIndex + 1);
} else {
Chunk<T> create = Chunk.Companion.create(t, i, this.expectedChunkSize);
int firstChunkIndexAfter = getFirstChunkIndexAfter(i);
if (firstChunkIndexAfter == -1) {
addChunk(create);
} else {
addChunk(firstChunkIndexAfter, create);
incrementChunksFromIndex(firstChunkIndexAfter + 1);
}
}
} else if (chunkIndex >= 0) {
this.chunks.get(chunkIndex).addAtListIndex(i, null);
incrementChunksFromIndex(chunkIndex + 1);
} else {
int firstChunkIndexAfter2 = getFirstChunkIndexAfter(i);
if (firstChunkIndexAfter2 != -1) {
incrementChunksFromIndex(firstChunkIndexAfter2);
}
}
setSize(size() + 1);
resolveChunks();
} else {
throw new IndexOutOfBoundsException();
}
}
@Override // java.util.List, java.util.Collection
public boolean add(T t) {
set(size(), t);
return true;
}
@Override // java.util.List
public boolean addAll(int i, Collection<? extends T> collection) {
m.checkNotNullParameter(collection, "elements");
throw new UnsupportedOperationException();
}
@Override // java.util.List, java.util.Collection
public boolean addAll(Collection<? extends T> collection) {
m.checkNotNullParameter(collection, "elements");
return addAll(size(), collection);
}
@Override // java.util.List, java.util.Collection
public void clear() {
this.chunks.clear();
setSize(0);
}
@Override // java.util.List, java.util.Collection
public boolean contains(Object obj) {
if (isEmpty()) {
return false;
}
for (T t : this) {
if (m.areEqual(t, obj)) {
return true;
}
}
return false;
}
@Override // java.util.List, java.util.Collection
public boolean containsAll(Collection<? extends Object> collection) {
m.checkNotNullParameter(collection, "elements");
HashSet hashSet = new HashSet(collection);
if (hashSet.size() > size()) {
return false;
}
for (T t : this) {
if (hashSet.contains(t)) {
hashSet.remove(t);
if (hashSet.isEmpty()) {
return true;
}
}
}
return false;
}
public final SparseMutableList<T> deepCopy() {
SparseMutableList<T> sparseMutableList = new SparseMutableList<>(size(), 0, 2, null);
Iterator<T> it = this.chunks.iterator();
while (it.hasNext()) {
sparseMutableList.chunks.add(it.next().deepCopy());
}
return sparseMutableList;
}
public final <R> SparseMutableList<R> deepCopy(Function1<? super T, ? extends R> function1) {
m.checkNotNullParameter(function1, "transform");
SparseMutableList<R> sparseMutableList = new SparseMutableList<>(size(), 0, 2, null);
Iterator<T> it = this.chunks.iterator();
while (it.hasNext()) {
sparseMutableList.chunks.add(it.next().deepCopy(function1));
}
return sparseMutableList;
}
@Override // java.util.List
public T get(int i) {
if (i <= n.getLastIndex(this)) {
int chunkIndex = getChunkIndex(i);
Chunk<T> chunk = chunkIndex >= 0 ? this.chunks.get(chunkIndex) : null;
if (chunk != null) {
return chunk.getAtListIndex(i);
}
return null;
}
StringBuilder M = a.M("index ", i, " invalid in list of size ");
M.append(size());
throw new IndexOutOfBoundsException(M.toString());
}
public int getSize() {
return this.size;
}
@Override // java.util.List
public int indexOf(Object obj) {
if (obj != null) {
Iterator<T> it = this.chunks.iterator();
while (it.hasNext()) {
int firstListIndexOf = it.next().firstListIndexOf(obj);
if (firstListIndexOf >= 0) {
return firstListIndexOf;
}
}
return -1;
}
int i = 0;
for (T t : this) {
int i2 = i + 1;
if (i < 0) {
n.throwIndexOverflow();
}
if (m.areEqual(t, obj)) {
return i;
}
i = i2;
}
return -1;
}
@Override // java.util.List, java.util.Collection
public boolean isEmpty() {
return size() == 0;
}
@Override // java.util.List, java.util.Collection, java.lang.Iterable
public Iterator<T> iterator() {
return new SparseMutableListIterator(this, 0, 2, null);
}
@Override // java.util.List
public int lastIndexOf(Object obj) {
if (obj != null) {
for (T t : s.asReversedMutable(this.chunks)) {
int lastListIndexOf = t.lastListIndexOf(obj);
if (lastListIndexOf >= 0) {
return lastListIndexOf;
}
}
return -1;
}
for (int lastIndex = n.getLastIndex(this); lastIndex >= 0; lastIndex--) {
if (m.areEqual(get(lastIndex), obj)) {
return lastIndex;
}
}
return -1;
}
@Override // java.util.List
public ListIterator<T> listIterator() {
return new SparseMutableListIterator(this, 0, 2, null);
}
@Override // java.util.List
public ListIterator<T> listIterator(int i) {
return new SparseMutableListIterator(this, 0, 2, null);
}
@Override // java.util.List
public final /* bridge */ T remove(int i) {
return removeAt(i);
}
@Override // java.util.List, java.util.Collection
public boolean remove(Object obj) {
SparseMutableListIterator sparseMutableListIterator = new SparseMutableListIterator(this, 0, 2, null);
while (sparseMutableListIterator.hasNext()) {
if (m.areEqual(sparseMutableListIterator.next(), obj)) {
sparseMutableListIterator.remove();
return true;
}
}
return false;
}
@Override // java.util.List, java.util.Collection
public boolean removeAll(Collection<? extends Object> collection) {
m.checkNotNullParameter(collection, "elements");
boolean z2 = false;
SparseMutableListIterator sparseMutableListIterator = new SparseMutableListIterator(this, 0, 2, null);
while (sparseMutableListIterator.hasNext()) {
if (collection.contains(sparseMutableListIterator.next())) {
sparseMutableListIterator.remove();
z2 = true;
}
}
return z2;
}
public T removeAt(int i) {
T t;
if (i < 0 || i >= size()) {
StringBuilder M = a.M("index: ", i, " -- size: ");
M.append(size());
throw new ArrayIndexOutOfBoundsException(M.toString());
}
int chunkIndex = getChunkIndex(i);
if (chunkIndex >= 0) {
t = this.chunks.get(chunkIndex).removeAtListIndex(i);
decrementChunksFromIndex(chunkIndex + 1);
} else {
int firstChunkIndexAfter = getFirstChunkIndexAfter(i);
if (firstChunkIndexAfter != -1) {
decrementChunksFromIndex(firstChunkIndexAfter);
}
t = null;
}
setSize(size() - 1);
resolveChunks();
return t;
}
@Override // java.util.List, java.util.Collection
public boolean retainAll(Collection<? extends Object> collection) {
m.checkNotNullParameter(collection, "elements");
throw new UnsupportedOperationException();
}
@Override // java.util.List
public T set(int i, T t) {
if (i >= size()) {
setSize(i + 1);
}
int chunkIndex = getChunkIndex(i);
if (chunkIndex >= 0) {
T atListIndex = this.chunks.get(chunkIndex).setAtListIndex(i, t);
resolveChunks();
return atListIndex;
} else if (t == null) {
return null;
} else {
addChunk(Chunk.Companion.create(t, i, this.expectedChunkSize));
resolveChunks();
return null;
}
}
public void setSize(int i) {
int i2 = this.size;
if (i > i2) {
this.size = i;
} else if (i < i2) {
Iterator<T> it = this.chunks.iterator();
while (it.hasNext()) {
it.next().removeAfterInclusive(i);
}
this.size = i;
resolveChunks();
}
}
@Override // java.util.List, java.util.Collection
public final /* bridge */ int size() {
return getSize();
}
@Override // java.util.List
public List<T> subList(int i, int i2) {
throw new UnsupportedOperationException();
}
@Override // java.util.List, java.util.Collection
public Object[] toArray() {
return g.toArray(this);
}
@Override // java.util.List, java.util.Collection
public <T> T[] toArray(T[] tArr) {
return (T[]) g.toArray(this, tArr);
}
}