IOUtils.smali

.class public Lcom/alibaba/fastjson/util/IOUtils;
.super Ljava/lang/Object;
.source "IOUtils.java"


# static fields
.field public static final ASCII_CHARS:[C

.field public static final DIGITS:[C

.field static final DigitOnes:[C

.field static final DigitTens:[C

.field static final digits:[C

.field public static final firstIdentifierFlags:[Z

.field public static final identifierFlags:[Z

.field public static final replaceChars:[C

.field static final sizeTable:[I

.field public static final specicalFlags_doubleQuotes:[B

.field public static final specicalFlags_singleQuotes:[B


# direct methods
.method static constructor <clinit>()V
    .registers 18

    .line 25
    const/16 v0, 0x10

    new-array v0, v0, [C

    fill-array-data v0, :array_16c

    sput-object v0, Lcom/alibaba/fastjson/util/IOUtils;->DIGITS:[C

    .line 28
    const/16 v0, 0x100

    new-array v1, v0, [Z

    sput-object v1, Lcom/alibaba/fastjson/util/IOUtils;->firstIdentifierFlags:[Z

    .line 30
    const/4 v1, 0x0

    .local v1, "c":C
    :goto_10
    sget-object v2, Lcom/alibaba/fastjson/util/IOUtils;->firstIdentifierFlags:[Z

    array-length v3, v2

    const/16 v4, 0x5f

    const/16 v5, 0x5a

    const/16 v6, 0x61

    const/16 v7, 0x41

    const/4 v8, 0x1

    if-ge v1, v3, :cond_3a

    .line 31
    if-lt v1, v7, :cond_25

    if-gt v1, v5, :cond_25

    .line 32
    aput-boolean v8, v2, v1

    goto :goto_36

    .line 33
    :cond_25
    if-lt v1, v6, :cond_30

    const/16 v2, 0x7a

    if-gt v1, v2, :cond_30

    .line 34
    sget-object v2, Lcom/alibaba/fastjson/util/IOUtils;->firstIdentifierFlags:[Z

    aput-boolean v8, v2, v1

    goto :goto_36

    .line 35
    :cond_30
    if-ne v1, v4, :cond_36

    .line 36
    sget-object v2, Lcom/alibaba/fastjson/util/IOUtils;->firstIdentifierFlags:[Z

    aput-boolean v8, v2, v1

    .line 30
    :cond_36
    :goto_36
    add-int/lit8 v2, v1, 0x1

    int-to-char v1, v2

    goto :goto_10

    .line 41
    .end local v1    # "c":C
    :cond_3a
    new-array v1, v0, [Z

    sput-object v1, Lcom/alibaba/fastjson/util/IOUtils;->identifierFlags:[Z

    .line 44
    const/4 v1, 0x0

    .restart local v1    # "c":C
    :goto_3f
    sget-object v2, Lcom/alibaba/fastjson/util/IOUtils;->identifierFlags:[Z

    array-length v3, v2

    if-ge v1, v3, :cond_6d

    .line 45
    if-lt v1, v7, :cond_4b

    if-gt v1, v5, :cond_4b

    .line 46
    aput-boolean v8, v2, v1

    goto :goto_69

    .line 47
    :cond_4b
    if-lt v1, v6, :cond_56

    const/16 v2, 0x7a

    if-gt v1, v2, :cond_56

    .line 48
    sget-object v2, Lcom/alibaba/fastjson/util/IOUtils;->identifierFlags:[Z

    aput-boolean v8, v2, v1

    goto :goto_69

    .line 49
    :cond_56
    if-ne v1, v4, :cond_5d

    .line 50
    sget-object v2, Lcom/alibaba/fastjson/util/IOUtils;->identifierFlags:[Z

    aput-boolean v8, v2, v1

    goto :goto_69

    .line 51
    :cond_5d
    const/16 v2, 0x30

    if-lt v1, v2, :cond_69

    const/16 v2, 0x39

    if-gt v1, v2, :cond_69

    .line 52
    sget-object v2, Lcom/alibaba/fastjson/util/IOUtils;->identifierFlags:[Z

    aput-boolean v8, v2, v1

    .line 44
    :cond_69
    :goto_69
    add-int/lit8 v2, v1, 0x1

    int-to-char v1, v2

    goto :goto_3f

    .line 57
    .end local v1    # "c":C
    :cond_6d
    new-array v1, v0, [B

    sput-object v1, Lcom/alibaba/fastjson/util/IOUtils;->specicalFlags_doubleQuotes:[B

    .line 58
    new-array v0, v0, [B

    sput-object v0, Lcom/alibaba/fastjson/util/IOUtils;->specicalFlags_singleQuotes:[B

    .line 60
    const/16 v2, 0x80

    new-array v2, v2, [C

    sput-object v2, Lcom/alibaba/fastjson/util/IOUtils;->replaceChars:[C

    .line 62
    const/4 v2, 0x0

    const/4 v3, 0x4

    aput-byte v3, v1, v2

    .line 63
    aput-byte v3, v1, v8

    .line 64
    const/4 v4, 0x2

    aput-byte v3, v1, v4

    .line 65
    const/4 v5, 0x3

    aput-byte v3, v1, v5

    .line 66
    aput-byte v3, v1, v3

    .line 67
    const/4 v6, 0x5

    aput-byte v3, v1, v6

    .line 68
    const/4 v7, 0x6

    aput-byte v3, v1, v7

    .line 69
    const/4 v9, 0x7

    aput-byte v3, v1, v9

    .line 70
    const/16 v10, 0x8

    aput-byte v8, v1, v10

    .line 71
    const/16 v11, 0x9

    aput-byte v8, v1, v11

    .line 72
    const/16 v12, 0xa

    aput-byte v8, v1, v12

    .line 73
    const/16 v13, 0xb

    aput-byte v3, v1, v13

    .line 74
    const/16 v14, 0xc

    aput-byte v8, v1, v14

    .line 75
    const/16 v15, 0xd

    aput-byte v8, v1, v15

    .line 76
    const/16 v16, 0x22

    aput-byte v8, v1, v16

    .line 77
    const/16 v17, 0x5c

    aput-byte v8, v1, v17

    .line 79
    aput-byte v3, v0, v2

    .line 80
    aput-byte v3, v0, v8

    .line 81
    aput-byte v3, v0, v4

    .line 82
    aput-byte v3, v0, v5

    .line 83
    aput-byte v3, v0, v3

    .line 84
    aput-byte v3, v0, v6

    .line 85
    aput-byte v3, v0, v7

    .line 86
    aput-byte v3, v0, v9

    .line 87
    aput-byte v8, v0, v10

    .line 88
    aput-byte v8, v0, v11

    .line 89
    aput-byte v8, v0, v12

    .line 90
    aput-byte v3, v0, v13

    .line 91
    aput-byte v8, v0, v14

    .line 92
    aput-byte v8, v0, v15

    .line 93
    aput-byte v8, v0, v17

    .line 94
    const/16 v1, 0x27

    aput-byte v8, v0, v1

    .line 96
    const/16 v0, 0xe

    .local v0, "i":I
    :goto_d6
    const/16 v1, 0x1f

    if-gt v0, v1, :cond_e7

    .line 97
    sget-object v1, Lcom/alibaba/fastjson/util/IOUtils;->specicalFlags_doubleQuotes:[B

    aput-byte v3, v1, v0

    .line 98
    sget-object v1, Lcom/alibaba/fastjson/util/IOUtils;->specicalFlags_singleQuotes:[B

    aput-byte v3, v1, v0

    .line 96
    add-int/lit8 v0, v0, 0x1

    const/16 v1, 0x27

    goto :goto_d6

    .line 101
    .end local v0    # "i":I
    :cond_e7
    const/16 v0, 0x7f

    .restart local v0    # "i":I
    :goto_e9
    const/16 v1, 0xa0

    if-gt v0, v1, :cond_f8

    .line 102
    sget-object v1, Lcom/alibaba/fastjson/util/IOUtils;->specicalFlags_doubleQuotes:[B

    aput-byte v3, v1, v0

    .line 103
    sget-object v1, Lcom/alibaba/fastjson/util/IOUtils;->specicalFlags_singleQuotes:[B

    aput-byte v3, v1, v0

    .line 101
    add-int/lit8 v0, v0, 0x1

    goto :goto_e9

    .line 106
    .end local v0    # "i":I
    :cond_f8
    sget-object v0, Lcom/alibaba/fastjson/util/IOUtils;->replaceChars:[C

    const/16 v1, 0x30

    aput-char v1, v0, v2

    .line 107
    const/16 v1, 0x31

    aput-char v1, v0, v8

    .line 108
    const/16 v1, 0x32

    aput-char v1, v0, v4

    .line 109
    const/16 v1, 0x33

    aput-char v1, v0, v5

    .line 110
    const/16 v1, 0x34

    aput-char v1, v0, v3

    .line 111
    const/16 v1, 0x35

    aput-char v1, v0, v6

    .line 112
    const/16 v1, 0x36

    aput-char v1, v0, v7

    .line 113
    const/16 v1, 0x37

    aput-char v1, v0, v9

    .line 114
    const/16 v1, 0x62

    aput-char v1, v0, v10

    .line 115
    const/16 v1, 0x74

    aput-char v1, v0, v11

    .line 116
    const/16 v1, 0x6e

    aput-char v1, v0, v12

    .line 117
    const/16 v1, 0x76

    aput-char v1, v0, v13

    .line 118
    const/16 v1, 0x66

    aput-char v1, v0, v14

    .line 119
    const/16 v1, 0x72

    aput-char v1, v0, v15

    .line 120
    aput-char v16, v0, v16

    .line 121
    const/16 v1, 0x27

    aput-char v1, v0, v1

    .line 122
    const/16 v1, 0x2f

    const/16 v2, 0x2f

    aput-char v2, v0, v1

    .line 123
    aput-char v17, v0, v17

    .line 126
    const/16 v0, 0x60

    new-array v0, v0, [C

    fill-array-data v0, :array_180

    sput-object v0, Lcom/alibaba/fastjson/util/IOUtils;->ASCII_CHARS:[C

    .line 203
    const/16 v0, 0x24

    new-array v0, v0, [C

    fill-array-data v0, :array_1e4

    sput-object v0, Lcom/alibaba/fastjson/util/IOUtils;->digits:[C

    .line 206
    const/16 v0, 0x64

    new-array v0, v0, [C

    fill-array-data v0, :array_20c

    sput-object v0, Lcom/alibaba/fastjson/util/IOUtils;->DigitTens:[C

    .line 212
    const/16 v0, 0x64

    new-array v0, v0, [C

    fill-array-data v0, :array_274

    sput-object v0, Lcom/alibaba/fastjson/util/IOUtils;->DigitOnes:[C

    .line 218
    new-array v0, v12, [I

    fill-array-data v0, :array_2dc

    sput-object v0, Lcom/alibaba/fastjson/util/IOUtils;->sizeTable:[I

    return-void

    :array_16c
    .array-data 2
        0x30s
        0x31s
        0x32s
        0x33s
        0x34s
        0x35s
        0x36s
        0x37s
        0x38s
        0x39s
        0x41s
        0x42s
        0x43s
        0x44s
        0x45s
        0x46s
    .end array-data

    :array_180
    .array-data 2
        0x30s
        0x30s
        0x30s
        0x31s
        0x30s
        0x32s
        0x30s
        0x33s
        0x30s
        0x34s
        0x30s
        0x35s
        0x30s
        0x36s
        0x30s
        0x37s
        0x30s
        0x38s
        0x30s
        0x39s
        0x30s
        0x41s
        0x30s
        0x42s
        0x30s
        0x43s
        0x30s
        0x44s
        0x30s
        0x45s
        0x30s
        0x46s
        0x31s
        0x30s
        0x31s
        0x31s
        0x31s
        0x32s
        0x31s
        0x33s
        0x31s
        0x34s
        0x31s
        0x35s
        0x31s
        0x36s
        0x31s
        0x37s
        0x31s
        0x38s
        0x31s
        0x39s
        0x31s
        0x41s
        0x31s
        0x42s
        0x31s
        0x43s
        0x31s
        0x44s
        0x31s
        0x45s
        0x31s
        0x46s
        0x32s
        0x30s
        0x32s
        0x31s
        0x32s
        0x32s
        0x32s
        0x33s
        0x32s
        0x34s
        0x32s
        0x35s
        0x32s
        0x36s
        0x32s
        0x37s
        0x32s
        0x38s
        0x32s
        0x39s
        0x32s
        0x41s
        0x32s
        0x42s
        0x32s
        0x43s
        0x32s
        0x44s
        0x32s
        0x45s
        0x32s
        0x46s
    .end array-data

    :array_1e4
    .array-data 2
        0x30s
        0x31s
        0x32s
        0x33s
        0x34s
        0x35s
        0x36s
        0x37s
        0x38s
        0x39s
        0x61s
        0x62s
        0x63s
        0x64s
        0x65s
        0x66s
        0x67s
        0x68s
        0x69s
        0x6as
        0x6bs
        0x6cs
        0x6ds
        0x6es
        0x6fs
        0x70s
        0x71s
        0x72s
        0x73s
        0x74s
        0x75s
        0x76s
        0x77s
        0x78s
        0x79s
        0x7as
    .end array-data

    :array_20c
    .array-data 2
        0x30s
        0x30s
        0x30s
        0x30s
        0x30s
        0x30s
        0x30s
        0x30s
        0x30s
        0x30s
        0x31s
        0x31s
        0x31s
        0x31s
        0x31s
        0x31s
        0x31s
        0x31s
        0x31s
        0x31s
        0x32s
        0x32s
        0x32s
        0x32s
        0x32s
        0x32s
        0x32s
        0x32s
        0x32s
        0x32s
        0x33s
        0x33s
        0x33s
        0x33s
        0x33s
        0x33s
        0x33s
        0x33s
        0x33s
        0x33s
        0x34s
        0x34s
        0x34s
        0x34s
        0x34s
        0x34s
        0x34s
        0x34s
        0x34s
        0x34s
        0x35s
        0x35s
        0x35s
        0x35s
        0x35s
        0x35s
        0x35s
        0x35s
        0x35s
        0x35s
        0x36s
        0x36s
        0x36s
        0x36s
        0x36s
        0x36s
        0x36s
        0x36s
        0x36s
        0x36s
        0x37s
        0x37s
        0x37s
        0x37s
        0x37s
        0x37s
        0x37s
        0x37s
        0x37s
        0x37s
        0x38s
        0x38s
        0x38s
        0x38s
        0x38s
        0x38s
        0x38s
        0x38s
        0x38s
        0x38s
        0x39s
        0x39s
        0x39s
        0x39s
        0x39s
        0x39s
        0x39s
        0x39s
        0x39s
        0x39s
    .end array-data

    :array_274
    .array-data 2
        0x30s
        0x31s
        0x32s
        0x33s
        0x34s
        0x35s
        0x36s
        0x37s
        0x38s
        0x39s
        0x30s
        0x31s
        0x32s
        0x33s
        0x34s
        0x35s
        0x36s
        0x37s
        0x38s
        0x39s
        0x30s
        0x31s
        0x32s
        0x33s
        0x34s
        0x35s
        0x36s
        0x37s
        0x38s
        0x39s
        0x30s
        0x31s
        0x32s
        0x33s
        0x34s
        0x35s
        0x36s
        0x37s
        0x38s
        0x39s
        0x30s
        0x31s
        0x32s
        0x33s
        0x34s
        0x35s
        0x36s
        0x37s
        0x38s
        0x39s
        0x30s
        0x31s
        0x32s
        0x33s
        0x34s
        0x35s
        0x36s
        0x37s
        0x38s
        0x39s
        0x30s
        0x31s
        0x32s
        0x33s
        0x34s
        0x35s
        0x36s
        0x37s
        0x38s
        0x39s
        0x30s
        0x31s
        0x32s
        0x33s
        0x34s
        0x35s
        0x36s
        0x37s
        0x38s
        0x39s
        0x30s
        0x31s
        0x32s
        0x33s
        0x34s
        0x35s
        0x36s
        0x37s
        0x38s
        0x39s
        0x30s
        0x31s
        0x32s
        0x33s
        0x34s
        0x35s
        0x36s
        0x37s
        0x38s
        0x39s
    .end array-data

    :array_2dc
    .array-data 4
        0x9
        0x63
        0x3e7
        0x270f
        0x1869f
        0xf423f
        0x98967f
        0x5f5e0ff
        0x3b9ac9ff
        0x7fffffff
    .end array-data
.end method

.method public constructor <init>()V
    .registers 1

    .line 23
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    return-void
.end method

.method public static close(Ljava/io/Closeable;)V
    .registers 2
    .param p0, "x"    # Ljava/io/Closeable;

    .line 134
    if-eqz p0, :cond_7

    .line 136
    :try_start_2
    invoke-interface {p0}, Ljava/io/Closeable;->close()V
    :try_end_5
    .catch Ljava/lang/Exception; {:try_start_2 .. :try_end_5} :catch_6

    .line 139
    goto :goto_7

    .line 137
    :catch_6
    move-exception v0

    .line 141
    :cond_7
    :goto_7
    return-void
.end method

.method public static getChars(JI[C)V
    .registers 12
    .param p0, "i"    # J
    .param p2, "index"    # I
    .param p3, "buf"    # [C

    .line 156
    move v0, p2

    .line 157
    .local v0, "charPos":I
    const/4 v1, 0x0

    .line 159
    .local v1, "sign":C
    const-wide/16 v2, 0x0

    cmp-long v4, p0, v2

    if-gez v4, :cond_b

    .line 160
    const/16 v1, 0x2d

    .line 161
    neg-long p0, p0

    .line 165
    :cond_b
    :goto_b
    const-wide/32 v2, 0x7fffffff

    cmp-long v4, p0, v2

    if-lez v4, :cond_36

    .line 166
    const-wide/16 v2, 0x64

    div-long v2, p0, v2

    .line 168
    .local v2, "q":J
    const/4 v4, 0x6

    shl-long v4, v2, v4

    const/4 v6, 0x5

    shl-long v6, v2, v6

    add-long/2addr v4, v6

    const/4 v6, 0x2

    shl-long v6, v2, v6

    add-long/2addr v4, v6

    sub-long v4, p0, v4

    long-to-int v5, v4

    .line 169
    .local v5, "r":I
    move-wide p0, v2

    .line 170
    add-int/lit8 v0, v0, -0x1

    sget-object v4, Lcom/alibaba/fastjson/util/IOUtils;->DigitOnes:[C

    aget-char v4, v4, v5

    aput-char v4, p3, v0

    .line 171
    add-int/lit8 v0, v0, -0x1

    sget-object v4, Lcom/alibaba/fastjson/util/IOUtils;->DigitTens:[C

    aget-char v4, v4, v5

    aput-char v4, p3, v0

    goto :goto_b

    .line 176
    .end local v2    # "q":J
    .end local v5    # "r":I
    :cond_36
    long-to-int v2, p0

    .line 177
    .local v2, "i2":I
    :goto_37
    const/high16 v3, 0x10000

    if-lt v2, v3, :cond_59

    .line 178
    div-int/lit8 v3, v2, 0x64

    .line 180
    .local v3, "q2":I
    shl-int/lit8 v4, v3, 0x6

    shl-int/lit8 v5, v3, 0x5

    add-int/2addr v4, v5

    shl-int/lit8 v5, v3, 0x2

    add-int/2addr v4, v5

    sub-int v4, v2, v4

    .line 181
    .local v4, "r":I
    move v2, v3

    .line 182
    add-int/lit8 v0, v0, -0x1

    sget-object v5, Lcom/alibaba/fastjson/util/IOUtils;->DigitOnes:[C

    aget-char v5, v5, v4

    aput-char v5, p3, v0

    .line 183
    add-int/lit8 v0, v0, -0x1

    sget-object v5, Lcom/alibaba/fastjson/util/IOUtils;->DigitTens:[C

    aget-char v5, v5, v4

    aput-char v5, p3, v0

    goto :goto_37

    .line 189
    .end local v3    # "q2":I
    .end local v4    # "r":I
    :cond_59
    const v3, 0xcccd

    mul-int v3, v3, v2

    ushr-int/lit8 v3, v3, 0x13

    .line 190
    .restart local v3    # "q2":I
    shl-int/lit8 v4, v3, 0x3

    shl-int/lit8 v5, v3, 0x1

    add-int/2addr v4, v5

    sub-int v4, v2, v4

    .line 191
    .restart local v4    # "r":I
    add-int/lit8 v0, v0, -0x1

    sget-object v5, Lcom/alibaba/fastjson/util/IOUtils;->digits:[C

    aget-char v5, v5, v4

    aput-char v5, p3, v0

    .line 192
    move v2, v3

    .line 193
    if-nez v2, :cond_59

    .line 195
    if-eqz v1, :cond_78

    .line 196
    add-int/lit8 v0, v0, -0x1

    aput-char v1, p3, v0

    .line 198
    :cond_78
    return-void
.end method

.method public static stringSize(I)I
    .registers 3
    .param p0, "x"    # I

    .line 222
    const/4 v0, 0x0

    .line 223
    .local v0, "i":I
    :goto_1
    sget-object v1, Lcom/alibaba/fastjson/util/IOUtils;->sizeTable:[I

    aget v1, v1, v0

    if-gt p0, v1, :cond_a

    .line 224
    add-int/lit8 v1, v0, 0x1

    return v1

    .line 222
    :cond_a
    add-int/lit8 v0, v0, 0x1

    goto :goto_1
.end method

.method public static stringSize(J)I
    .registers 7
    .param p0, "x"    # J

    .line 145
    const-wide/16 v0, 0xa

    .line 146
    .local v0, "p":J
    const/4 v2, 0x1

    .local v2, "i":I
    :goto_3
    const/16 v3, 0x13

    if-ge v2, v3, :cond_13

    .line 147
    cmp-long v3, p0, v0

    if-gez v3, :cond_c

    return v2

    .line 148
    :cond_c
    const-wide/16 v3, 0xa

    mul-long v0, v0, v3

    .line 146
    add-int/lit8 v2, v2, 0x1

    goto :goto_3

    .line 150
    .end local v2    # "i":I
    :cond_13
    return v3
.end method