ByteQueue.smali
.class public Lorg/spongycastle/crypto/tls/ByteQueue;
.super Ljava/lang/Object;
.source "ByteQueue.java"
# static fields
.field private static final DEFAULT_CAPACITY:I = 0x400
# instance fields
.field private available:I
.field private databuf:[B
.field private skipped:I
# direct methods
.method public constructor <init>()V
.registers 2
.prologue
.line 47
const/16 v0, 0x400
invoke-direct {p0, v0}, Lorg/spongycastle/crypto/tls/ByteQueue;-><init>(I)V
.line 48
return-void
.end method
.method public constructor <init>(I)V
.registers 3
.prologue
const/4 v0, 0x0
.line 51
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 38
iput v0, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->skipped:I
.line 43
iput v0, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->available:I
.line 52
new-array v0, p1, [B
iput-object v0, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->databuf:[B
.line 53
return-void
.end method
.method public static nextTwoPow(I)I
.registers 3
.prologue
.line 17
shr-int/lit8 v0, p0, 0x1
or-int/2addr v0, p0
.line 18
shr-int/lit8 v1, v0, 0x2
or-int/2addr v0, v1
.line 19
shr-int/lit8 v1, v0, 0x4
or-int/2addr v0, v1
.line 20
shr-int/lit8 v1, v0, 0x8
or-int/2addr v0, v1
.line 21
shr-int/lit8 v1, v0, 0x10
or-int/2addr v0, v1
.line 22
add-int/lit8 v0, v0, 0x1
return v0
.end method
# virtual methods
.method public addData([BII)V
.registers 9
.prologue
const/4 v4, 0x0
.line 86
iget v0, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->skipped:I
iget v1, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->available:I
add-int/2addr v0, v1
add-int/2addr v0, p3
iget-object v1, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->databuf:[B
array-length v1, v1
if-le v0, v1, :cond_27
.line 88
iget v0, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->available:I
add-int/2addr v0, p3
invoke-static {v0}, Lorg/spongycastle/crypto/tls/ByteQueue;->nextTwoPow(I)I
move-result v0
.line 89
iget-object v1, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->databuf:[B
array-length v1, v1
if-le v0, v1, :cond_37
.line 91
new-array v0, v0, [B
.line 92
iget-object v1, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->databuf:[B
iget v2, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->skipped:I
iget v3, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->available:I
invoke-static {v1, v2, v0, v4, v3}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 93
iput-object v0, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->databuf:[B
.line 99
:goto_25
iput v4, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->skipped:I
.line 102
:cond_27
iget-object v0, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->databuf:[B
iget v1, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->skipped:I
iget v2, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->available:I
add-int/2addr v1, v2
invoke-static {p1, p2, v0, v1, p3}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 103
iget v0, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->available:I
add-int/2addr v0, p3
iput v0, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->available:I
.line 104
return-void
.line 97
:cond_37
iget-object v0, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->databuf:[B
iget v1, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->skipped:I
iget-object v2, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->databuf:[B
iget v3, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->available:I
invoke-static {v0, v1, v2, v4, v3}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
goto :goto_25
.end method
.method public available()I
.registers 2
.prologue
.line 159
iget v0, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->available:I
return v0
.end method
.method public read([BIII)V
.registers 8
.prologue
.line 65
array-length v0, p1
sub-int/2addr v0, p2
if-ge v0, p3, :cond_2a
.line 67
new-instance v0, Ljava/lang/IllegalArgumentException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "Buffer size of "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
array-length v2, p1
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, " is too small for a read of "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1, p3}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, " bytes"
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/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 70
:cond_2a
iget v0, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->available:I
sub-int/2addr v0, p4
if-ge v0, p3, :cond_37
.line 72
new-instance v0, Ljava/lang/IllegalStateException;
const-string v1, "Not enough data to read"
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
.line 74
:cond_37
iget-object v0, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->databuf:[B
iget v1, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->skipped:I
add-int/2addr v1, p4
invoke-static {v0, v1, p1, p2, p3}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 75
return-void
.end method
.method public removeData(I)V
.registers 5
.prologue
.line 113
iget v0, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->available:I
if-le p1, v0, :cond_25
.line 115
new-instance v0, Ljava/lang/IllegalStateException;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "Cannot remove "
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, " bytes, only got "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
iget v2, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->available: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/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
.line 121
:cond_25
iget v0, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->available:I
sub-int/2addr v0, p1
iput v0, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->available:I
.line 122
iget v0, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->skipped:I
add-int/2addr v0, p1
iput v0, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->skipped:I
.line 123
return-void
.end method
.method public removeData([BIII)V
.registers 6
.prologue
.line 135
invoke-virtual {p0, p1, p2, p3, p4}, Lorg/spongycastle/crypto/tls/ByteQueue;->read([BIII)V
.line 136
add-int v0, p4, p3
invoke-virtual {p0, v0}, Lorg/spongycastle/crypto/tls/ByteQueue;->removeData(I)V
.line 137
return-void
.end method
.method public removeData(II)[B
.registers 5
.prologue
.line 141
new-array v0, p1, [B
.line 142
const/4 v1, 0x0
invoke-virtual {p0, v0, v1, p1, p2}, Lorg/spongycastle/crypto/tls/ByteQueue;->removeData([BIII)V
.line 143
return-object v0
.end method
.method public size()I
.registers 2
.prologue
.line 151
iget v0, p0, Lorg/spongycastle/crypto/tls/ByteQueue;->available:I
return v0
.end method