Seq$RefMap.smali
.class final Lgo/Seq$RefMap;
.super Ljava/lang/Object;
.source "Seq.java"
# instance fields
.field private keys:[I
.field private live:I
.field private next:I
.field private objs:[Lgo/Seq$Ref;
# direct methods
.method constructor <init>()V
.registers 3
.prologue
const/16 v1, 0x10
const/4 v0, 0x0
.line 259
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 254
iput v0, p0, Lgo/Seq$RefMap;->next:I
.line 255
iput v0, p0, Lgo/Seq$RefMap;->live:I
.line 256
new-array v0, v1, [I
iput-object v0, p0, Lgo/Seq$RefMap;->keys:[I
.line 257
new-array v0, v1, [Lgo/Seq$Ref;
iput-object v0, p0, Lgo/Seq$RefMap;->objs:[Lgo/Seq$Ref;
.line 259
return-void
.end method
.method private grow()V
.registers 7
.prologue
const/4 v3, 0x0
.line 314
iget v0, p0, Lgo/Seq$RefMap;->live:I
invoke-static {v0}, Lgo/Seq$RefMap;->roundPow2(I)I
move-result v0
mul-int/lit8 v0, v0, 0x2
.line 315
iget-object v1, p0, Lgo/Seq$RefMap;->keys:[I
array-length v1, v1
if-le v0, v1, :cond_3a
.line 316
iget-object v0, p0, Lgo/Seq$RefMap;->keys:[I
array-length v0, v0
shl-int/lit8 v0, v0, 0x1
new-array v1, v0, [I
.line 317
iget-object v0, p0, Lgo/Seq$RefMap;->objs:[Lgo/Seq$Ref;
array-length v0, v0
shl-int/lit8 v0, v0, 0x1
new-array v0, v0, [Lgo/Seq$Ref;
:goto_1c
move v2, v3
move v4, v3
.line 324
:goto_1e
iget-object v5, p0, Lgo/Seq$RefMap;->keys:[I
array-length v5, v5
if-ge v2, v5, :cond_3f
.line 325
iget-object v5, p0, Lgo/Seq$RefMap;->objs:[Lgo/Seq$Ref;
aget-object v5, v5, v2
if-eqz v5, :cond_37
.line 326
iget-object v5, p0, Lgo/Seq$RefMap;->keys:[I
aget v5, v5, v2
aput v5, v1, v4
.line 327
iget-object v5, p0, Lgo/Seq$RefMap;->objs:[Lgo/Seq$Ref;
aget-object v5, v5, v2
aput-object v5, v0, v4
.line 328
add-int/lit8 v4, v4, 0x1
.line 324
:cond_37
add-int/lit8 v2, v2, 0x1
goto :goto_1e
.line 319
:cond_3a
iget-object v1, p0, Lgo/Seq$RefMap;->keys:[I
.line 320
iget-object v0, p0, Lgo/Seq$RefMap;->objs:[Lgo/Seq$Ref;
goto :goto_1c
:cond_3f
move v2, v4
.line 331
:goto_40
array-length v5, v1
if-ge v2, v5, :cond_4b
.line 332
aput v3, v1, v2
.line 333
const/4 v5, 0x0
aput-object v5, v0, v2
.line 331
add-int/lit8 v2, v2, 0x1
goto :goto_40
.line 336
:cond_4b
iput-object v1, p0, Lgo/Seq$RefMap;->keys:[I
.line 337
iput-object v0, p0, Lgo/Seq$RefMap;->objs:[Lgo/Seq$Ref;
.line 338
iput v4, p0, Lgo/Seq$RefMap;->next:I
.line 340
iget v0, p0, Lgo/Seq$RefMap;->live:I
iget v1, p0, Lgo/Seq$RefMap;->next:I
if-eq v0, v1, :cond_7a
.line 341
new-instance v0, Ljava/lang/RuntimeException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "bad state: live="
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
iget v2, p0, Lgo/Seq$RefMap;->live:I
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, ", next="
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
iget v2, p0, Lgo/Seq$RefMap;->next:I
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
throw v0
.line 343
:cond_7a
return-void
.end method
.method private static roundPow2(I)I
.registers 2
.prologue
.line 346
const/4 v0, 0x1
.line 347
:goto_1
if-ge v0, p0, :cond_6
.line 348
shl-int/lit8 v0, v0, 0x1
goto :goto_1
.line 350
:cond_6
return v0
.end method
# virtual methods
.method final get(I)Lgo/Seq$Ref;
.registers 5
.prologue
.line 262
iget-object v0, p0, Lgo/Seq$RefMap;->keys:[I
const/4 v1, 0x0
iget v2, p0, Lgo/Seq$RefMap;->next:I
invoke-static {v0, v1, v2, p1}, Ljava/util/Arrays;->binarySearch([IIII)I
move-result v0
.line 263
if-ltz v0, :cond_10
.line 264
iget-object v1, p0, Lgo/Seq$RefMap;->objs:[Lgo/Seq$Ref;
aget-object v0, v1, v0
.line 266
:goto_f
return-object v0
:cond_10
const/4 v0, 0x0
goto :goto_f
.end method
.method final put(ILgo/Seq$Ref;)V
.registers 8
.prologue
const/4 v3, 0x0
.line 280
if-nez p2, :cond_1e
.line 281
new-instance v0, Ljava/lang/RuntimeException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "put a null ref (with key "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, ")"
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
throw v0
.line 283
:cond_1e
iget-object v0, p0, Lgo/Seq$RefMap;->keys:[I
iget v1, p0, Lgo/Seq$RefMap;->next:I
invoke-static {v0, v3, v1, p1}, Ljava/util/Arrays;->binarySearch([IIII)I
move-result v0
.line 284
if-ltz v0, :cond_59
.line 285
iget-object v1, p0, Lgo/Seq$RefMap;->objs:[Lgo/Seq$Ref;
aget-object v1, v1, v0
if-nez v1, :cond_38
.line 286
iget-object v1, p0, Lgo/Seq$RefMap;->objs:[Lgo/Seq$Ref;
aput-object p2, v1, v0
.line 287
iget v1, p0, Lgo/Seq$RefMap;->live:I
add-int/lit8 v1, v1, 0x1
iput v1, p0, Lgo/Seq$RefMap;->live:I
.line 289
:cond_38
iget-object v1, p0, Lgo/Seq$RefMap;->objs:[Lgo/Seq$Ref;
aget-object v0, v1, v0
if-eq v0, p2, :cond_9d
.line 290
new-instance v0, Ljava/lang/RuntimeException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "replacing an existing ref (with key "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, ")"
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
throw v0
.line 294
:cond_59
iget v1, p0, Lgo/Seq$RefMap;->next:I
iget-object v2, p0, Lgo/Seq$RefMap;->keys:[I
array-length v2, v2
if-lt v1, v2, :cond_6b
.line 295
invoke-direct {p0}, Lgo/Seq$RefMap;->grow()V
.line 296
iget-object v0, p0, Lgo/Seq$RefMap;->keys:[I
iget v1, p0, Lgo/Seq$RefMap;->next:I
invoke-static {v0, v3, v1, p1}, Ljava/util/Arrays;->binarySearch([IIII)I
move-result v0
.line 298
:cond_6b
xor-int/lit8 v0, v0, -0x1
.line 299
iget v1, p0, Lgo/Seq$RefMap;->next:I
if-ge v0, v1, :cond_89
.line 301
iget-object v1, p0, Lgo/Seq$RefMap;->keys:[I
iget-object v2, p0, Lgo/Seq$RefMap;->keys:[I
add-int/lit8 v3, v0, 0x1
iget v4, p0, Lgo/Seq$RefMap;->next:I
sub-int/2addr v4, v0
invoke-static {v1, v0, v2, v3, v4}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 302
iget-object v1, p0, Lgo/Seq$RefMap;->objs:[Lgo/Seq$Ref;
iget-object v2, p0, Lgo/Seq$RefMap;->objs:[Lgo/Seq$Ref;
add-int/lit8 v3, v0, 0x1
iget v4, p0, Lgo/Seq$RefMap;->next:I
sub-int/2addr v4, v0
invoke-static {v1, v0, v2, v3, v4}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 304
:cond_89
iget-object v1, p0, Lgo/Seq$RefMap;->keys:[I
aput p1, v1, v0
.line 305
iget-object v1, p0, Lgo/Seq$RefMap;->objs:[Lgo/Seq$Ref;
aput-object p2, v1, v0
.line 306
iget v0, p0, Lgo/Seq$RefMap;->live:I
add-int/lit8 v0, v0, 0x1
iput v0, p0, Lgo/Seq$RefMap;->live:I
.line 307
iget v0, p0, Lgo/Seq$RefMap;->next:I
add-int/lit8 v0, v0, 0x1
iput v0, p0, Lgo/Seq$RefMap;->next:I
.line 308
:cond_9d
return-void
.end method
.method final remove(I)V
.registers 5
.prologue
.line 270
iget-object v0, p0, Lgo/Seq$RefMap;->keys:[I
const/4 v1, 0x0
iget v2, p0, Lgo/Seq$RefMap;->next:I
invoke-static {v0, v1, v2, p1}, Ljava/util/Arrays;->binarySearch([IIII)I
move-result v0
.line 271
if-ltz v0, :cond_1c
.line 272
iget-object v1, p0, Lgo/Seq$RefMap;->objs:[Lgo/Seq$Ref;
aget-object v1, v1, v0
if-eqz v1, :cond_1c
.line 273
iget-object v1, p0, Lgo/Seq$RefMap;->objs:[Lgo/Seq$Ref;
const/4 v2, 0x0
aput-object v2, v1, v0
.line 274
iget v0, p0, Lgo/Seq$RefMap;->live:I
add-int/lit8 v0, v0, -0x1
iput v0, p0, Lgo/Seq$RefMap;->live:I
.line 277
:cond_1c
return-void
.end method