projects
/
zxing.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Small speedup, per issue 422
[zxing.git]
/
core
/
src
/
com
/
google
/
zxing
/
common
/
reedsolomon
/
GF256.java
diff --git
a/core/src/com/google/zxing/common/reedsolomon/GF256.java
b/core/src/com/google/zxing/common/reedsolomon/GF256.java
index
b2e8877
..
9c58275
100644
(file)
--- a/
core/src/com/google/zxing/common/reedsolomon/GF256.java
+++ b/
core/src/com/google/zxing/common/reedsolomon/GF256.java
@@
-1,5
+1,5
@@
/*
/*
- * Copyright 2007
Google Inc.
+ * Copyright 2007
ZXing authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@
-24,15
+24,15
@@
package com.google.zxing.common.reedsolomon;
* for convenience and speed (but at the cost of memory).
* Only the bottom 8 bits are really used.</p>
*
* for convenience and speed (but at the cost of memory).
* Only the bottom 8 bits are really used.</p>
*
- * @author
srowen@google.com (Sean Owen)
+ * @author
Sean Owen
*/
public final class GF256 {
public static final GF256 QR_CODE_FIELD = new GF256(0x011D); // x^8 + x^4 + x^3 + x^2 + 1
public static final GF256 DATA_MATRIX_FIELD = new GF256(0x012D); // x^8 + x^5 + x^3 + x^2 + 1
*/
public final class GF256 {
public static final GF256 QR_CODE_FIELD = new GF256(0x011D); // x^8 + x^4 + x^3 + x^2 + 1
public static final GF256 DATA_MATRIX_FIELD = new GF256(0x012D); // x^8 + x^5 + x^3 + x^2 + 1
- private final int[] exp;
- private final int[] log;
+ private final int[] exp
Table
;
+ private final int[] log
Table
;
private final GF256Poly zero;
private final GF256Poly one;
private final GF256Poly zero;
private final GF256Poly one;
@@
-44,20
+44,20
@@
public final class GF256 {
* coefficient
*/
private GF256(int primitive) {
* coefficient
*/
private GF256(int primitive) {
- exp = new int[256];
- log = new int[256];
+ exp
Table
= new int[256];
+ log
Table
= new int[256];
int x = 1;
for (int i = 0; i < 256; i++) {
int x = 1;
for (int i = 0; i < 256; i++) {
- exp[i] = x;
+ exp
Table
[i] = x;
x <<= 1; // x = x * 2; we're assuming the generator alpha is 2
if (x >= 0x100) {
x ^= primitive;
}
}
for (int i = 0; i < 255; i++) {
x <<= 1; // x = x * 2; we're assuming the generator alpha is 2
if (x >= 0x100) {
x ^= primitive;
}
}
for (int i = 0; i < 255; i++) {
- log
[exp
[i]] = i;
+ log
Table[expTable
[i]] = i;
}
}
- // log[0] == 0 but this should never be used
+ // log
Table
[0] == 0 but this should never be used
zero = new GF256Poly(this, new int[]{0});
one = new GF256Poly(this, new int[]{1});
}
zero = new GF256Poly(this, new int[]{0});
one = new GF256Poly(this, new int[]{1});
}
@@
-90,7
+90,7
@@
public final class GF256 {
*
* @return sum/difference of a and b
*/
*
* @return sum/difference of a and b
*/
- int addOrSubtract(int a, int b) {
+
static
int addOrSubtract(int a, int b) {
return a ^ b;
}
return a ^ b;
}
@@
-98,7
+98,7
@@
public final class GF256 {
* @return 2 to the power of a in GF(256)
*/
int exp(int a) {
* @return 2 to the power of a in GF(256)
*/
int exp(int a) {
- return exp[a];
+ return exp
Table
[a];
}
/**
}
/**
@@
-108,7
+108,7
@@
public final class GF256 {
if (a == 0) {
throw new IllegalArgumentException();
}
if (a == 0) {
throw new IllegalArgumentException();
}
- return log[a];
+ return log
Table
[a];
}
/**
}
/**
@@
-118,7
+118,7
@@
public final class GF256 {
if (a == 0) {
throw new ArithmeticException();
}
if (a == 0) {
throw new ArithmeticException();
}
- return exp
[255 - log
[a]];
+ return exp
Table[255 - logTable
[a]];
}
/**
}
/**
@@
-130,13
+130,10
@@
public final class GF256 {
if (a == 0 || b == 0) {
return 0;
}
if (a == 0 || b == 0) {
return 0;
}
- if (a == 1) {
- return b;
- }
- if (b == 1) {
- return a;
- }
- return exp[(log[a] + log[b]) % 255];
+ int logSum = logTable[a] + logTable[b];
+ // index is a sped-up alternative to logSum % 255 since sum
+ // is in [0,510]. Thanks to jmsachs for the idea
+ return expTable[(logSum & 0xFF) + (logSum >>> 8)];
}
}
-}
\ No newline at end of file
+}