Skip to content

Commit 8b5bf58

Browse files
authored
Merge pull request #630 from opl-/feat/rss-expanded-port
Port current version of RSSExpandedReader to javascript
2 parents 70cd2fa + a11410c commit 8b5bf58

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+974
-981
lines changed

src/core/oned/MultiFormatOneDReader.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ export default class MultiFormatOneDReader extends OneDReader {
7171
this.readers.push(new RSS14Reader());
7272
}
7373
if (possibleFormats.includes(BarcodeFormat.RSS_EXPANDED)) {
74+
// XXX
7475
console.warn('RSS Expanded reader IS NOT ready for production yet! use at your own risk.');
7576
this.readers.push(new RSSExpandedReader());
7677
}
@@ -84,7 +85,7 @@ export default class MultiFormatOneDReader extends OneDReader {
8485
this.readers.push(new Code128Reader());
8586
this.readers.push(new ITFReader());
8687
this.readers.push(new RSS14Reader());
87-
// this.readers.push(new RSSExpandedReader());
88+
this.readers.push(new RSSExpandedReader());
8889
}
8990
}
9091

src/core/oned/rss/AbstractRSSReader.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ export default abstract class AbstractRSSReader extends OneDReader {
2525
this.dataCharacterCounters = new Int32Array(8);
2626
this.oddRoundingErrors = new Array<number>(4);
2727
this.evenRoundingErrors = new Array<number>(4);
28-
this.oddCounts = new Array<number>(this.dataCharacterCounters.length / 2);
29-
this.evenCounts = new Array<number>(this.dataCharacterCounters.length / 2);
28+
this.oddCounts = new Array<number>(Math.trunc(this.dataCharacterCounters.length / 2));
29+
this.evenCounts = new Array<number>(Math.trunc(this.dataCharacterCounters.length / 2));
3030
}
3131

3232
protected getDecodeFinderCounters(): Int32Array {

src/core/oned/rss/FinderPattern.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ import ResultPoint from '../../ResultPoint';
33

44
export default class FinderPattern {
55

6+
private value: number;
7+
private startEnd: number[];
68
private resultPoints: Array<ResultPoint>;
79

8-
public constructor(private value: number, private startEnd: number[], start: number, end: number, rowNumber: number) {
10+
public constructor(value: number, startEnd: number[], start: number, end: number, rowNumber: number) {
911
this.value = value;
1012
this.startEnd = startEnd;
1113
this.resultPoints = new Array<ResultPoint>();

src/core/oned/rss/RSSUtils.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,27 +36,27 @@ export default class RSSUtils {
3636
return val;
3737
}
3838

39-
private static combins(n: number, r: number): number {
40-
let maxDenom;
41-
let minDenom;
39+
private static combins(n: number /* int */, r: number /* int */): number /* int */ {
40+
let maxDenom /* int */ = 0;
41+
let minDenom /* int */ = 0;
4242
if (n - r > r) {
4343
minDenom = r;
4444
maxDenom = n - r;
4545
} else {
4646
minDenom = n - r;
4747
maxDenom = r;
4848
}
49-
let val = 1;
50-
let j = 1;
51-
for (let i: number = n; i > maxDenom; i--) {
49+
let val /* int */ = 1;
50+
let j /* int */ = 1;
51+
for (let i = n; i > maxDenom; i--) {
5252
val *= i;
5353
if (j <= minDenom) {
54-
val /= j;
54+
val = Math.trunc(val / j);
5555
j++;
5656
}
5757
}
5858
while ((j <= minDenom)) {
59-
val /= j;
59+
val = Math.trunc(val / j);
6060
j++;
6161
}
6262
return val;

src/core/oned/rss/expanded/BitArrayBuilder.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import ExpandedPair from './ExpandedPair';
44
export default class BitArrayBuilder {
55
static buildBitArray(pairs: Array<ExpandedPair>): BitArray {
66
let charNumber: number = pairs.length * 2 - 1;
7-
if (pairs[pairs.length - 1].getRightChar() == null) {
7+
if (pairs[pairs.length - 1].getRightChar() === null) {
88
charNumber -= 1;
99
}
1010

@@ -23,9 +23,9 @@ export default class BitArrayBuilder {
2323
}
2424

2525
for (let i = 1; i < pairs.length; ++i) {
26-
let currentPair: ExpandedPair = pairs[i];
26+
const currentPair: ExpandedPair = pairs[i];
2727

28-
let leftValue = currentPair.getLeftChar().getValue();
28+
const leftValue = currentPair.getLeftChar().getValue();
2929
for (let j = 11; j >= 0; --j) {
3030
if ((leftValue & (1 << j)) !== 0) {
3131
binary.set(accPos);
@@ -34,7 +34,7 @@ export default class BitArrayBuilder {
3434
}
3535

3636
if (currentPair.getRightChar() !== null) {
37-
let rightValue = currentPair.getRightChar().getValue();
37+
const rightValue = currentPair.getRightChar().getValue();
3838
for (let j = 11; j >= 0; --j) {
3939
if ((rightValue & (1 << j)) !== 0) {
4040
binary.set(accPos);

src/core/oned/rss/expanded/ExpandedPair.ts

Lines changed: 34 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,58 +2,56 @@ import DataCharacter from '../../rss/DataCharacter';
22
import FinderPattern from '../../rss/FinderPattern';
33

44
export default class ExpandedPair {
5-
private readonly maybeLast: boolean;
6-
private readonly leftchar: DataCharacter;
7-
private readonly rightchar: DataCharacter;
8-
private readonly finderpattern: FinderPattern;
5+
private readonly leftChar: DataCharacter | null;
6+
private readonly rightChar: DataCharacter | null;
7+
private readonly finderPattern: FinderPattern | null;
98

10-
constructor(leftChar: DataCharacter, rightChar: DataCharacter, finderPatter: FinderPattern, mayBeLast: boolean) {
11-
this.leftchar = leftChar;
12-
this.rightchar = rightChar;
13-
this.finderpattern = finderPatter;
14-
this.maybeLast = mayBeLast;
9+
constructor(
10+
leftChar: DataCharacter | null,
11+
rightChar: DataCharacter | null,
12+
finderPatter: FinderPattern | null,
13+
) {
14+
this.leftChar = leftChar;
15+
this.rightChar = rightChar;
16+
this.finderPattern = finderPatter;
1517
}
1618

17-
mayBeLast(): boolean {
18-
return this.maybeLast;
19+
getLeftChar(): DataCharacter | null {
20+
return this.leftChar;
1921
}
20-
getLeftChar(): DataCharacter {
21-
return this.leftchar;
22-
}
23-
getRightChar(): DataCharacter {
24-
return this.rightchar;
22+
23+
getRightChar(): DataCharacter | null {
24+
return this.rightChar;
2525
}
26-
getFinderPattern(): FinderPattern {
27-
return this.finderpattern;
26+
27+
getFinderPattern(): FinderPattern | null {
28+
return this.finderPattern;
2829
}
29-
mustBeLast() {
30-
return this.rightchar == null;
30+
31+
mustBeLast(): boolean {
32+
return this.rightChar === null;
3133
}
34+
3235
toString(): String {
33-
return '[ ' + this.leftchar + ', ' + this.rightchar + ' : ' + (this.finderpattern == null ? 'null' : this.finderpattern.getValue()) + ' ]';
36+
return '[ ' + this.leftChar + ', ' + this.rightChar + ' : ' + (this.finderPattern === null ? 'null' : this.finderPattern.getValue()) + ' ]';
3437
}
3538

36-
static equals(o1: any, o2: any): boolean {
37-
if (!(o1 instanceof ExpandedPair)) {
39+
static equals(o1: ExpandedPair | null, o2: any): boolean {
40+
if (o2 === null) return o1 === null;
41+
if (!(o2 instanceof ExpandedPair)) {
3842
return false;
3943
}
40-
return ExpandedPair.equalsOrNull(o1.leftchar, o2.leftchar) &&
41-
ExpandedPair.equalsOrNull(o1.rightchar, o2.rightchar) &&
42-
ExpandedPair.equalsOrNull(o1.finderpattern, o2.finderpattern);
44+
return (o1.leftChar === null ? o2.leftChar === null : o1.leftChar.equals(o2.leftChar)) &&
45+
(o1.rightChar === null ? o2.rightChar === null : o1.rightChar.equals(o2.rightChar)) &&
46+
(o1.finderPattern === null ? o2.finderPattern === null : o1.finderPattern.equals(o2.finderPattern));
4347
}
4448

45-
private static equalsOrNull(o1: any, o2: any): boolean {
46-
return o1 === null ? o2 === null : ExpandedPair.equals(o1, o2);
49+
hashCode(): number {
50+
return ExpandedPair.hashNotNull(this.leftChar) ^ ExpandedPair.hashNotNull(this.rightChar) ^ ExpandedPair.hashNotNull(this.finderPattern);
4751
}
4852

49-
hashCode(): any {
50-
// return ExpandedPair.hashNotNull(leftChar) ^ hashNotNull(rightChar) ^ hashNotNull(finderPattern);
51-
let value = this.leftchar.getValue() ^ this.rightchar.getValue() ^ this.finderpattern.getValue();
52-
return value;
53+
private static hashNotNull(o: { hashCode(): number }): number {
54+
return o === null ? 0 : o.hashCode();
5355
}
54-
// To do - Re check the implementation
55-
// private static hashNotNull(o: ExpandedPair): number {
56-
// return o === null ? 0 : o.hashCode();
57-
// }
5856
}
5957

Lines changed: 13 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
import ExpandedPair from './ExpandedPair';
22

3-
43
export default class ExpandedRow {
54
private readonly pairs: Array<ExpandedPair>;
65
private readonly rowNumber: number;
7-
private readonly wasReversed: boolean;
86

9-
constructor(pairs: Array<ExpandedPair>, rowNumber: number, wasReversed: boolean) {
10-
this.pairs = pairs;
7+
constructor(pairs: Array<ExpandedPair>, rowNumber: number) {
8+
this.pairs = [...pairs];
119
this.rowNumber = rowNumber;
12-
this.wasReversed = wasReversed;
1310
}
1411

1512
getPairs(): Array<ExpandedPair> {
@@ -20,15 +17,9 @@ export default class ExpandedRow {
2017
return this.rowNumber;
2118
}
2219

23-
isReversed(): boolean {
24-
return this.wasReversed;
25-
}
26-
// check implementation
27-
2820
isEquivalent(otherPairs: Array<ExpandedPair>): boolean {
29-
return this.checkEqualitity(this, otherPairs);
21+
return ExpandedRow.listEquals(this.getPairs(), otherPairs);
3022
}
31-
// @Override
3223

3324
public toString(): String {
3425
return '{ ' + this.pairs + ' }';
@@ -38,31 +29,19 @@ export default class ExpandedRow {
3829
* Two rows are equal if they contain the same pairs in the same order.
3930
*/
4031
// @Override
41-
// check implementation
42-
public equals(o1: ExpandedRow, o2: ExpandedRow): boolean {
43-
if (!(o1 instanceof ExpandedRow)) {
32+
public static equals(o1: ExpandedRow | null, o2: any): boolean {
33+
if (o1 === null) return o2 === null;
34+
if (!(o2 instanceof ExpandedRow)) {
4435
return false;
4536
}
46-
return this.checkEqualitity(o1, o2) && o1.wasReversed === o2.wasReversed;
37+
return ExpandedRow.listEquals(o1.pairs, o2.getPairs());
4738
}
48-
checkEqualitity(pair1: any, pair2: any): boolean {
49-
if (!pair1 || !pair2) return;
50-
let result;
51-
pair1.forEach((e1, i) => {
52-
pair2.forEach(e2 => {
53-
if (e1.getLeftChar().getValue() === e2.getLeftChar().getValue() && e1.getRightChar().getValue() === e2.getRightChar().getValue() && e1.getFinderPatter().getValue() === e2.getFinderPatter().getValue()) {
54-
result = true;
55-
}
56-
});
39+
40+
static listEquals(pairs1: Array<ExpandedPair>, pairs2: Array<ExpandedPair>): boolean {
41+
if (pairs1.length !== pairs2.length) return false;
42+
return pairs1.every((pair1, index) => {
43+
const pair2 = pairs2[index];
44+
return ExpandedPair.equals(pair1, pair2);
5745
});
58-
return result;
5946
}
60-
61-
// @Override
62-
// check implementation
63-
// public int hashCode(): number {
64-
// let hash = this.pairs.values ^ this.wasReversed
65-
// //return pairs.hashCode() ^ Boolean.valueOf(wasReversed).hashCode();
66-
// }
67-
6847
}

0 commit comments

Comments
 (0)