Rabbit-R1/switch port/java/sources/androidx/compose/runtime/SlotTable.java
2024-05-21 17:08:36 -04:00

524 lines
28 KiB
Java

package androidx.compose.runtime;
import androidx.compose.runtime.tooling.CompositionData;
import androidx.compose.runtime.tooling.CompositionGroup;
import androidx.exifinterface.media.ExifInterface;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import kotlin.KotlinNothingValueException;
import kotlin.Metadata;
import kotlin.Unit;
import kotlin.collections.ArraysKt;
import kotlin.jvm.functions.Function1;
import kotlin.jvm.internal.InlineMarker;
import kotlin.jvm.internal.Intrinsics;
import kotlin.jvm.internal.Ref;
import kotlin.jvm.internal.markers.KMappedMarker;
/* compiled from: SlotTable.kt */
@Metadata(d1 = {"\u0000\u0092\u0001\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\u0010\u001c\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\b\n\u0002\u0010\u0015\n\u0002\b\u0003\n\u0002\u0010\b\n\u0002\b\u0004\n\u0002\u0010\u000b\n\u0002\b\u0002\n\u0002\u0010\u0011\n\u0002\u0010\u0000\n\u0002\b\u0010\n\u0002\u0010\u000e\n\u0000\n\u0002\u0010\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0003\n\u0002\u0010 \n\u0002\b\u0003\n\u0002\u0018\u0002\n\u0002\b\t\n\u0002\u0010(\n\u0002\b\t\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\r\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\b\u0000\u0018\u00002\u00020\u00012\b\u0012\u0004\u0012\u00020\u00030\u0002B\u0005¢\u0006\u0002\u0010\u0004J\u000e\u0010+\u001a\u00020\u00072\u0006\u0010,\u001a\u00020\u0015J\u000e\u0010-\u001a\u00020\u00152\u0006\u0010+\u001a\u00020\u0007J\u0006\u0010.\u001a\u00020/J\u0015\u00100\u001a\u0002012\u0006\u00102\u001a\u000203H\u0000¢\u0006\u0002\b4JW\u00100\u001a\u0002012\u0006\u0010)\u001a\u0002052\u0006\u0010\u0012\u001a\u00020\u00112\u0006\u0010\u0016\u001a\u00020\u00152\u000e\u0010\u001f\u001a\n\u0012\u0006\u0012\u0004\u0018\u00010\u001e0\u001d2\u0006\u0010#\u001a\u00020\u00152\u0016\u0010\u0005\u001a\u0012\u0012\u0004\u0012\u00020\u00070\u0006j\b\u0012\u0004\u0012\u00020\u0007`\bH\u0000¢\u0006\u0004\b4\u00106J\u0006\u00107\u001a\u00020\u001aJ\u000e\u00108\u001a\b\u0012\u0004\u0012\u00020\u001509H\u0002J\u0012\u0010:\u001a\u0004\u0018\u00010\u00032\u0006\u0010;\u001a\u00020\u001eH\u0016J\u0012\u0010<\u001a\u0004\u0018\u00010=2\u0006\u0010>\u001a\u00020\u0015H\u0002J\u0016\u0010?\u001a\u00020\u001a2\u0006\u0010@\u001a\u00020\u00152\u0006\u0010+\u001a\u00020\u0007J\u000e\u0010A\u001a\b\u0012\u0004\u0012\u00020\u001509H\u0002J\u0010\u0010B\u001a\u00020\u001a2\u0006\u0010>\u001a\u00020\u0015H\u0002J\u001d\u0010C\u001a\n\u0012\u0004\u0012\u00020=\u0018\u0001092\u0006\u0010D\u001a\u00020\u0015H\u0000¢\u0006\u0002\bEJ\u000f\u0010F\u001a\b\u0012\u0004\u0012\u00020\u00030GH\u0096\u0002J\u000e\u0010H\u001a\b\u0012\u0004\u0012\u00020\u001509H\u0002J\u000e\u0010I\u001a\b\u0012\u0004\u0012\u00020\u001509H\u0002J\u0006\u0010J\u001a\u000203J\u0006\u0010K\u001a\u000205J\u000e\u0010L\u001a\u00020\u001a2\u0006\u0010+\u001a\u00020\u0007J\u000e\u0010M\u001a\b\u0012\u0004\u0012\u00020\u001509H\u0002J:\u0010N\u001a\u0002HO\"\u0004\b\u0000\u0010O2!\u0010P\u001a\u001d\u0012\u0013\u0012\u001103¢\u0006\f\bR\u0012\b\bS\u0012\u0004\b\b(2\u0012\u0004\u0012\u0002HO0QH\u0086\\u0001\u0000¢\u0006\u0002\u0010TJO\u0010U\u001a\u0002012\u0006\u0010\u0012\u001a\u00020\u00112\u0006\u0010\u0016\u001a\u00020\u00152\u000e\u0010\u001f\u001a\n\u0012\u0006\u0012\u0004\u0018\u00010\u001e0\u001d2\u0006\u0010#\u001a\u00020\u00152\u0016\u0010\u0005\u001a\u0012\u0012\u0004\u0012\u00020\u00070\u0006j\b\u0012\u0004\u0012\u00020\u0007`\bH\u0000¢\u0006\u0004\bV\u0010WJ\u001f\u0010X\u001a\u0004\u0018\u00010\u001e2\u0006\u0010>\u001a\u00020\u00152\u0006\u0010Y\u001a\u00020\u0015H\u0000¢\u0006\u0002\bZJ\u001d\u0010[\u001a\n\u0012\u0006\u0012\u0004\u0018\u00010\u001e092\u0006\u0010>\u001a\u00020\u0015H\u0000¢\u0006\u0002\b\\J\u0006\u0010]\u001a\u000201J:\u0010^\u001a\u0002HO\"\u0004\b\u0000\u0010O2!\u0010P\u001a\u001d\u0012\u0013\u0012\u001105¢\u0006\f\bR\u0012\b\bS\u0012\u0004\b\b()\u0012\u0004\u0012\u0002HO0QH\u0086\\u0001\u0000¢\u0006\u0002\u0010TJ \u0010_\u001a\u00020\u0015*\u00060`j\u0002`a2\u0006\u0010,\u001a\u00020\u00152\u0006\u0010b\u001a\u00020\u0015H\u0002R*\u0010\u0005\u001a\u0012\u0012\u0004\u0012\u00020\u00070\u0006j\b\u0012\u0004\u0012\u00020\u0007`\bX\u0080\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b\t\u0010\n\"\u0004\b\u000b\u0010\fR\u001a\u0010\r\u001a\b\u0012\u0004\u0012\u00020\u00030\u00028VX\u0096\u0004¢\u0006\u0006\u001a\u0004\b\u000e\u0010\u000fR\u001e\u0010\u0012\u001a\u00020\u00112\u0006\u0010\u0010\u001a\u00020\u0011@BX\u0086\u000e¢\u0006\b\n\u0000\u001a\u0004\b\u0013\u0010\u0014R\u001e\u0010\u0016\u001a\u00020\u00152\u0006\u0010\u0010\u001a\u00020\u0015@BX\u0086\u000e¢\u0006\b\n\u0000\u001a\u0004\b\u0017\u0010\u0018R\u0014\u0010\u0019\u001a\u00020\u001a8VX\u0096\u0004¢\u0006\u0006\u001a\u0004\b\u0019\u0010\u001bR\u000e\u0010\u001c\u001a\u00020\u0015X\u0082\u000e¢\u0006\u0002\n\u0000R0\u0010\u001f\u001a\n\u0012\u0006\u0012\u0004\u0018\u00010\u001e0\u001d2\u000e\u0010\u0010\u001a\n\u0012\u0006\u0012\u0004\u0018\u00010\u001e0\u001d@BX\u0086\u000e¢\u0006\n\n\u0002\u0010\"\u001a\u0004\b \u0010!R\u001e\u0010#\u001a\u00020\u00152\u0006\u0010\u0010\u001a\u00020\u0015@BX\u0086\u000e¢\u0006\b\n\u0000\u001a\u0004\b$\u0010\u0018R\u001a\u0010%\u001a\u00020\u0015X\u0080\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b&\u0010\u0018\"\u0004\b'\u0010(R\u001e\u0010)\u001a\u00020\u001a2\u0006\u0010\u0010\u001a\u00020\u001a@BX\u0080\u000e¢\u0006\b\n\u0000\u001a\u0004\b*\u0010\u001b\u0082\u0002\u0007\n\u0005\b\u009920\u0001¨\u0006c"}, d2 = {"Landroidx/compose/runtime/SlotTable;", "Landroidx/compose/runtime/tooling/CompositionData;", "", "Landroidx/compose/runtime/tooling/CompositionGroup;", "()V", "anchors", "Ljava/util/ArrayList;", "Landroidx/compose/runtime/Anchor;", "Lkotlin/collections/ArrayList;", "getAnchors$runtime_release", "()Ljava/util/ArrayList;", "setAnchors$runtime_release", "(Ljava/util/ArrayList;)V", "compositionGroups", "getCompositionGroups", "()Ljava/lang/Iterable;", "<set-?>", "", "groups", "getGroups", "()[I", "", "groupsSize", "getGroupsSize", "()I", "isEmpty", "", "()Z", "readers", "", "", "slots", "getSlots", "()[Ljava/lang/Object;", "[Ljava/lang/Object;", "slotsSize", "getSlotsSize", "version", "getVersion$runtime_release", "setVersion$runtime_release", "(I)V", "writer", "getWriter$runtime_release", "anchor", "index", "anchorIndex", "asString", "", "close", "", "reader", "Landroidx/compose/runtime/SlotReader;", "close$runtime_release", "Landroidx/compose/runtime/SlotWriter;", "(Landroidx/compose/runtime/SlotWriter;[II[Ljava/lang/Object;ILjava/util/ArrayList;)V", "containsMark", "dataIndexes", "", "find", "identityToFind", "findEffectiveRecomposeScope", "Landroidx/compose/runtime/RecomposeScopeImpl;", "group", "groupContainsAnchor", "groupIndex", "groupSizes", "invalidateGroup", "invalidateGroupsWithKey", "target", "invalidateGroupsWithKey$runtime_release", "iterator", "", "keys", "nodes", "openReader", "openWriter", "ownsAnchor", "parentIndexes", "read", ExifInterface.GPS_DIRECTION_TRUE, "block", "Lkotlin/Function1;", "Lkotlin/ParameterName;", "name", "(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;", "setTo", "setTo$runtime_release", "([II[Ljava/lang/Object;ILjava/util/ArrayList;)V", "slot", "slotIndex", "slot$runtime_release", "slotsOf", "slotsOf$runtime_release", "verifyWellFormed", "write", "emitGroup", "Ljava/lang/StringBuilder;", "Lkotlin/text/StringBuilder;", "level", "runtime_release"}, k = 1, mv = {1, 8, 0}, xi = 48)
/* loaded from: classes.dex */
public final class SlotTable implements CompositionData, Iterable<CompositionGroup>, KMappedMarker {
private int groupsSize;
private int readers;
private int slotsSize;
private int version;
private boolean writer;
private int[] groups = new int[0];
private Object[] slots = new Object[0];
private ArrayList<Anchor> anchors = new ArrayList<>();
public final ArrayList<Anchor> getAnchors$runtime_release() {
return this.anchors;
}
public final int[] getGroups() {
return this.groups;
}
public final int getGroupsSize() {
return this.groupsSize;
}
public final Object[] getSlots() {
return this.slots;
}
public final int getSlotsSize() {
return this.slotsSize;
}
/* renamed from: getVersion$runtime_release, reason: from getter */
public final int getVersion() {
return this.version;
}
/* renamed from: getWriter$runtime_release, reason: from getter */
public final boolean getWriter() {
return this.writer;
}
@Override // androidx.compose.runtime.tooling.CompositionData
public boolean isEmpty() {
return this.groupsSize == 0;
}
public final void setAnchors$runtime_release(ArrayList<Anchor> arrayList) {
Intrinsics.checkNotNullParameter(arrayList, "<set-?>");
this.anchors = arrayList;
}
public final void setTo$runtime_release(int[] groups, int groupsSize, Object[] slots, int slotsSize, ArrayList<Anchor> anchors) {
Intrinsics.checkNotNullParameter(groups, "groups");
Intrinsics.checkNotNullParameter(slots, "slots");
Intrinsics.checkNotNullParameter(anchors, "anchors");
this.groups = groups;
this.groupsSize = groupsSize;
this.slots = slots;
this.slotsSize = slotsSize;
this.anchors = anchors;
}
public final void setVersion$runtime_release(int i) {
this.version = i;
}
public final <T> T read(Function1<? super SlotReader, ? extends T> block) {
Intrinsics.checkNotNullParameter(block, "block");
SlotReader openReader = openReader();
try {
return block.invoke(openReader);
} finally {
InlineMarker.finallyStart(1);
openReader.close();
InlineMarker.finallyEnd(1);
}
}
public final <T> T write(Function1<? super SlotWriter, ? extends T> block) {
Intrinsics.checkNotNullParameter(block, "block");
SlotWriter openWriter = openWriter();
try {
return block.invoke(openWriter);
} finally {
InlineMarker.finallyStart(1);
openWriter.close();
InlineMarker.finallyEnd(1);
}
}
public final SlotReader openReader() {
if (this.writer) {
throw new IllegalStateException("Cannot read while a writer is pending".toString());
}
this.readers++;
return new SlotReader(this);
}
public final SlotWriter openWriter() {
if (!(!this.writer)) {
ComposerKt.composeRuntimeError("Cannot start a writer when another writer is pending".toString());
throw new KotlinNothingValueException();
}
if (this.readers <= 0) {
this.writer = true;
this.version++;
return new SlotWriter(this);
}
ComposerKt.composeRuntimeError("Cannot start a writer when a reader is pending".toString());
throw new KotlinNothingValueException();
}
public final int anchorIndex(Anchor anchor) {
Intrinsics.checkNotNullParameter(anchor, "anchor");
if (!this.writer) {
if (!anchor.getValid()) {
throw new IllegalArgumentException("Anchor refers to a group that was removed".toString());
}
return anchor.getLocation();
}
ComposerKt.composeRuntimeError("Use active SlotWriter to determine anchor location instead".toString());
throw new KotlinNothingValueException();
}
public final boolean ownsAnchor(Anchor anchor) {
int access$search;
Intrinsics.checkNotNullParameter(anchor, "anchor");
return anchor.getValid() && (access$search = SlotTableKt.access$search(this.anchors, anchor.getLocation(), this.groupsSize)) >= 0 && Intrinsics.areEqual(this.anchors.get(access$search), anchor);
}
public final boolean groupContainsAnchor(int groupIndex, Anchor anchor) {
Intrinsics.checkNotNullParameter(anchor, "anchor");
if (!(!this.writer)) {
ComposerKt.composeRuntimeError("Writer is active".toString());
throw new KotlinNothingValueException();
}
if (groupIndex >= 0 && groupIndex < this.groupsSize) {
if (ownsAnchor(anchor)) {
int access$groupSize = SlotTableKt.access$groupSize(this.groups, groupIndex) + groupIndex;
int location = anchor.getLocation();
if (groupIndex <= location && location < access$groupSize) {
return true;
}
}
return false;
}
ComposerKt.composeRuntimeError("Invalid group index".toString());
throw new KotlinNothingValueException();
}
public final void close$runtime_release(SlotReader reader) {
Intrinsics.checkNotNullParameter(reader, "reader");
if (reader.getTable() == this && this.readers > 0) {
this.readers--;
} else {
ComposerKt.composeRuntimeError("Unexpected reader close()".toString());
throw new KotlinNothingValueException();
}
}
public final void close$runtime_release(SlotWriter writer, int[] groups, int groupsSize, Object[] slots, int slotsSize, ArrayList<Anchor> anchors) {
Intrinsics.checkNotNullParameter(writer, "writer");
Intrinsics.checkNotNullParameter(groups, "groups");
Intrinsics.checkNotNullParameter(slots, "slots");
Intrinsics.checkNotNullParameter(anchors, "anchors");
if (writer.getTable() != this || !this.writer) {
throw new IllegalArgumentException("Unexpected writer close()".toString());
}
this.writer = false;
setTo$runtime_release(groups, groupsSize, slots, slotsSize, anchors);
}
public final List<RecomposeScopeImpl> invalidateGroupsWithKey$runtime_release(int target) {
ArrayList arrayList = new ArrayList();
ArrayList arrayList2 = new ArrayList();
Ref.BooleanRef booleanRef = new Ref.BooleanRef();
booleanRef.element = true;
SlotReader openReader = openReader();
try {
invalidateGroupsWithKey$lambda$14$scanGroup(openReader, target, arrayList, booleanRef, this, arrayList2);
Unit unit = Unit.INSTANCE;
openReader.close();
SlotWriter openWriter = openWriter();
try {
openWriter.startGroup();
int size = arrayList.size();
for (int i = 0; i < size; i++) {
Anchor anchor = (Anchor) arrayList.get(i);
if (anchor.toIndexFor(openWriter) >= openWriter.getCurrentGroup()) {
openWriter.seek(anchor);
openWriter.bashGroup$runtime_release();
}
}
openWriter.skipToGroupEnd();
openWriter.endGroup();
openWriter.close();
if (booleanRef.element) {
return arrayList2;
}
return null;
} catch (Throwable th) {
openWriter.close();
throw th;
}
} catch (Throwable th2) {
openReader.close();
throw th2;
}
}
private static final void invalidateGroupsWithKey$lambda$14$scanGroup(SlotReader slotReader, int i, List<Anchor> list, Ref.BooleanRef booleanRef, SlotTable slotTable, List<RecomposeScopeImpl> list2) {
if (slotReader.getGroupKey() == i) {
list.add(SlotReader.anchor$default(slotReader, 0, 1, null));
if (booleanRef.element) {
RecomposeScopeImpl findEffectiveRecomposeScope = slotTable.findEffectiveRecomposeScope(slotReader.getCurrentGroup());
if (findEffectiveRecomposeScope != null) {
list2.add(findEffectiveRecomposeScope);
} else {
booleanRef.element = false;
list2.clear();
}
}
slotReader.skipGroup();
return;
}
slotReader.startGroup();
while (!slotReader.isGroupEnd()) {
invalidateGroupsWithKey$lambda$14$scanGroup(slotReader, i, list, booleanRef, slotTable, list2);
}
slotReader.endGroup();
}
public final boolean containsMark() {
return this.groupsSize > 0 && SlotTableKt.access$containsMark(this.groups, 0);
}
private final RecomposeScopeImpl findEffectiveRecomposeScope(int group) {
while (group > 0) {
Iterator<Object> it = new DataIterator(this, group).iterator();
while (it.hasNext()) {
Object next = it.next();
if (next instanceof RecomposeScopeImpl) {
return (RecomposeScopeImpl) next;
}
}
group = SlotTableKt.access$parentAnchor(this.groups, group);
}
return null;
}
private final boolean invalidateGroup(int group) {
while (group >= 0) {
Iterator<Object> it = new DataIterator(this, group).iterator();
while (it.hasNext()) {
Object next = it.next();
if (next instanceof RecomposeScopeImpl) {
RecomposeScopeImpl recomposeScopeImpl = (RecomposeScopeImpl) next;
recomposeScopeImpl.setRequiresRecompose(true);
return recomposeScopeImpl.invalidateForResult(null) != InvalidationResult.IGNORED;
}
}
group = SlotTableKt.access$parentAnchor(this.groups, group);
}
return false;
}
public final void verifyWellFormed() {
Ref.IntRef intRef = new Ref.IntRef();
int i = -1;
if (this.groupsSize > 0) {
while (intRef.element < this.groupsSize) {
verifyWellFormed$validateGroup(intRef, this, -1, intRef.element + SlotTableKt.access$groupSize(this.groups, intRef.element));
}
if (intRef.element != this.groupsSize) {
throw new IllegalStateException(("Incomplete group at root " + intRef.element + " expected to be " + this.groupsSize).toString());
}
}
int length = this.slots.length;
for (int i2 = this.slotsSize; i2 < length; i2++) {
if (this.slots[i2] != null) {
throw new IllegalStateException(("Non null value in the slot gap at index " + i2).toString());
}
}
ArrayList<Anchor> arrayList = this.anchors;
int size = arrayList.size();
int i3 = 0;
while (i3 < size) {
int indexFor = arrayList.get(i3).toIndexFor(this);
if (indexFor < 0 || indexFor > this.groupsSize) {
throw new IllegalArgumentException("Invalid anchor, location out of bound".toString());
}
if (i >= indexFor) {
throw new IllegalArgumentException("Anchor is out of order".toString());
}
i3++;
i = indexFor;
}
}
private static final int verifyWellFormed$validateGroup(Ref.IntRef intRef, SlotTable slotTable, int i, int i2) {
int i3 = intRef.element;
int i4 = i3 + 1;
intRef.element = i4;
int access$parentAnchor = SlotTableKt.access$parentAnchor(slotTable.groups, i3);
if (access$parentAnchor != i) {
throw new IllegalStateException(("Invalid parent index detected at " + i3 + ", expected parent index to be " + i + " found " + access$parentAnchor).toString());
}
int access$groupSize = SlotTableKt.access$groupSize(slotTable.groups, i3) + i3;
if (access$groupSize > slotTable.groupsSize) {
throw new IllegalStateException(("A group extends past the end of the table at " + i3).toString());
}
if (access$groupSize > i2) {
throw new IllegalStateException(("A group extends past its parent group at " + i3).toString());
}
int access$dataAnchor = SlotTableKt.access$dataAnchor(slotTable.groups, i3);
int access$dataAnchor2 = i3 >= slotTable.groupsSize - 1 ? slotTable.slotsSize : SlotTableKt.access$dataAnchor(slotTable.groups, i4);
if (access$dataAnchor2 > slotTable.slots.length) {
throw new IllegalStateException(("Slots for " + i3 + " extend past the end of the slot table").toString());
}
if (access$dataAnchor > access$dataAnchor2) {
throw new IllegalStateException(("Invalid data anchor at " + i3).toString());
}
if (SlotTableKt.access$slotAnchor(slotTable.groups, i3) > access$dataAnchor2) {
throw new IllegalStateException(("Slots start out of range at " + i3).toString());
}
if (access$dataAnchor2 - access$dataAnchor < (SlotTableKt.access$isNode(slotTable.groups, i3) ? 1 : 0) + (SlotTableKt.access$hasObjectKey(slotTable.groups, i3) ? 1 : 0) + (SlotTableKt.access$hasAux(slotTable.groups, i3) ? 1 : 0)) {
throw new IllegalStateException(("Not enough slots added for group " + i3).toString());
}
boolean access$isNode = SlotTableKt.access$isNode(slotTable.groups, i3);
if (access$isNode && slotTable.slots[SlotTableKt.access$nodeIndex(slotTable.groups, i3)] == null) {
throw new IllegalStateException(("No node recorded for a node group at " + i3).toString());
}
int i5 = 0;
while (intRef.element < access$groupSize) {
i5 += verifyWellFormed$validateGroup(intRef, slotTable, i3, access$groupSize);
}
int access$nodeCount = SlotTableKt.access$nodeCount(slotTable.groups, i3);
int access$groupSize2 = SlotTableKt.access$groupSize(slotTable.groups, i3);
if (access$nodeCount != i5) {
throw new IllegalStateException(("Incorrect node count detected at " + i3 + ", expected " + access$nodeCount + ", received " + i5).toString());
}
int i6 = intRef.element - i3;
if (access$groupSize2 != i6) {
throw new IllegalStateException(("Incorrect slot count detected at " + i3 + ", expected " + access$groupSize2 + ", received " + i6).toString());
}
if (SlotTableKt.access$containsAnyMark(slotTable.groups, i3) && i3 > 0 && !SlotTableKt.access$containsMark(slotTable.groups, i)) {
throw new IllegalStateException(("Expected group " + i + " to record it contains a mark because " + i3 + " does").toString());
}
if (access$isNode) {
return 1;
}
return i5;
}
public final String asString() {
if (this.writer) {
return super.toString();
}
StringBuilder sb = new StringBuilder();
sb.append(super.toString());
sb.append('\n');
int i = this.groupsSize;
if (i > 0) {
int i2 = 0;
while (i2 < i) {
i2 += emitGroup(sb, i2, 0);
}
} else {
sb.append("<EMPTY>");
}
String sb2 = sb.toString();
Intrinsics.checkNotNullExpressionValue(sb2, "StringBuilder().apply(builderAction).toString()");
return sb2;
}
private final int emitGroup(StringBuilder sb, int i, int i2) {
for (int i3 = 0; i3 < i2; i3++) {
sb.append(' ');
}
sb.append("Group(");
sb.append(i);
sb.append(") key=");
sb.append(SlotTableKt.access$key(this.groups, i));
int access$groupSize = SlotTableKt.access$groupSize(this.groups, i);
sb.append(", nodes=");
sb.append(SlotTableKt.access$nodeCount(this.groups, i));
sb.append(", size=");
sb.append(access$groupSize);
if (SlotTableKt.access$hasMark(this.groups, i)) {
sb.append(", mark");
}
if (SlotTableKt.access$containsMark(this.groups, i)) {
sb.append(", contains mark");
}
int emitGroup$dataIndex = emitGroup$dataIndex(this, i);
int i4 = i + 1;
int emitGroup$dataIndex2 = emitGroup$dataIndex(this, i4);
if (emitGroup$dataIndex >= 0 && emitGroup$dataIndex <= emitGroup$dataIndex2 && emitGroup$dataIndex2 <= this.slotsSize) {
if (SlotTableKt.access$hasObjectKey(this.groups, i)) {
sb.append(" objectKey=" + this.slots[SlotTableKt.access$objectKeyIndex(this.groups, i)]);
}
if (SlotTableKt.access$isNode(this.groups, i)) {
sb.append(" node=" + this.slots[SlotTableKt.access$nodeIndex(this.groups, i)]);
}
if (SlotTableKt.access$hasAux(this.groups, i)) {
sb.append(" aux=" + this.slots[SlotTableKt.access$auxIndex(this.groups, i)]);
}
int access$slotAnchor = SlotTableKt.access$slotAnchor(this.groups, i);
if (access$slotAnchor < emitGroup$dataIndex2) {
sb.append(", slots=[");
sb.append(access$slotAnchor);
sb.append(": ");
for (int i5 = access$slotAnchor; i5 < emitGroup$dataIndex2; i5++) {
if (i5 != access$slotAnchor) {
sb.append(", ");
}
sb.append(String.valueOf(this.slots[i5]));
}
sb.append("]");
}
} else {
sb.append(", *invalid data offsets " + emitGroup$dataIndex + '-' + emitGroup$dataIndex2 + '*');
}
sb.append('\n');
int i6 = i + access$groupSize;
while (i4 < i6) {
i4 += emitGroup(sb, i4, i2 + 1);
}
return access$groupSize;
}
private static final int emitGroup$dataIndex(SlotTable slotTable, int i) {
return i >= slotTable.groupsSize ? slotTable.slotsSize : SlotTableKt.access$dataAnchor(slotTable.groups, i);
}
private final List<Integer> keys() {
return SlotTableKt.access$keys(this.groups, this.groupsSize * 5);
}
private final List<Integer> nodes() {
return SlotTableKt.access$nodeCounts(this.groups, this.groupsSize * 5);
}
private final List<Integer> parentIndexes() {
return SlotTableKt.access$parentAnchors(this.groups, this.groupsSize * 5);
}
private final List<Integer> dataIndexes() {
return SlotTableKt.access$dataAnchors(this.groups, this.groupsSize * 5);
}
private final List<Integer> groupSizes() {
return SlotTableKt.access$groupSizes(this.groups, this.groupsSize * 5);
}
public final List<Object> slotsOf$runtime_release(int group) {
int access$dataAnchor = SlotTableKt.access$dataAnchor(this.groups, group);
int i = group + 1;
return ArraysKt.toList(this.slots).subList(access$dataAnchor, i < this.groupsSize ? SlotTableKt.access$dataAnchor(this.groups, i) : this.slots.length);
}
public final Object slot$runtime_release(int group, int slotIndex) {
int access$slotAnchor = SlotTableKt.access$slotAnchor(this.groups, group);
int i = group + 1;
return (slotIndex < 0 || slotIndex >= (i < this.groupsSize ? SlotTableKt.access$dataAnchor(this.groups, i) : this.slots.length) - access$slotAnchor) ? Composer.INSTANCE.getEmpty() : this.slots[access$slotAnchor + slotIndex];
}
@Override // androidx.compose.runtime.tooling.CompositionData
public Iterable<CompositionGroup> getCompositionGroups() {
return this;
}
@Override // java.lang.Iterable
public Iterator<CompositionGroup> iterator() {
return new GroupIterator(this, 0, this.groupsSize);
}
@Override // androidx.compose.runtime.tooling.CompositionData
public CompositionGroup find(Object identityToFind) {
Intrinsics.checkNotNullParameter(identityToFind, "identityToFind");
return new SlotTableGroup(this, 0, 0, 4, null).find(identityToFind);
}
public final Anchor anchor(int index) {
int i;
if (!(!this.writer)) {
ComposerKt.composeRuntimeError("use active SlotWriter to create an anchor location instead ".toString());
throw new KotlinNothingValueException();
}
if (index < 0 || index >= (i = this.groupsSize)) {
throw new IllegalArgumentException("Parameter index is out of range".toString());
}
ArrayList<Anchor> arrayList = this.anchors;
int access$search = SlotTableKt.access$search(arrayList, index, i);
if (access$search < 0) {
Anchor anchor = new Anchor(index);
arrayList.add(-(access$search + 1), anchor);
return anchor;
}
Anchor anchor2 = arrayList.get(access$search);
Intrinsics.checkNotNullExpressionValue(anchor2, "get(location)");
return anchor2;
}
}