UTF8Decoder.smali
.class public Lcom/tradplus/ads/common/serialization/util/UTF8Decoder;
.super Ljava/nio/charset/CharsetDecoder;
# static fields
.field private static final a:Ljava/nio/charset/Charset;
# direct methods
.method static constructor <clinit>()V
.registers 1
const-string v0, "UTF-8"
invoke-static {v0}, Ljava/nio/charset/Charset;->forName(Ljava/lang/String;)Ljava/nio/charset/Charset;
move-result-object v0
sput-object v0, Lcom/tradplus/ads/common/serialization/util/UTF8Decoder;->a:Ljava/nio/charset/Charset;
return-void
.end method
.method public constructor <init>()V
.registers 3
sget-object v0, Lcom/tradplus/ads/common/serialization/util/UTF8Decoder;->a:Ljava/nio/charset/Charset;
const/high16 v1, 0x3f800000 # 1.0f
invoke-direct {p0, v0, v1, v1}, Ljava/nio/charset/CharsetDecoder;-><init>(Ljava/nio/charset/Charset;FF)V
return-void
.end method
.method private static a(Ljava/nio/Buffer;IILjava/nio/Buffer;II)Ljava/nio/charset/CoderResult;
.registers 6
invoke-virtual {p0, p1}, Ljava/nio/Buffer;->position(I)Ljava/nio/Buffer;
invoke-virtual {p3, p4}, Ljava/nio/Buffer;->position(I)Ljava/nio/Buffer;
if-eqz p5, :cond_f
sub-int/2addr p2, p1
if-ge p2, p5, :cond_c
goto :goto_f
:cond_c
sget-object p0, Ljava/nio/charset/CoderResult;->OVERFLOW:Ljava/nio/charset/CoderResult;
goto :goto_11
:cond_f
:goto_f
sget-object p0, Ljava/nio/charset/CoderResult;->UNDERFLOW:Ljava/nio/charset/CoderResult;
:goto_11
return-object p0
.end method
.method private static a(Ljava/nio/ByteBuffer;I)Ljava/nio/charset/CoderResult;
.registers 4
const/4 v0, 0x1
:goto_1
if-ge v0, p1, :cond_15
invoke-virtual {p0}, Ljava/nio/ByteBuffer;->get()B
move-result v1
invoke-static {v1}, Lcom/tradplus/ads/common/serialization/util/UTF8Decoder;->a(I)Z
move-result v1
if-eqz v1, :cond_12
invoke-static {v0}, Ljava/nio/charset/CoderResult;->malformedForLength(I)Ljava/nio/charset/CoderResult;
move-result-object p0
return-object p0
:cond_12
add-int/lit8 v0, v0, 0x1
goto :goto_1
:cond_15
invoke-static {p1}, Ljava/nio/charset/CoderResult;->malformedForLength(I)Ljava/nio/charset/CoderResult;
move-result-object p0
return-object p0
.end method
.method private static a(Ljava/nio/ByteBuffer;ILjava/nio/CharBuffer;II)Ljava/nio/charset/CoderResult;
.registers 6
invoke-virtual {p0}, Ljava/nio/ByteBuffer;->arrayOffset()I
move-result v0
sub-int v0, p1, v0
invoke-virtual {p0, v0}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;
invoke-static {p0, p4}, Lcom/tradplus/ads/common/serialization/util/UTF8Decoder;->malformedN(Ljava/nio/ByteBuffer;I)Ljava/nio/charset/CoderResult;
move-result-object p4
invoke-virtual {p0, p1}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;
invoke-virtual {p2, p3}, Ljava/nio/CharBuffer;->position(I)Ljava/nio/Buffer;
return-object p4
.end method
.method private a(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;
.registers 15
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->array()[B
move-result-object v0
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->arrayOffset()I
move-result v1
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->position()I
move-result v2
add-int/2addr v1, v2
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->arrayOffset()I
move-result v2
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->limit()I
move-result v3
add-int v6, v2, v3
invoke-virtual {p2}, Ljava/nio/CharBuffer;->array()[C
move-result-object v2
invoke-virtual {p2}, Ljava/nio/CharBuffer;->arrayOffset()I
move-result v3
invoke-virtual {p2}, Ljava/nio/CharBuffer;->position()I
move-result v4
add-int/2addr v3, v4
invoke-virtual {p2}, Ljava/nio/CharBuffer;->arrayOffset()I
move-result v4
invoke-virtual {p2}, Ljava/nio/CharBuffer;->limit()I
move-result v5
add-int/2addr v4, v5
sub-int v5, v6, v1
sub-int v7, v4, v3
invoke-static {v5, v7}, Ljava/lang/Math;->min(II)I
move-result v5
add-int/2addr v5, v3
:goto_36
if-ge v3, v5, :cond_48
aget-byte v7, v0, v1
if-ltz v7, :cond_48
add-int/lit8 v7, v3, 0x1
add-int/lit8 v8, v1, 0x1
aget-byte v1, v0, v1
int-to-char v1, v1
aput-char v1, v2, v3
move v3, v7
move v1, v8
goto :goto_36
:cond_48
move v5, v1
:goto_49
move v8, v3
:goto_4a
if-ge v5, v6, :cond_136
aget-byte v1, v0, v5
if-ltz v1, :cond_62
if-lt v8, v4, :cond_5a
const/4 v9, 0x1
move-object v4, p1
move-object v7, p2
invoke-static/range {v4 .. v9}, Lcom/tradplus/ads/common/serialization/util/UTF8Decoder;->a(Ljava/nio/Buffer;IILjava/nio/Buffer;II)Ljava/nio/charset/CoderResult;
move-result-object p1
return-object p1
:cond_5a
add-int/lit8 v3, v8, 0x1
int-to-char v1, v1
aput-char v1, v2, v8
add-int/lit8 v5, v5, 0x1
goto :goto_49
:cond_62
shr-int/lit8 v3, v1, 0x5
const/4 v7, -0x2
const/4 v9, 0x2
if-ne v3, v7, :cond_94
sub-int v3, v6, v5
if-lt v3, v9, :cond_8c
if-lt v8, v4, :cond_6f
goto :goto_8c
:cond_6f
add-int/lit8 v3, v5, 0x1
aget-byte v3, v0, v3
invoke-static {v1, v3}, Lcom/tradplus/ads/common/serialization/util/UTF8Decoder;->a(II)Z
move-result v7
if-eqz v7, :cond_7e
invoke-static {p1, v5, p2, v8, v9}, Lcom/tradplus/ads/common/serialization/util/UTF8Decoder;->a(Ljava/nio/ByteBuffer;ILjava/nio/CharBuffer;II)Ljava/nio/charset/CoderResult;
move-result-object p1
return-object p1
:cond_7e
add-int/lit8 v7, v8, 0x1
shl-int/lit8 v1, v1, 0x6
xor-int/2addr v1, v3
xor-int/lit16 v1, v1, 0xf80
int-to-char v1, v1
aput-char v1, v2, v8
add-int/lit8 v5, v5, 0x2
:goto_8a
move v8, v7
goto :goto_4a
:cond_8c
:goto_8c
const/4 v9, 0x2
move-object v4, p1
move-object v7, p2
invoke-static/range {v4 .. v9}, Lcom/tradplus/ads/common/serialization/util/UTF8Decoder;->a(Ljava/nio/Buffer;IILjava/nio/Buffer;II)Ljava/nio/charset/CoderResult;
move-result-object p1
return-object p1
:cond_94
shr-int/lit8 v3, v1, 0x4
if-ne v3, v7, :cond_cb
sub-int v3, v6, v5
const/4 v7, 0x3
if-lt v3, v7, :cond_c3
if-lt v8, v4, :cond_a0
goto :goto_c3
:cond_a0
add-int/lit8 v3, v5, 0x1
aget-byte v3, v0, v3
add-int/lit8 v9, v5, 0x2
aget-byte v9, v0, v9
invoke-static {v1, v3, v9}, Lcom/tradplus/ads/common/serialization/util/UTF8Decoder;->a(III)Z
move-result v10
if-eqz v10, :cond_b3
invoke-static {p1, v5, p2, v8, v7}, Lcom/tradplus/ads/common/serialization/util/UTF8Decoder;->a(Ljava/nio/ByteBuffer;ILjava/nio/CharBuffer;II)Ljava/nio/charset/CoderResult;
move-result-object p1
return-object p1
:cond_b3
add-int/lit8 v7, v8, 0x1
shl-int/lit8 v1, v1, 0xc
shl-int/lit8 v3, v3, 0x6
xor-int/2addr v1, v3
xor-int/2addr v1, v9
xor-int/lit16 v1, v1, 0x1f80
int-to-char v1, v1
aput-char v1, v2, v8
add-int/lit8 v5, v5, 0x3
goto :goto_8a
:cond_c3
:goto_c3
const/4 v9, 0x3
move-object v4, p1
move-object v7, p2
invoke-static/range {v4 .. v9}, Lcom/tradplus/ads/common/serialization/util/UTF8Decoder;->a(Ljava/nio/Buffer;IILjava/nio/Buffer;II)Ljava/nio/charset/CoderResult;
move-result-object p1
return-object p1
:cond_cb
shr-int/lit8 v3, v1, 0x3
if-ne v3, v7, :cond_130
sub-int v3, v6, v5
const/4 v7, 0x4
if-lt v3, v7, :cond_128
sub-int v3, v4, v8
if-ge v3, v9, :cond_d9
goto :goto_128
:cond_d9
add-int/lit8 v3, v5, 0x1
aget-byte v3, v0, v3
add-int/lit8 v9, v5, 0x2
aget-byte v9, v0, v9
add-int/lit8 v10, v5, 0x3
aget-byte v10, v0, v10
and-int/lit8 v1, v1, 0x7
shl-int/lit8 v1, v1, 0x12
and-int/lit8 v11, v3, 0x3f
shl-int/lit8 v11, v11, 0xc
or-int/2addr v1, v11
and-int/lit8 v11, v9, 0x3f
shl-int/lit8 v11, v11, 0x6
or-int/2addr v1, v11
and-int/lit8 v11, v10, 0x3f
or-int/2addr v1, v11
invoke-static {v3, v9, v10}, Lcom/tradplus/ads/common/serialization/util/UTF8Decoder;->b(III)Z
move-result v3
if-nez v3, :cond_123
const/high16 v3, 0x10000
if-lt v1, v3, :cond_123
const v9, 0x10ffff
if-le v1, v9, :cond_106
goto :goto_123
:cond_106
add-int/lit8 v7, v8, 0x1
const v9, 0xd800
sub-int/2addr v1, v3
shr-int/lit8 v3, v1, 0xa
and-int/lit16 v3, v3, 0x3ff
or-int/2addr v3, v9
int-to-char v3, v3
aput-char v3, v2, v8
add-int/lit8 v3, v7, 0x1
const v8, 0xdc00
and-int/lit16 v1, v1, 0x3ff
or-int/2addr v1, v8
int-to-char v1, v1
aput-char v1, v2, v7
add-int/lit8 v5, v5, 0x4
goto/16 :goto_49
:cond_123
:goto_123
invoke-static {p1, v5, p2, v8, v7}, Lcom/tradplus/ads/common/serialization/util/UTF8Decoder;->a(Ljava/nio/ByteBuffer;ILjava/nio/CharBuffer;II)Ljava/nio/charset/CoderResult;
move-result-object p1
return-object p1
:cond_128
:goto_128
const/4 v9, 0x4
move-object v4, p1
move-object v7, p2
invoke-static/range {v4 .. v9}, Lcom/tradplus/ads/common/serialization/util/UTF8Decoder;->a(Ljava/nio/Buffer;IILjava/nio/Buffer;II)Ljava/nio/charset/CoderResult;
move-result-object p1
return-object p1
:cond_130
const/4 v0, 0x1
invoke-static {p1, v5, p2, v8, v0}, Lcom/tradplus/ads/common/serialization/util/UTF8Decoder;->a(Ljava/nio/ByteBuffer;ILjava/nio/CharBuffer;II)Ljava/nio/charset/CoderResult;
move-result-object p1
return-object p1
:cond_136
const/4 v9, 0x0
move-object v4, p1
move-object v7, p2
invoke-static/range {v4 .. v9}, Lcom/tradplus/ads/common/serialization/util/UTF8Decoder;->a(Ljava/nio/Buffer;IILjava/nio/Buffer;II)Ljava/nio/charset/CoderResult;
move-result-object p1
return-object p1
.end method
.method private static a(I)Z
.registers 2
and-int/lit16 p0, p0, 0xc0
const/16 v0, 0x80
if-eq p0, v0, :cond_8
const/4 p0, 0x1
goto :goto_9
:cond_8
const/4 p0, 0x0
:goto_9
return p0
.end method
.method private static a(II)Z
.registers 2
and-int/lit8 p0, p0, 0x1e
if-eqz p0, :cond_d
and-int/lit16 p0, p1, 0xc0
const/16 p1, 0x80
if-eq p0, p1, :cond_b
goto :goto_d
:cond_b
const/4 p0, 0x0
goto :goto_e
:cond_d
:goto_d
const/4 p0, 0x1
:goto_e
return p0
.end method
.method private static a(III)Z
.registers 5
const/16 v0, 0x80
const/16 v1, -0x20
if-ne p0, v1, :cond_a
and-int/lit16 p0, p1, 0xe0
if-eq p0, v0, :cond_15
:cond_a
and-int/lit16 p0, p1, 0xc0
if-ne p0, v0, :cond_15
and-int/lit16 p0, p2, 0xc0
if-eq p0, v0, :cond_13
goto :goto_15
:cond_13
const/4 p0, 0x0
goto :goto_16
:cond_15
:goto_15
const/4 p0, 0x1
:goto_16
return p0
.end method
.method private static b(III)Z
.registers 4
and-int/lit16 p0, p0, 0xc0
const/16 v0, 0x80
if-ne p0, v0, :cond_11
and-int/lit16 p0, p1, 0xc0
if-ne p0, v0, :cond_11
and-int/lit16 p0, p2, 0xc0
if-eq p0, v0, :cond_f
goto :goto_11
:cond_f
const/4 p0, 0x0
goto :goto_12
:cond_11
:goto_11
const/4 p0, 0x1
:goto_12
return p0
.end method
.method public static malformedN(Ljava/nio/ByteBuffer;I)Ljava/nio/charset/CoderResult;
.registers 9
const/4 v0, 0x4
const/4 v1, 0x1
if-eq p1, v1, :cond_78
const/4 v2, 0x2
if-eq p1, v2, :cond_73
const/16 v3, 0x80
const/4 v4, 0x3
if-eq p1, v4, :cond_56
if-ne p1, v0, :cond_50
invoke-virtual {p0}, Ljava/nio/ByteBuffer;->get()B
move-result p1
and-int/lit16 p1, p1, 0xff
invoke-virtual {p0}, Ljava/nio/ByteBuffer;->get()B
move-result v0
and-int/lit16 v0, v0, 0xff
const/16 v5, 0xf4
if-gt p1, v5, :cond_4b
const/16 v6, 0xf0
if-ne p1, v6, :cond_2a
const/16 v6, 0x90
if-lt v0, v6, :cond_4b
const/16 v6, 0xbf
if-gt v0, v6, :cond_4b
:cond_2a
if-ne p1, v5, :cond_30
and-int/lit16 p1, v0, 0xf0
if-ne p1, v3, :cond_4b
:cond_30
invoke-static {v0}, Lcom/tradplus/ads/common/serialization/util/UTF8Decoder;->a(I)Z
move-result p1
if-eqz p1, :cond_37
goto :goto_4b
:cond_37
invoke-virtual {p0}, Ljava/nio/ByteBuffer;->get()B
move-result p0
invoke-static {p0}, Lcom/tradplus/ads/common/serialization/util/UTF8Decoder;->a(I)Z
move-result p0
if-eqz p0, :cond_46
invoke-static {v2}, Ljava/nio/charset/CoderResult;->malformedForLength(I)Ljava/nio/charset/CoderResult;
move-result-object p0
return-object p0
:cond_46
invoke-static {v4}, Ljava/nio/charset/CoderResult;->malformedForLength(I)Ljava/nio/charset/CoderResult;
move-result-object p0
return-object p0
:cond_4b
:goto_4b
invoke-static {v1}, Ljava/nio/charset/CoderResult;->malformedForLength(I)Ljava/nio/charset/CoderResult;
move-result-object p0
return-object p0
:cond_50
new-instance p0, Ljava/lang/IllegalStateException;
invoke-direct {p0}, Ljava/lang/IllegalStateException;-><init>()V
throw p0
:cond_56
invoke-virtual {p0}, Ljava/nio/ByteBuffer;->get()B
move-result p1
invoke-virtual {p0}, Ljava/nio/ByteBuffer;->get()B
move-result p0
const/16 v0, -0x20
if-ne p1, v0, :cond_66
and-int/lit16 p1, p0, 0xe0
if-eq p1, v3, :cond_6e
:cond_66
invoke-static {p0}, Lcom/tradplus/ads/common/serialization/util/UTF8Decoder;->a(I)Z
move-result p0
if-eqz p0, :cond_6d
goto :goto_6e
:cond_6d
const/4 v1, 0x2
:cond_6e
:goto_6e
invoke-static {v1}, Ljava/nio/charset/CoderResult;->malformedForLength(I)Ljava/nio/charset/CoderResult;
move-result-object p0
return-object p0
:cond_73
invoke-static {v1}, Ljava/nio/charset/CoderResult;->malformedForLength(I)Ljava/nio/charset/CoderResult;
move-result-object p0
return-object p0
:cond_78
invoke-virtual {p0}, Ljava/nio/ByteBuffer;->get()B
move-result p1
shr-int/lit8 v2, p1, 0x2
const/4 v3, 0x5
const/4 v4, -0x2
if-ne v2, v4, :cond_90
invoke-virtual {p0}, Ljava/nio/ByteBuffer;->remaining()I
move-result p1
if-ge p1, v0, :cond_8b
sget-object p0, Ljava/nio/charset/CoderResult;->UNDERFLOW:Ljava/nio/charset/CoderResult;
return-object p0
:cond_8b
invoke-static {p0, v3}, Lcom/tradplus/ads/common/serialization/util/UTF8Decoder;->a(Ljava/nio/ByteBuffer;I)Ljava/nio/charset/CoderResult;
move-result-object p0
return-object p0
:cond_90
shr-int/2addr p1, v1
if-ne p1, v4, :cond_a2
invoke-virtual {p0}, Ljava/nio/ByteBuffer;->remaining()I
move-result p1
if-ge p1, v3, :cond_9c
sget-object p0, Ljava/nio/charset/CoderResult;->UNDERFLOW:Ljava/nio/charset/CoderResult;
return-object p0
:cond_9c
const/4 p1, 0x6
invoke-static {p0, p1}, Lcom/tradplus/ads/common/serialization/util/UTF8Decoder;->a(Ljava/nio/ByteBuffer;I)Ljava/nio/charset/CoderResult;
move-result-object p0
return-object p0
:cond_a2
invoke-static {v1}, Ljava/nio/charset/CoderResult;->malformedForLength(I)Ljava/nio/charset/CoderResult;
move-result-object p0
return-object p0
.end method
# virtual methods
.method protected decodeLoop(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;
.registers 3
invoke-direct {p0, p1, p2}, Lcom/tradplus/ads/common/serialization/util/UTF8Decoder;->a(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;
move-result-object p1
return-object p1
.end method