.class public final Landroidx/collection/CircularArray; .super Ljava/lang/Object; .source "SourceFile" # annotations .annotation system Ldalvik/annotation/Signature; value = { "", "Ljava/lang/Object;" } .end annotation .annotation build Lkotlin/jvm/internal/SourceDebugExtension; value = { "SMAP\nCircularArray.kt\nKotlin\n*S Kotlin\n*F\n+ 1 CircularArray.kt\nandroidx/collection/CircularArray\n+ 2 fake.kt\nkotlin/jvm/internal/FakeKt\n+ 3 CollectionPlatformUtils.jvm.kt\nandroidx/collection/CollectionPlatformUtils\n*L\n1#1,270:1\n1#2:271\n26#3:272\n26#3:273\n26#3:274\n26#3:275\n26#3:276\n26#3:277\n26#3:278\n*S KotlinDebug\n*F\n+ 1 CircularArray.kt\nandroidx/collection/CircularArray\n*L\n104#1:272\n122#1:273\n152#1:274\n187#1:275\n221#1:276\n235#1:277\n249#1:278\n*E\n" } .end annotation # instance fields .field private capacityBitmask:I .field private elements:[Ljava/lang/Object; .annotation system Ldalvik/annotation/Signature; value = { "[TE;" } .end annotation .end field .field private head:I .field private tail:I # direct methods .method public constructor ()V .locals 3 .line 0 const/4 v0, 0x1 const/4 v1, 0x0 const/4 v2, 0x0 invoke-direct {p0, v2, v0, v1}, Landroidx/collection/CircularArray;->(IILkotlin/jvm/internal/DefaultConstructorMarker;)V return-void .end method .method public constructor (I)V .locals 2 .line 31 invoke-direct {p0}, Ljava/lang/Object;->()V const/4 v0, 0x1 if-lt p1, v0, :cond_2 const/high16 v1, 0x40000000 # 2.0f if-gt p1, v1, :cond_1 .line 43 invoke-static {p1}, Ljava/lang/Integer;->bitCount(I)I move-result v1 if-eq v1, v0, :cond_0 add-int/lit8 p1, p1, -0x1 .line 44 invoke-static {p1}, Ljava/lang/Integer;->highestOneBit(I)I move-result p1 shl-int/2addr p1, v0 :cond_0 add-int/lit8 v0, p1, -0x1 iput v0, p0, Landroidx/collection/CircularArray;->capacityBitmask:I .line 50 new-array p1, p1, [Ljava/lang/Object; iput-object p1, p0, Landroidx/collection/CircularArray;->elements:[Ljava/lang/Object; return-void .line 39 :cond_1 new-instance p1, Ljava/lang/IllegalArgumentException; const-string v0, "capacity must be <= 2^30" invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String; move-result-object v0 invoke-direct {p1, v0}, Ljava/lang/IllegalArgumentException;->(Ljava/lang/String;)V throw p1 .line 38 :cond_2 new-instance p1, Ljava/lang/IllegalArgumentException; const-string v0, "capacity must be >= 1" invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String; move-result-object v0 invoke-direct {p1, v0}, Ljava/lang/IllegalArgumentException;->(Ljava/lang/String;)V throw p1 .end method .method public synthetic constructor (IILkotlin/jvm/internal/DefaultConstructorMarker;)V .locals 0 and-int/lit8 p2, p2, 0x1 if-eqz p2, :cond_0 const/16 p1, 0x8 .line 31 :cond_0 invoke-direct {p0, p1}, Landroidx/collection/CircularArray;->(I)V return-void .end method .method private final doubleCapacity()V .locals 7 iget-object v0, p0, Landroidx/collection/CircularArray;->elements:[Ljava/lang/Object; .line 54 array-length v1, v0 iget v2, p0, Landroidx/collection/CircularArray;->head:I sub-int v3, v1, v2 shl-int/lit8 v4, v1, 0x1 if-ltz v4, :cond_0 .line 61 new-array v5, v4, [Ljava/lang/Object; const/4 v6, 0x0 .line 62 invoke-static {v0, v5, v6, v2, v1}, Lkotlin/collections/ArraysKt;->copyInto([Ljava/lang/Object;[Ljava/lang/Object;III)[Ljava/lang/Object; iget-object v0, p0, Landroidx/collection/CircularArray;->elements:[Ljava/lang/Object; iget v2, p0, Landroidx/collection/CircularArray;->head:I .line 63 invoke-static {v0, v5, v3, v6, v2}, Lkotlin/collections/ArraysKt;->copyInto([Ljava/lang/Object;[Ljava/lang/Object;III)[Ljava/lang/Object; iput-object v5, p0, Landroidx/collection/CircularArray;->elements:[Ljava/lang/Object; iput v6, p0, Landroidx/collection/CircularArray;->head:I iput v1, p0, Landroidx/collection/CircularArray;->tail:I add-int/lit8 v4, v4, -0x1 iput v4, p0, Landroidx/collection/CircularArray;->capacityBitmask:I return-void .line 58 :cond_0 new-instance v0, Ljava/lang/RuntimeException; const-string v1, "Max array capacity exceeded" invoke-direct {v0, v1}, Ljava/lang/RuntimeException;->(Ljava/lang/String;)V throw v0 .end method # virtual methods .method public final addFirst(Ljava/lang/Object;)V .locals 2 .annotation system Ldalvik/annotation/Signature; value = { "(TE;)V" } .end annotation iget v0, p0, Landroidx/collection/CircularArray;->head:I add-int/lit8 v0, v0, -0x1 iget v1, p0, Landroidx/collection/CircularArray;->capacityBitmask:I and-int/2addr v0, v1 iput v0, p0, Landroidx/collection/CircularArray;->head:I iget-object v1, p0, Landroidx/collection/CircularArray;->elements:[Ljava/lang/Object; .line 77 aput-object p1, v1, v0 iget p1, p0, Landroidx/collection/CircularArray;->tail:I if-ne v0, p1, :cond_0 .line 79 invoke-direct {p0}, Landroidx/collection/CircularArray;->doubleCapacity()V :cond_0 return-void .end method .method public final addLast(Ljava/lang/Object;)V .locals 2 .annotation system Ldalvik/annotation/Signature; value = { "(TE;)V" } .end annotation iget-object v0, p0, Landroidx/collection/CircularArray;->elements:[Ljava/lang/Object; iget v1, p0, Landroidx/collection/CircularArray;->tail:I .line 89 aput-object p1, v0, v1 add-int/lit8 v1, v1, 0x1 iget p1, p0, Landroidx/collection/CircularArray;->capacityBitmask:I and-int/2addr p1, v1 iput p1, p0, Landroidx/collection/CircularArray;->tail:I iget v0, p0, Landroidx/collection/CircularArray;->head:I if-ne p1, v0, :cond_0 .line 92 invoke-direct {p0}, Landroidx/collection/CircularArray;->doubleCapacity()V :cond_0 return-void .end method .method public final clear()V .locals 1 .line 137 invoke-virtual {p0}, Landroidx/collection/CircularArray;->size()I move-result v0 invoke-virtual {p0, v0}, Landroidx/collection/CircularArray;->removeFromStart(I)V return-void .end method .method public final get(I)Ljava/lang/Object; .locals 2 .annotation system Ldalvik/annotation/Signature; value = { "(I)TE;" } .end annotation if-ltz p1, :cond_0 .line 248 invoke-virtual {p0}, Landroidx/collection/CircularArray;->size()I move-result v0 if-ge p1, v0, :cond_0 iget-object v0, p0, Landroidx/collection/CircularArray;->elements:[Ljava/lang/Object; iget v1, p0, Landroidx/collection/CircularArray;->head:I add-int/2addr v1, p1 iget p1, p0, Landroidx/collection/CircularArray;->capacityBitmask:I and-int/2addr p1, v1 .line 251 aget-object p1, v0, p1 invoke-static {p1}, Lkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;)V return-object p1 .line 249 :cond_0 sget-object p1, Landroidx/collection/CollectionPlatformUtils;->INSTANCE:Landroidx/collection/CollectionPlatformUtils; .line 26 new-instance p1, Ljava/lang/ArrayIndexOutOfBoundsException; invoke-direct {p1}, Ljava/lang/ArrayIndexOutOfBoundsException;->()V throw p1 .end method .method public final getFirst()Ljava/lang/Object; .locals 2 .annotation system Ldalvik/annotation/Signature; value = { "()TE;" } .end annotation iget v0, p0, Landroidx/collection/CircularArray;->head:I iget v1, p0, Landroidx/collection/CircularArray;->tail:I if-eq v0, v1, :cond_0 iget-object v1, p0, Landroidx/collection/CircularArray;->elements:[Ljava/lang/Object; .line 223 aget-object v0, v1, v0 invoke-static {v0}, Lkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;)V return-object v0 .line 221 :cond_0 sget-object v0, Landroidx/collection/CollectionPlatformUtils;->INSTANCE:Landroidx/collection/CollectionPlatformUtils; .line 26 new-instance v0, Ljava/lang/ArrayIndexOutOfBoundsException; invoke-direct {v0}, Ljava/lang/ArrayIndexOutOfBoundsException;->()V throw v0 .end method .method public final getLast()Ljava/lang/Object; .locals 3 .annotation system Ldalvik/annotation/Signature; value = { "()TE;" } .end annotation iget v0, p0, Landroidx/collection/CircularArray;->head:I iget v1, p0, Landroidx/collection/CircularArray;->tail:I if-eq v0, v1, :cond_0 iget-object v0, p0, Landroidx/collection/CircularArray;->elements:[Ljava/lang/Object; add-int/lit8 v1, v1, -0x1 iget v2, p0, Landroidx/collection/CircularArray;->capacityBitmask:I and-int/2addr v1, v2 .line 237 aget-object v0, v0, v1 invoke-static {v0}, Lkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;)V return-object v0 .line 235 :cond_0 sget-object v0, Landroidx/collection/CollectionPlatformUtils;->INSTANCE:Landroidx/collection/CollectionPlatformUtils; .line 26 new-instance v0, Ljava/lang/ArrayIndexOutOfBoundsException; invoke-direct {v0}, Ljava/lang/ArrayIndexOutOfBoundsException;->()V throw v0 .end method .method public final isEmpty()Z .locals 2 iget v0, p0, Landroidx/collection/CircularArray;->head:I iget v1, p0, Landroidx/collection/CircularArray;->tail:I if-ne v0, v1, :cond_0 const/4 v0, 0x1 goto :goto_0 :cond_0 const/4 v0, 0x0 :goto_0 return v0 .end method .method public final popFirst()Ljava/lang/Object; .locals 4 .annotation system Ldalvik/annotation/Signature; value = { "()TE;" } .end annotation iget v0, p0, Landroidx/collection/CircularArray;->head:I iget v1, p0, Landroidx/collection/CircularArray;->tail:I if-eq v0, v1, :cond_0 iget-object v1, p0, Landroidx/collection/CircularArray;->elements:[Ljava/lang/Object; .line 106 aget-object v2, v1, v0 const/4 v3, 0x0 .line 107 aput-object v3, v1, v0 add-int/lit8 v0, v0, 0x1 iget v1, p0, Landroidx/collection/CircularArray;->capacityBitmask:I and-int/2addr v0, v1 iput v0, p0, Landroidx/collection/CircularArray;->head:I return-object v2 .line 104 :cond_0 sget-object v0, Landroidx/collection/CollectionPlatformUtils;->INSTANCE:Landroidx/collection/CollectionPlatformUtils; .line 26 new-instance v0, Ljava/lang/ArrayIndexOutOfBoundsException; invoke-direct {v0}, Ljava/lang/ArrayIndexOutOfBoundsException;->()V throw v0 .end method .method public final popLast()Ljava/lang/Object; .locals 4 .annotation system Ldalvik/annotation/Signature; value = { "()TE;" } .end annotation iget v0, p0, Landroidx/collection/CircularArray;->head:I iget v1, p0, Landroidx/collection/CircularArray;->tail:I if-eq v0, v1, :cond_0 add-int/lit8 v1, v1, -0x1 iget v0, p0, Landroidx/collection/CircularArray;->capacityBitmask:I and-int/2addr v0, v1 iget-object v1, p0, Landroidx/collection/CircularArray;->elements:[Ljava/lang/Object; .line 125 aget-object v2, v1, v0 const/4 v3, 0x0 .line 126 aput-object v3, v1, v0 iput v0, p0, Landroidx/collection/CircularArray;->tail:I return-object v2 .line 122 :cond_0 sget-object v0, Landroidx/collection/CollectionPlatformUtils;->INSTANCE:Landroidx/collection/CollectionPlatformUtils; .line 26 new-instance v0, Ljava/lang/ArrayIndexOutOfBoundsException; invoke-direct {v0}, Ljava/lang/ArrayIndexOutOfBoundsException;->()V throw v0 .end method .method public final removeFromEnd(I)V .locals 5 if-gtz p1, :cond_0 return-void .line 186 :cond_0 invoke-virtual {p0}, Landroidx/collection/CircularArray;->size()I move-result v0 if-gt p1, v0, :cond_5 iget v0, p0, Landroidx/collection/CircularArray;->tail:I if-ge p1, v0, :cond_1 sub-int v1, v0, p1 goto :goto_0 :cond_1 const/4 v1, 0x0 :goto_0 move v2, v1 :goto_1 const/4 v3, 0x0 if-ge v2, v0, :cond_2 iget-object v4, p0, Landroidx/collection/CircularArray;->elements:[Ljava/lang/Object; .line 196 aput-object v3, v4, v2 add-int/lit8 v2, v2, 0x1 goto :goto_1 :cond_2 iget v0, p0, Landroidx/collection/CircularArray;->tail:I sub-int v1, v0, v1 sub-int/2addr p1, v1 sub-int/2addr v0, v1 iput v0, p0, Landroidx/collection/CircularArray;->tail:I if-lez p1, :cond_4 iget-object v0, p0, Landroidx/collection/CircularArray;->elements:[Ljava/lang/Object; .line 203 array-length v0, v0 iput v0, p0, Landroidx/collection/CircularArray;->tail:I sub-int p1, v0, p1 move v1, p1 :goto_2 if-ge v1, v0, :cond_3 iget-object v2, p0, Landroidx/collection/CircularArray;->elements:[Ljava/lang/Object; .line 206 aput-object v3, v2, v1 add-int/lit8 v1, v1, 0x1 goto :goto_2 :cond_3 iput p1, p0, Landroidx/collection/CircularArray;->tail:I :cond_4 return-void .line 187 :cond_5 sget-object p1, Landroidx/collection/CollectionPlatformUtils;->INSTANCE:Landroidx/collection/CollectionPlatformUtils; .line 26 new-instance p1, Ljava/lang/ArrayIndexOutOfBoundsException; invoke-direct {p1}, Ljava/lang/ArrayIndexOutOfBoundsException;->()V throw p1 .end method .method public final removeFromStart(I)V .locals 4 if-gtz p1, :cond_0 return-void .line 151 :cond_0 invoke-virtual {p0}, Landroidx/collection/CircularArray;->size()I move-result v0 if-gt p1, v0, :cond_5 iget-object v0, p0, Landroidx/collection/CircularArray;->elements:[Ljava/lang/Object; .line 156 array-length v0, v0 iget v1, p0, Landroidx/collection/CircularArray;->head:I sub-int v2, v0, v1 if-ge p1, v2, :cond_1 add-int v0, v1, p1 :cond_1 :goto_0 const/4 v2, 0x0 if-ge v1, v0, :cond_2 iget-object v3, p0, Landroidx/collection/CircularArray;->elements:[Ljava/lang/Object; .line 161 aput-object v2, v3, v1 add-int/lit8 v1, v1, 0x1 goto :goto_0 :cond_2 iget v1, p0, Landroidx/collection/CircularArray;->head:I sub-int/2addr v0, v1 sub-int/2addr p1, v0 add-int/2addr v1, v0 iget v0, p0, Landroidx/collection/CircularArray;->capacityBitmask:I and-int/2addr v0, v1 iput v0, p0, Landroidx/collection/CircularArray;->head:I if-lez p1, :cond_4 const/4 v0, 0x0 :goto_1 if-ge v0, p1, :cond_3 iget-object v1, p0, Landroidx/collection/CircularArray;->elements:[Ljava/lang/Object; .line 169 aput-object v2, v1, v0 add-int/lit8 v0, v0, 0x1 goto :goto_1 :cond_3 iput p1, p0, Landroidx/collection/CircularArray;->head:I :cond_4 return-void .line 152 :cond_5 sget-object p1, Landroidx/collection/CollectionPlatformUtils;->INSTANCE:Landroidx/collection/CollectionPlatformUtils; .line 26 new-instance p1, Ljava/lang/ArrayIndexOutOfBoundsException; invoke-direct {p1}, Ljava/lang/ArrayIndexOutOfBoundsException;->()V throw p1 .end method .method public final size()I .locals 2 iget v0, p0, Landroidx/collection/CircularArray;->tail:I iget v1, p0, Landroidx/collection/CircularArray;->head:I sub-int/2addr v0, v1 iget v1, p0, Landroidx/collection/CircularArray;->capacityBitmask:I and-int/2addr v0, v1 return v0 .end method