package com.google.firebase.firestore.local; import com.google.firebase.Timestamp; import com.google.firebase.database.collection.ImmutableSortedSet; import com.google.firebase.firestore.auth.User; import com.google.firebase.firestore.model.DocumentKey; import com.google.firebase.firestore.model.mutation.Mutation; import com.google.firebase.firestore.model.mutation.MutationBatch; import com.google.firebase.firestore.remote.WriteStream; import com.google.firebase.firestore.util.Assert; import com.google.firebase.firestore.util.Preconditions; import com.google.firebase.firestore.util.Util; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import o.QwV; /* JADX INFO: Access modifiers changed from: package-private */ /* loaded from: classes2.dex */ public final class MemoryMutationQueue implements MutationQueue { private final MemoryIndexManager indexManager; private final MemoryPersistence persistence; private final List queue = new ArrayList(); private ImmutableSortedSet batchesByDocumentKey = new ImmutableSortedSet<>(Collections.emptyList(), DocumentReference.BY_KEY); private int nextBatchId = 1; private QwV lastStreamToken = WriteStream.EMPTY_STREAM_TOKEN; /* JADX INFO: Access modifiers changed from: package-private */ public MemoryMutationQueue(MemoryPersistence memoryPersistence, User user) { this.persistence = memoryPersistence; this.indexManager = memoryPersistence.getIndexManager(user); } @Override // com.google.firebase.firestore.local.MutationQueue public final void start() { if (isEmpty()) { this.nextBatchId = 1; } } public final boolean isEmpty() { return this.queue.isEmpty(); } @Override // com.google.firebase.firestore.local.MutationQueue public final void acknowledgeBatch(MutationBatch mutationBatch, QwV qwV) { int batchId = mutationBatch.getBatchId(); int indexOfExistingBatchId = indexOfExistingBatchId(batchId, "acknowledged"); Assert.hardAssert(indexOfExistingBatchId == 0, "Can only acknowledge the first batch in the mutation queue", new Object[0]); MutationBatch mutationBatch2 = this.queue.get(indexOfExistingBatchId); Assert.hardAssert(batchId == mutationBatch2.getBatchId(), "Queue ordering failure: expected batch %d, got batch %d", Integer.valueOf(batchId), Integer.valueOf(mutationBatch2.getBatchId())); this.lastStreamToken = (QwV) Preconditions.checkNotNull(qwV); } @Override // com.google.firebase.firestore.local.MutationQueue public final void setLastStreamToken(QwV qwV) { this.lastStreamToken = (QwV) Preconditions.checkNotNull(qwV); } @Override // com.google.firebase.firestore.local.MutationQueue public final MutationBatch addMutationBatch(Timestamp timestamp, List list, List list2) { Assert.hardAssert(!list2.isEmpty(), "Mutation batches should not be empty", new Object[0]); int i = this.nextBatchId; this.nextBatchId = i + 1; int size = this.queue.size(); if (size > 0) { Assert.hardAssert(this.queue.get(size - 1).getBatchId() < i, "Mutation batchIds must be monotonically increasing order", new Object[0]); } MutationBatch mutationBatch = new MutationBatch(i, timestamp, list, list2); this.queue.add(mutationBatch); for (Mutation mutation : list2) { this.batchesByDocumentKey = this.batchesByDocumentKey.insert(new DocumentReference(mutation.getKey(), i)); this.indexManager.addToCollectionParentIndex(mutation.getKey().getCollectionPath()); } return mutationBatch; } @Override // com.google.firebase.firestore.local.MutationQueue public final MutationBatch lookupMutationBatch(int i) { int indexOfBatchId = indexOfBatchId(i); if (indexOfBatchId < 0 || indexOfBatchId >= this.queue.size()) { return null; } MutationBatch mutationBatch = this.queue.get(indexOfBatchId); Assert.hardAssert(mutationBatch.getBatchId() == i, "If found batch must match", new Object[0]); return mutationBatch; } @Override // com.google.firebase.firestore.local.MutationQueue public final MutationBatch getNextMutationBatchAfterBatchId(int i) { int indexOfBatchId = indexOfBatchId(i + 1); if (indexOfBatchId < 0) { indexOfBatchId = 0; } if (this.queue.size() > indexOfBatchId) { return this.queue.get(indexOfBatchId); } return null; } @Override // com.google.firebase.firestore.local.MutationQueue public final List getAllMutationBatches() { return Collections.unmodifiableList(this.queue); } @Override // com.google.firebase.firestore.local.MutationQueue public final List getAllMutationBatchesAffectingDocumentKeys(Iterable iterable) { ImmutableSortedSet immutableSortedSet = new ImmutableSortedSet<>(Collections.emptyList(), Util.comparator()); for (DocumentKey documentKey : iterable) { Iterator iteratorFrom = this.batchesByDocumentKey.iteratorFrom(new DocumentReference(documentKey, 0)); while (iteratorFrom.hasNext()) { DocumentReference next = iteratorFrom.next(); if (!documentKey.equals(next.getKey())) { break; } immutableSortedSet = immutableSortedSet.insert(Integer.valueOf(next.getId())); } } return lookupMutationBatches(immutableSortedSet); } private List lookupMutationBatches(ImmutableSortedSet immutableSortedSet) { ArrayList arrayList = new ArrayList(); Iterator it = immutableSortedSet.iterator(); while (it.hasNext()) { MutationBatch lookupMutationBatch = lookupMutationBatch(it.next().intValue()); if (lookupMutationBatch != null) { arrayList.add(lookupMutationBatch); } } return arrayList; } @Override // com.google.firebase.firestore.local.MutationQueue public final void removeMutationBatch(MutationBatch mutationBatch) { Assert.hardAssert(indexOfExistingBatchId(mutationBatch.getBatchId(), "removed") == 0, "Can only remove the first entry of the mutation queue", new Object[0]); this.queue.remove(0); ImmutableSortedSet immutableSortedSet = this.batchesByDocumentKey; Iterator it = mutationBatch.getMutations().iterator(); while (it.hasNext()) { DocumentKey key = it.next().getKey(); this.persistence.getReferenceDelegate().removeMutationReference(key); immutableSortedSet = immutableSortedSet.remove(new DocumentReference(key, mutationBatch.getBatchId())); } this.batchesByDocumentKey = immutableSortedSet; } @Override // com.google.firebase.firestore.local.MutationQueue public final void performConsistencyCheck() { if (this.queue.isEmpty()) { Assert.hardAssert(this.batchesByDocumentKey.isEmpty(), "Document leak -- detected dangling mutation references when queue is empty.", new Object[0]); } } /* JADX INFO: Access modifiers changed from: package-private */ public final boolean containsKey(DocumentKey documentKey) { Iterator iteratorFrom = this.batchesByDocumentKey.iteratorFrom(new DocumentReference(documentKey, 0)); if (iteratorFrom.hasNext()) { return iteratorFrom.next().getKey().equals(documentKey); } return false; } private int indexOfBatchId(int i) { if (this.queue.isEmpty()) { return 0; } return i - this.queue.get(0).getBatchId(); } private int indexOfExistingBatchId(int i, String str) { int indexOfBatchId = indexOfBatchId(i); Assert.hardAssert(indexOfBatchId >= 0 && indexOfBatchId < this.queue.size(), "Batches must exist to be %s", str); return indexOfBatchId; } @Override // com.google.firebase.firestore.local.MutationQueue public final QwV getLastStreamToken() { return this.lastStreamToken; } }