PercentEscaper.smali

.class public Lcom/google/api/client/util/escape/PercentEscaper;
.super Lcom/google/api/client/util/escape/UnicodeEscaper;


# static fields
.field private static final c:[C

.field private static final d:[C


# instance fields
.field private final a:Z

.field private final b:[Z


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

    const/4 v0, 0x1

    new-array v0, v0, [C

    const/4 v1, 0x0

    const/16 v2, 0x2b

    aput-char v2, v0, v1

    sput-object v0, Lcom/google/api/client/util/escape/PercentEscaper;->c:[C

    const-string v0, "0123456789ABCDEF"

    invoke-virtual {v0}, Ljava/lang/String;->toCharArray()[C

    move-result-object v0

    sput-object v0, Lcom/google/api/client/util/escape/PercentEscaper;->d:[C

    return-void
.end method

.method public constructor <init>(Ljava/lang/String;Z)V
    .registers 4

    invoke-direct {p0}, Lcom/google/api/client/util/escape/UnicodeEscaper;-><init>()V

    const-string v0, ".*[0-9A-Za-z].*"

    invoke-virtual {p1, v0}, Ljava/lang/String;->matches(Ljava/lang/String;)Z

    move-result v0

    if-nez v0, :cond_37

    if-eqz p2, :cond_1e

    const-string v0, " "

    invoke-virtual {p1, v0}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z

    move-result v0

    if-nez v0, :cond_16

    goto :goto_1e

    :cond_16
    new-instance p1, Ljava/lang/IllegalArgumentException;

    const-string p2, "plusForSpace cannot be specified when space is a \'safe\' character"

    invoke-direct {p1, p2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw p1

    :cond_1e
    :goto_1e
    const-string v0, "%"

    invoke-virtual {p1, v0}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z

    move-result v0

    if-nez v0, :cond_2f

    iput-boolean p2, p0, Lcom/google/api/client/util/escape/PercentEscaper;->a:Z

    invoke-static {p1}, Lcom/google/api/client/util/escape/PercentEscaper;->g(Ljava/lang/String;)[Z

    move-result-object p1

    iput-object p1, p0, Lcom/google/api/client/util/escape/PercentEscaper;->b:[Z

    return-void

    :cond_2f
    new-instance p1, Ljava/lang/IllegalArgumentException;

    const-string p2, "The \'%\' character cannot be specified as \'safe\'"

    invoke-direct {p1, p2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw p1

    :cond_37
    new-instance p1, Ljava/lang/IllegalArgumentException;

    const-string p2, "Alphanumeric characters are always \'safe\' and should not be explicitly specified"

    invoke-direct {p1, p2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw p1
.end method

.method private static g(Ljava/lang/String;)[Z
    .registers 7

    invoke-virtual {p0}, Ljava/lang/String;->toCharArray()[C

    move-result-object p0

    array-length v0, p0

    const/4 v1, 0x0

    const/16 v2, 0x7a

    const/4 v3, 0x0

    const/16 v4, 0x7a

    :goto_b
    if-ge v3, v0, :cond_16

    aget-char v5, p0, v3

    invoke-static {v5, v4}, Ljava/lang/Math;->max(II)I

    move-result v4

    add-int/lit8 v3, v3, 0x1

    goto :goto_b

    :cond_16
    const/4 v0, 0x1

    add-int/2addr v4, v0

    new-array v3, v4, [Z

    const/16 v4, 0x30

    :goto_1c
    const/16 v5, 0x39

    if-gt v4, v5, :cond_25

    aput-boolean v0, v3, v4

    add-int/lit8 v4, v4, 0x1

    goto :goto_1c

    :cond_25
    const/16 v4, 0x41

    :goto_27
    const/16 v5, 0x5a

    if-gt v4, v5, :cond_30

    aput-boolean v0, v3, v4

    add-int/lit8 v4, v4, 0x1

    goto :goto_27

    :cond_30
    const/16 v4, 0x61

    :goto_32
    if-gt v4, v2, :cond_39

    aput-boolean v0, v3, v4

    add-int/lit8 v4, v4, 0x1

    goto :goto_32

    :cond_39
    array-length v2, p0

    :goto_3a
    if-ge v1, v2, :cond_43

    aget-char v4, p0, v1

    aput-boolean v0, v3, v4

    add-int/lit8 v1, v1, 0x1

    goto :goto_3a

    :cond_43
    return-object v3
.end method


# virtual methods
.method public a(Ljava/lang/String;)Ljava/lang/String;
    .registers 7

    invoke-virtual {p1}, Ljava/lang/String;->length()I

    move-result v0

    const/4 v1, 0x0

    :goto_5
    if-ge v1, v0, :cond_1c

    invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C

    move-result v2

    iget-object v3, p0, Lcom/google/api/client/util/escape/PercentEscaper;->b:[Z

    array-length v4, v3

    if-ge v2, v4, :cond_18

    aget-boolean v2, v3, v2

    if-nez v2, :cond_15

    goto :goto_18

    :cond_15
    add-int/lit8 v1, v1, 0x1

    goto :goto_5

    :cond_18
    :goto_18
    invoke-virtual {p0, p1, v1}, Lcom/google/api/client/util/escape/UnicodeEscaper;->d(Ljava/lang/String;I)Ljava/lang/String;

    move-result-object p1

    :cond_1c
    return-object p1
.end method

.method protected c(I)[C
    .registers 15

    iget-object v0, p0, Lcom/google/api/client/util/escape/PercentEscaper;->b:[Z

    array-length v1, v0

    if-ge p1, v1, :cond_b

    aget-boolean v0, v0, p1

    if-eqz v0, :cond_b

    const/4 p1, 0x0

    return-object p1

    :cond_b
    const/16 v0, 0x20

    if-ne p1, v0, :cond_16

    iget-boolean v0, p0, Lcom/google/api/client/util/escape/PercentEscaper;->a:Z

    if-eqz v0, :cond_16

    sget-object p1, Lcom/google/api/client/util/escape/PercentEscaper;->c:[C

    return-object p1

    :cond_16
    const/16 v0, 0x7f

    const/4 v1, 0x1

    const/4 v2, 0x0

    const/4 v3, 0x2

    const/16 v4, 0x25

    const/4 v5, 0x3

    const/4 v6, 0x4

    if-gt p1, v0, :cond_33

    new-array v0, v5, [C

    aput-char v4, v0, v2

    sget-object v2, Lcom/google/api/client/util/escape/PercentEscaper;->d:[C

    and-int/lit8 v4, p1, 0xf

    aget-char v4, v2, v4

    aput-char v4, v0, v3

    ushr-int/2addr p1, v6

    aget-char p1, v2, p1

    aput-char p1, v0, v1

    return-object v0

    :cond_33
    const/16 v0, 0x7ff

    const/16 v7, 0xc

    const/4 v8, 0x5

    const/4 v9, 0x6

    const/16 v10, 0x8

    if-gt p1, v0, :cond_61

    new-array v0, v9, [C

    aput-char v4, v0, v2

    aput-char v4, v0, v5

    sget-object v2, Lcom/google/api/client/util/escape/PercentEscaper;->d:[C

    and-int/lit8 v4, p1, 0xf

    aget-char v4, v2, v4

    aput-char v4, v0, v8

    ushr-int/2addr p1, v6

    and-int/lit8 v4, p1, 0x3

    or-int/2addr v4, v10

    aget-char v4, v2, v4

    aput-char v4, v0, v6

    ushr-int/2addr p1, v3

    and-int/lit8 v4, p1, 0xf

    aget-char v4, v2, v4

    aput-char v4, v0, v3

    ushr-int/2addr p1, v6

    or-int/2addr p1, v7

    aget-char p1, v2, p1

    aput-char p1, v0, v1

    return-object v0

    :cond_61
    const v0, 0xffff

    const/16 v11, 0x9

    const/4 v12, 0x7

    if-gt p1, v0, :cond_9a

    new-array v0, v11, [C

    aput-char v4, v0, v2

    const/16 v2, 0x45

    aput-char v2, v0, v1

    aput-char v4, v0, v5

    aput-char v4, v0, v9

    sget-object v1, Lcom/google/api/client/util/escape/PercentEscaper;->d:[C

    and-int/lit8 v2, p1, 0xf

    aget-char v2, v1, v2

    aput-char v2, v0, v10

    ushr-int/2addr p1, v6

    and-int/lit8 v2, p1, 0x3

    or-int/2addr v2, v10

    aget-char v2, v1, v2

    aput-char v2, v0, v12

    ushr-int/2addr p1, v3

    and-int/lit8 v2, p1, 0xf

    aget-char v2, v1, v2

    aput-char v2, v0, v8

    ushr-int/2addr p1, v6

    and-int/lit8 v2, p1, 0x3

    or-int/2addr v2, v10

    aget-char v2, v1, v2

    aput-char v2, v0, v6

    ushr-int/2addr p1, v3

    aget-char p1, v1, p1

    aput-char p1, v0, v3

    return-object v0

    :cond_9a
    const v0, 0x10ffff

    if-gt p1, v0, :cond_e6

    new-array v0, v7, [C

    aput-char v4, v0, v2

    const/16 v2, 0x46

    aput-char v2, v0, v1

    aput-char v4, v0, v5

    aput-char v4, v0, v9

    aput-char v4, v0, v11

    const/16 v1, 0xb

    sget-object v2, Lcom/google/api/client/util/escape/PercentEscaper;->d:[C

    and-int/lit8 v4, p1, 0xf

    aget-char v4, v2, v4

    aput-char v4, v0, v1

    ushr-int/2addr p1, v6

    const/16 v1, 0xa

    and-int/lit8 v4, p1, 0x3

    or-int/2addr v4, v10

    aget-char v4, v2, v4

    aput-char v4, v0, v1

    ushr-int/2addr p1, v3

    and-int/lit8 v1, p1, 0xf

    aget-char v1, v2, v1

    aput-char v1, v0, v10

    ushr-int/2addr p1, v6

    and-int/lit8 v1, p1, 0x3

    or-int/2addr v1, v10

    aget-char v1, v2, v1

    aput-char v1, v0, v12

    ushr-int/2addr p1, v3

    and-int/lit8 v1, p1, 0xf

    aget-char v1, v2, v1

    aput-char v1, v0, v8

    ushr-int/2addr p1, v6

    and-int/lit8 v1, p1, 0x3

    or-int/2addr v1, v10

    aget-char v1, v2, v1

    aput-char v1, v0, v6

    ushr-int/2addr p1, v3

    and-int/2addr p1, v12

    aget-char p1, v2, p1

    aput-char p1, v0, v3

    return-object v0

    :cond_e6
    new-instance v0, Ljava/lang/IllegalArgumentException;

    new-instance v1, Ljava/lang/StringBuilder;

    invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V

    const-string v2, "Invalid unicode character value "

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object p1

    invoke-direct {v0, p1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0
.end method

.method protected f(Ljava/lang/CharSequence;II)I
    .registers 7

    :goto_0
    if-ge p2, p3, :cond_13

    invoke-interface {p1, p2}, Ljava/lang/CharSequence;->charAt(I)C

    move-result v0

    iget-object v1, p0, Lcom/google/api/client/util/escape/PercentEscaper;->b:[Z

    array-length v2, v1

    if-ge v0, v2, :cond_13

    aget-boolean v0, v1, v0

    if-nez v0, :cond_10

    goto :goto_13

    :cond_10
    add-int/lit8 p2, p2, 0x1

    goto :goto_0

    :cond_13
    :goto_13
    return p2
.end method