Code39Reader.smali
.class public final Lcom/dcloud/zxing2/oned/Code39Reader;
.super Lcom/dcloud/zxing2/oned/OneDReader;
# static fields
.field static final ALPHABET_STRING:Ljava/lang/String; = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%"
.field static final ASTERISK_ENCODING:I
.field static final CHARACTER_ENCODINGS:[I
.field private static final CHECK_DIGIT_STRING:Ljava/lang/String; = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"
# instance fields
.field private final counters:[I
.field private final decodeRowResult:Ljava/lang/StringBuilder;
.field private final extendedMode:Z
.field private final usingCheckDigit:Z
# direct methods
.method static constructor <clinit>()V
.registers 2
const/16 v0, 0x2c
new-array v0, v0, [I
.line 1
fill-array-data v0, :array_10
sput-object v0, Lcom/dcloud/zxing2/oned/Code39Reader;->CHARACTER_ENCODINGS:[I
const/16 v1, 0x27
.line 9
aget v0, v0, v1
sput v0, Lcom/dcloud/zxing2/oned/Code39Reader;->ASTERISK_ENCODING:I
return-void
:array_10
.array-data 4
0x34
0x121
0x61
0x160
0x31
0x130
0x70
0x25
0x124
0x64
0x109
0x49
0x148
0x19
0x118
0x58
0xd
0x10c
0x4c
0x1c
0x103
0x43
0x142
0x13
0x112
0x52
0x7
0x106
0x46
0x16
0x181
0xc1
0x1c0
0x91
0x190
0xd0
0x85
0x184
0xc4
0x94
0xa8
0xa2
0x8a
0x2a
.end array-data
.end method
.method public constructor <init>()V
.registers 2
const/4 v0, 0x0
.line 1
invoke-direct {p0, v0}, Lcom/dcloud/zxing2/oned/Code39Reader;-><init>(Z)V
return-void
.end method
.method public constructor <init>(Z)V
.registers 3
const/4 v0, 0x0
.line 2
invoke-direct {p0, p1, v0}, Lcom/dcloud/zxing2/oned/Code39Reader;-><init>(ZZ)V
return-void
.end method
.method public constructor <init>(ZZ)V
.registers 3
.line 3
invoke-direct {p0}, Lcom/dcloud/zxing2/oned/OneDReader;-><init>()V
.line 4
iput-boolean p1, p0, Lcom/dcloud/zxing2/oned/Code39Reader;->usingCheckDigit:Z
.line 5
iput-boolean p2, p0, Lcom/dcloud/zxing2/oned/Code39Reader;->extendedMode:Z
.line 6
new-instance p1, Ljava/lang/StringBuilder;
const/16 p2, 0x14
invoke-direct {p1, p2}, Ljava/lang/StringBuilder;-><init>(I)V
iput-object p1, p0, Lcom/dcloud/zxing2/oned/Code39Reader;->decodeRowResult:Ljava/lang/StringBuilder;
const/16 p1, 0x9
new-array p1, p1, [I
.line 7
iput-object p1, p0, Lcom/dcloud/zxing2/oned/Code39Reader;->counters:[I
return-void
.end method
.method private static decodeExtended(Ljava/lang/CharSequence;)Ljava/lang/String;
.registers 13
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/dcloud/zxing2/FormatException;
}
.end annotation
.line 1
invoke-interface {p0}, Ljava/lang/CharSequence;->length()I
move-result v0
.line 2
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1, v0}, Ljava/lang/StringBuilder;-><init>(I)V
const/4 v2, 0x0
move v3, v2
:goto_b
if-ge v3, v0, :cond_84
.line 4
invoke-interface {p0, v3}, Ljava/lang/CharSequence;->charAt(I)C
move-result v4
const/16 v5, 0x2f
const/16 v6, 0x25
const/16 v7, 0x24
const/16 v8, 0x2b
if-eq v4, v8, :cond_26
if-eq v4, v7, :cond_26
if-eq v4, v6, :cond_26
if-ne v4, v5, :cond_22
goto :goto_26
.line 50
:cond_22
invoke-virtual {v1, v4}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
goto :goto_7c
:cond_26
:goto_26
add-int/lit8 v3, v3, 0x1
.line 51
invoke-interface {p0, v3}, Ljava/lang/CharSequence;->charAt(I)C
move-result v9
const/16 v10, 0x5a
const/16 v11, 0x41
if-eq v4, v7, :cond_72
if-eq v4, v6, :cond_59
if-eq v4, v8, :cond_4d
if-eq v4, v5, :cond_3a
move v4, v2
goto :goto_79
:cond_3a
if-lt v9, v11, :cond_43
const/16 v4, 0x4f
if-gt v9, v4, :cond_43
add-int/lit8 v9, v9, -0x20
goto :goto_78
:cond_43
if-ne v9, v10, :cond_48
const/16 v4, 0x3a
goto :goto_79
.line 87
:cond_48
invoke-static {}, Lcom/dcloud/zxing2/FormatException;->getFormatInstance()Lcom/dcloud/zxing2/FormatException;
move-result-object p0
throw p0
:cond_4d
if-lt v9, v11, :cond_54
if-gt v9, v10, :cond_54
add-int/lit8 v9, v9, 0x20
goto :goto_78
.line 88
:cond_54
invoke-static {}, Lcom/dcloud/zxing2/FormatException;->getFormatInstance()Lcom/dcloud/zxing2/FormatException;
move-result-object p0
throw p0
:cond_59
if-lt v9, v11, :cond_62
const/16 v4, 0x45
if-gt v9, v4, :cond_62
add-int/lit8 v9, v9, -0x26
goto :goto_78
:cond_62
const/16 v4, 0x46
if-lt v9, v4, :cond_6d
const/16 v4, 0x57
if-gt v9, v4, :cond_6d
add-int/lit8 v9, v9, -0xb
goto :goto_78
.line 106
:cond_6d
invoke-static {}, Lcom/dcloud/zxing2/FormatException;->getFormatInstance()Lcom/dcloud/zxing2/FormatException;
move-result-object p0
throw p0
:cond_72
if-lt v9, v11, :cond_7f
if-gt v9, v10, :cond_7f
add-int/lit8 v9, v9, -0x40
:goto_78
int-to-char v4, v9
.line 120
:goto_79
invoke-virtual {v1, v4}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
:goto_7c
add-int/lit8 v3, v3, 0x1
goto :goto_b
.line 121
:cond_7f
invoke-static {}, Lcom/dcloud/zxing2/FormatException;->getFormatInstance()Lcom/dcloud/zxing2/FormatException;
move-result-object p0
throw p0
.line 152
:cond_84
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p0
return-object p0
.end method
.method private static findAsteriskPattern(Lcom/dcloud/zxing2/common/BitArray;[I)[I
.registers 14
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/dcloud/zxing2/NotFoundException;
}
.end annotation
.line 1
invoke-virtual {p0}, Lcom/dcloud/zxing2/common/BitArray;->getSize()I
move-result v0
const/4 v1, 0x0
.line 2
invoke-virtual {p0, v1}, Lcom/dcloud/zxing2/common/BitArray;->getNextSet(I)I
move-result v2
.line 7
array-length v3, p1
move v5, v1
move v6, v5
move v4, v2
:goto_d
if-ge v2, v0, :cond_5b
.line 10
invoke-virtual {p0, v2}, Lcom/dcloud/zxing2/common/BitArray;->get(I)Z
move-result v7
xor-int/2addr v7, v5
const/4 v8, 0x1
if-eqz v7, :cond_1d
.line 11
aget v7, p1, v6
add-int/2addr v7, v8
aput v7, p1, v6
goto :goto_58
:cond_1d
add-int/lit8 v7, v3, -0x1
if-ne v6, v7, :cond_52
.line 15
invoke-static {p1}, Lcom/dcloud/zxing2/oned/Code39Reader;->toNarrowWidePattern([I)I
move-result v9
sget v10, Lcom/dcloud/zxing2/oned/Code39Reader;->ASTERISK_ENCODING:I
const/4 v11, 0x2
if-ne v9, v10, :cond_40
sub-int v9, v2, v4
div-int/2addr v9, v11
sub-int v9, v4, v9
.line 16
invoke-static {v1, v9}, Ljava/lang/Math;->max(II)I
move-result v9
invoke-virtual {p0, v9, v4, v1}, Lcom/dcloud/zxing2/common/BitArray;->isRange(IIZ)Z
move-result v9
if-eqz v9, :cond_40
new-array p0, v11, [I
aput v4, p0, v1
aput v2, p0, v8
return-object p0
.line 19
:cond_40
aget v9, p1, v1
aget v10, p1, v8
add-int/2addr v9, v10
add-int/2addr v4, v9
add-int/lit8 v9, v3, -0x2
.line 20
invoke-static {p1, v11, p1, v1, v9}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 21
aput v1, p1, v9
.line 22
aput v1, p1, v7
add-int/lit8 v6, v6, -0x1
goto :goto_54
:cond_52
add-int/lit8 v6, v6, 0x1
.line 27
:goto_54
aput v8, p1, v6
xor-int/lit8 v5, v5, 0x1
:goto_58
add-int/lit8 v2, v2, 0x1
goto :goto_d
.line 31
:cond_5b
invoke-static {}, Lcom/dcloud/zxing2/NotFoundException;->getNotFoundInstance()Lcom/dcloud/zxing2/NotFoundException;
move-result-object p0
throw p0
.end method
.method private static patternToChar(I)C
.registers 4
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/dcloud/zxing2/NotFoundException;
}
.end annotation
const/4 v0, 0x0
.line 1
:goto_1
sget-object v1, Lcom/dcloud/zxing2/oned/Code39Reader;->CHARACTER_ENCODINGS:[I
array-length v2, v1
if-ge v0, v2, :cond_14
.line 2
aget v1, v1, v0
if-ne v1, p0, :cond_11
const-string p0, "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%"
.line 3
invoke-virtual {p0, v0}, Ljava/lang/String;->charAt(I)C
move-result p0
return p0
:cond_11
add-int/lit8 v0, v0, 0x1
goto :goto_1
.line 6
:cond_14
invoke-static {}, Lcom/dcloud/zxing2/NotFoundException;->getNotFoundInstance()Lcom/dcloud/zxing2/NotFoundException;
move-result-object p0
throw p0
.end method
.method private static toNarrowWidePattern([I)I
.registers 11
.line 1
array-length v0, p0
const/4 v1, 0x0
move v2, v1
:goto_3
const v3, 0x7fffffff
.line 6
array-length v4, p0
move v5, v1
:goto_8
if-ge v5, v4, :cond_14
aget v6, p0, v5
if-ge v6, v3, :cond_11
if-le v6, v2, :cond_11
move v3, v6
:cond_11
add-int/lit8 v5, v5, 0x1
goto :goto_8
:cond_14
move v2, v1
move v4, v2
move v5, v4
move v6, v5
:goto_18
if-ge v2, v0, :cond_2b
.line 16
aget v7, p0, v2
if-le v7, v3, :cond_28
add-int/lit8 v8, v0, -0x1
sub-int/2addr v8, v2
const/4 v9, 0x1
shl-int v8, v9, v8
or-int/2addr v6, v8
add-int/lit8 v4, v4, 0x1
add-int/2addr v5, v7
:cond_28
add-int/lit8 v2, v2, 0x1
goto :goto_18
:cond_2b
const/4 v2, 0x3
const/4 v7, -0x1
if-ne v4, v2, :cond_42
:goto_2f
if-ge v1, v0, :cond_41
if-lez v4, :cond_41
.line 28
aget v2, p0, v1
if-le v2, v3, :cond_3e
add-int/lit8 v4, v4, -0x1
mul-int/lit8 v2, v2, 0x2
if-lt v2, v5, :cond_3e
return v7
:cond_3e
add-int/lit8 v1, v1, 0x1
goto :goto_2f
:cond_41
return v6
:cond_42
if-gt v4, v2, :cond_45
return v7
:cond_45
move v2, v3
goto :goto_3
.end method
# virtual methods
.method public decodeRow(ILcom/dcloud/zxing2/common/BitArray;Ljava/util/Map;)Lcom/dcloud/zxing2/Result;
.registers 15
.annotation system Ldalvik/annotation/Signature;
value = {
"(I",
"Lcom/dcloud/zxing2/common/BitArray;",
"Ljava/util/Map<",
"Lcom/dcloud/zxing2/DecodeHintType;",
"*>;)",
"Lcom/dcloud/zxing2/Result;"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/dcloud/zxing2/NotFoundException;,
Lcom/dcloud/zxing2/ChecksumException;,
Lcom/dcloud/zxing2/FormatException;
}
.end annotation
.line 1
iget-object p3, p0, Lcom/dcloud/zxing2/oned/Code39Reader;->counters:[I
const/4 v0, 0x0
.line 2
invoke-static {p3, v0}, Ljava/util/Arrays;->fill([II)V
.line 3
iget-object v1, p0, Lcom/dcloud/zxing2/oned/Code39Reader;->decodeRowResult:Ljava/lang/StringBuilder;
.line 4
invoke-virtual {v1, v0}, Ljava/lang/StringBuilder;->setLength(I)V
.line 6
invoke-static {p2, p3}, Lcom/dcloud/zxing2/oned/Code39Reader;->findAsteriskPattern(Lcom/dcloud/zxing2/common/BitArray;[I)[I
move-result-object v2
const/4 v3, 0x1
.line 8
aget v4, v2, v3
invoke-virtual {p2, v4}, Lcom/dcloud/zxing2/common/BitArray;->getNextSet(I)I
move-result v4
.line 9
invoke-virtual {p2}, Lcom/dcloud/zxing2/common/BitArray;->getSize()I
move-result v5
.line 14
:goto_1a
invoke-static {p2, v4, p3}, Lcom/dcloud/zxing2/oned/OneDReader;->recordPattern(Lcom/dcloud/zxing2/common/BitArray;I[I)V
.line 15
invoke-static {p3}, Lcom/dcloud/zxing2/oned/Code39Reader;->toNarrowWidePattern([I)I
move-result v6
if-ltz v6, :cond_d3
.line 19
invoke-static {v6}, Lcom/dcloud/zxing2/oned/Code39Reader;->patternToChar(I)C
move-result v6
.line 20
invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
.line 22
array-length v7, p3
move v8, v0
move v9, v4
:goto_2d
if-ge v8, v7, :cond_35
aget v10, p3, v8
add-int/2addr v9, v10
add-int/lit8 v8, v8, 0x1
goto :goto_2d
.line 26
:cond_35
invoke-virtual {p2, v9}, Lcom/dcloud/zxing2/common/BitArray;->getNextSet(I)I
move-result v7
const/16 v8, 0x2a
if-ne v6, v8, :cond_d0
.line 28
invoke-virtual {v1}, Ljava/lang/StringBuilder;->length()I
move-result p2
sub-int/2addr p2, v3
invoke-virtual {v1, p2}, Ljava/lang/StringBuilder;->setLength(I)V
.line 32
array-length p2, p3
move v6, v0
move v8, v6
:goto_48
if-ge v6, p2, :cond_50
aget v9, p3, v6
add-int/2addr v8, v9
add-int/lit8 v6, v6, 0x1
goto :goto_48
:cond_50
sub-int p2, v7, v4
sub-int/2addr p2, v8
const/4 p3, 0x2
if-eq v7, v5, :cond_5f
mul-int/2addr p2, p3
if-lt p2, v8, :cond_5a
goto :goto_5f
.line 39
:cond_5a
invoke-static {}, Lcom/dcloud/zxing2/NotFoundException;->getNotFoundInstance()Lcom/dcloud/zxing2/NotFoundException;
move-result-object p1
throw p1
.line 42
:cond_5f
:goto_5f
iget-boolean p2, p0, Lcom/dcloud/zxing2/oned/Code39Reader;->usingCheckDigit:Z
if-eqz p2, :cond_91
.line 43
invoke-virtual {v1}, Ljava/lang/StringBuilder;->length()I
move-result p2
sub-int/2addr p2, v3
move v5, v0
move v6, v5
:goto_6a
const-string v7, "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"
if-ge v5, p2, :cond_7c
.line 46
iget-object v9, p0, Lcom/dcloud/zxing2/oned/Code39Reader;->decodeRowResult:Ljava/lang/StringBuilder;
invoke-virtual {v9, v5}, Ljava/lang/StringBuilder;->charAt(I)C
move-result v9
invoke-virtual {v7, v9}, Ljava/lang/String;->indexOf(I)I
move-result v7
add-int/2addr v6, v7
add-int/lit8 v5, v5, 0x1
goto :goto_6a
.line 48
:cond_7c
invoke-virtual {v1, p2}, Ljava/lang/StringBuilder;->charAt(I)C
move-result v5
rem-int/lit8 v6, v6, 0x2b
invoke-virtual {v7, v6}, Ljava/lang/String;->charAt(I)C
move-result v6
if-ne v5, v6, :cond_8c
.line 51
invoke-virtual {v1, p2}, Ljava/lang/StringBuilder;->setLength(I)V
goto :goto_91
.line 52
:cond_8c
invoke-static {}, Lcom/dcloud/zxing2/ChecksumException;->getChecksumInstance()Lcom/dcloud/zxing2/ChecksumException;
move-result-object p1
throw p1
.line 57
:cond_91
:goto_91
invoke-virtual {v1}, Ljava/lang/StringBuilder;->length()I
move-result p2
if-eqz p2, :cond_cb
.line 63
iget-boolean p2, p0, Lcom/dcloud/zxing2/oned/Code39Reader;->extendedMode:Z
if-eqz p2, :cond_a0
.line 64
invoke-static {v1}, Lcom/dcloud/zxing2/oned/Code39Reader;->decodeExtended(Ljava/lang/CharSequence;)Ljava/lang/String;
move-result-object p2
goto :goto_a4
.line 66
:cond_a0
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p2
.line 69
:goto_a4
aget v1, v2, v3
aget v2, v2, v0
add-int/2addr v1, v2
int-to-float v1, v1
const/high16 v2, 0x40000000 # 2.0f
div-float/2addr v1, v2
int-to-float v4, v4
int-to-float v5, v8
div-float/2addr v5, v2
add-float/2addr v4, v5
.line 71
new-instance v2, Lcom/dcloud/zxing2/Result;
new-array p3, p3, [Lcom/dcloud/zxing2/ResultPoint;
new-instance v5, Lcom/dcloud/zxing2/ResultPoint;
int-to-float p1, p1
invoke-direct {v5, v1, p1}, Lcom/dcloud/zxing2/ResultPoint;-><init>(FF)V
aput-object v5, p3, v0
new-instance v0, Lcom/dcloud/zxing2/ResultPoint;
invoke-direct {v0, v4, p1}, Lcom/dcloud/zxing2/ResultPoint;-><init>(FF)V
aput-object v0, p3, v3
sget-object p1, Lcom/dcloud/zxing2/BarcodeFormat;->CODE_39:Lcom/dcloud/zxing2/BarcodeFormat;
const/4 v0, 0x0
invoke-direct {v2, p2, v0, p3, p1}, Lcom/dcloud/zxing2/Result;-><init>(Ljava/lang/String;[B[Lcom/dcloud/zxing2/ResultPoint;Lcom/dcloud/zxing2/BarcodeFormat;)V
return-object v2
.line 72
:cond_cb
invoke-static {}, Lcom/dcloud/zxing2/NotFoundException;->getNotFoundInstance()Lcom/dcloud/zxing2/NotFoundException;
move-result-object p1
throw p1
:cond_d0
move v4, v7
goto/16 :goto_1a
.line 73
:cond_d3
invoke-static {}, Lcom/dcloud/zxing2/NotFoundException;->getNotFoundInstance()Lcom/dcloud/zxing2/NotFoundException;
move-result-object p1
throw p1
.end method