BufferUtils.smali
.class final Lorg/conscrypt/BufferUtils;
.super Ljava/lang/Object;
.source ""
# direct methods
.method private constructor <init>()V
.registers 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method static checkNotNull([Ljava/nio/ByteBuffer;)V
.registers 4
array-length v0, p0
const/4 v1, 0x0
:goto_2
if-ge v1, v0, :cond_13
aget-object v2, p0, v1
if-eqz v2, :cond_b
add-int/lit8 v1, v1, 0x1
goto :goto_2
:cond_b
new-instance p0, Ljava/lang/IllegalArgumentException;
const-string v0, "Null buffer in array"
invoke-direct {p0, v0}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw p0
:cond_13
return-void
.end method
.method static consume([Ljava/nio/ByteBuffer;I)V
.registers 7
array-length v0, p0
const/4 v1, 0x0
:goto_2
if-ge v1, v0, :cond_1f
aget-object v2, p0, v1
invoke-virtual {v2}, Ljava/nio/ByteBuffer;->remaining()I
move-result v3
invoke-static {v3, p1}, Ljava/lang/Math;->min(II)I
move-result v3
if-lez v3, :cond_1c
invoke-virtual {v2}, Ljava/nio/ByteBuffer;->position()I
move-result v4
add-int/2addr v4, v3
invoke-virtual {v2, v4}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;
sub-int/2addr p1, v3
if-nez p1, :cond_1c
goto :goto_1f
:cond_1c
add-int/lit8 v1, v1, 0x1
goto :goto_2
:cond_1f
:goto_1f
if-gtz p1, :cond_22
return-void
:cond_22
new-instance p0, Ljava/lang/IllegalArgumentException;
const-string p1, "toConsume > data size"
invoke-direct {p0, p1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
goto :goto_2b
:goto_2a
throw p0
:goto_2b
goto :goto_2a
.end method
.method static copyNoConsume([Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;I)Ljava/nio/ByteBuffer;
.registers 10
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->remaining()I
move-result v0
const/4 v1, 0x0
if-lt v0, p2, :cond_9
const/4 v0, 0x1
goto :goto_a
:cond_9
const/4 v0, 0x0
:goto_a
const-string v2, "Destination buffer too small"
invoke-static {v0, v2}, Lorg/conscrypt/Preconditions;->checkArgument(ZLjava/lang/String;)V
array-length v0, p0
const/4 v2, 0x0
:goto_11
if-ge v2, v0, :cond_42
aget-object v3, p0, v2
invoke-virtual {v3}, Ljava/nio/ByteBuffer;->remaining()I
move-result v4
if-lez v4, :cond_3f
invoke-virtual {v3}, Ljava/nio/ByteBuffer;->position()I
move-result v5
if-gt v4, p2, :cond_26
invoke-virtual {p1, v3}, Ljava/nio/ByteBuffer;->put(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
sub-int/2addr p2, v4
goto :goto_39
:cond_26
invoke-virtual {v3}, Ljava/nio/ByteBuffer;->limit()I
move-result v4
invoke-virtual {v3}, Ljava/nio/ByteBuffer;->position()I
move-result v6
add-int/2addr v6, p2
invoke-virtual {v3, v6}, Ljava/nio/ByteBuffer;->limit(I)Ljava/nio/Buffer;
invoke-virtual {p1, v3}, Ljava/nio/ByteBuffer;->put(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
invoke-virtual {v3, v4}, Ljava/nio/ByteBuffer;->limit(I)Ljava/nio/Buffer;
const/4 p2, 0x0
:goto_39
invoke-virtual {v3, v5}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;
if-nez p2, :cond_3f
goto :goto_42
:cond_3f
add-int/lit8 v2, v2, 0x1
goto :goto_11
:cond_42
:goto_42
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->flip()Ljava/nio/Buffer;
return-object p1
.end method
.method static getBufferLargerThan([Ljava/nio/ByteBuffer;I)Ljava/nio/ByteBuffer;
.registers 7
array-length v0, p0
const/4 v1, 0x0
:goto_2
const/4 v2, 0x0
if-ge v1, v0, :cond_21
aget-object v3, p0, v1
invoke-virtual {v3}, Ljava/nio/ByteBuffer;->remaining()I
move-result v4
if-lez v4, :cond_1e
if-lt v4, p1, :cond_10
return-object v3
:cond_10
add-int/lit8 v1, v1, 0x1
if-ge v1, v0, :cond_1d
aget-object p1, p0, v1
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->remaining()I
move-result p1
if-lez p1, :cond_10
return-object v2
:cond_1d
return-object v3
:cond_1e
add-int/lit8 v1, v1, 0x1
goto :goto_2
:cond_21
return-object v2
.end method
.method static remaining([Ljava/nio/ByteBuffer;)J
.registers 7
array-length v0, p0
const-wide/16 v1, 0x0
const/4 v3, 0x0
:goto_4
if-ge v3, v0, :cond_11
aget-object v4, p0, v3
invoke-virtual {v4}, Ljava/nio/ByteBuffer;->remaining()I
move-result v4
int-to-long v4, v4
add-long/2addr v1, v4
add-int/lit8 v3, v3, 0x1
goto :goto_4
:cond_11
return-wide v1
.end method