Skip to content

Commit 28c98a6

Browse files
committed
Negate masks for a small code size reduction
1 parent 1c53ab5 commit 28c98a6

6 files changed

Lines changed: 23 additions & 32 deletions

File tree

docs/integrity.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
index.mjs: sha384-t+94URBG0X4n9UfMx4w+QAFX9G5Y8+sQvj2nlz5/7vgweO7sAhX2e1wk7txC16Cj
2-
index.js: sha384-sBqXcYWazfHB7xekYG3pcTE62PVw4Kl4DAS71zhVPwESkFJejqoVwhKX3YiaWA1D
3-
nano.mjs: sha384-4Ws+pC9t1jZdJyS4XRFsLI8NQrlUL/bk+6sGUIT4I98XlDPBx/ga682gAmemIMTw
1+
index.mjs: sha384-6Uu0RYalZ7Zv802Ew4mdhp8Hzq4Kl/hDwjQowRN3ws0N566c/cVzWa0Mp6/0JhD0
2+
index.js: sha384-9tErxRWXMXhzGgUPF4/Mo3uQ9QsatQWR3at3hDrX5DXkkhGoFT6uh/iE1nAtyDa0
3+
nano.mjs: sha384-v8pAURUCvIAHRMAtQgbuZoaevbsskAKM7SN3ZVpoITG+8bVtwPDsQNos1U9Xm109
44
extras/svg.mjs: sha384-3pkh2mVqJfcbY5hcEp4KTGcaWZN1EeJfqKCr6Xnz9qUkgXb54ocau/pBlClVACyL
55
extras/svg.js: sha384-FElcxc5DxhRR9QjjMNlQ/0C1dTlVogFRx7Fj/sgOeUR0oKA2yvVXMqaSX6vDQsVo
66
extras/node_export.mjs: sha384-l3U32OuSe/3qIQkqn4i0VGLdCeJCpTBUd+bqIbNX7Z1HSC4iEz10feCrWIyi2PqB
@@ -9,4 +9,4 @@ extras/react.mjs: sha384-WMj3wD5sIRcxHYWdj7j7SYJ/tVJuJ/capEy+UhnivNhCfU56Z
99
extras/react.js: sha384-io/wo5e3Zc4sweQDtStRLvuuj98pZa/LG2rD1H+3ylDd7K/pWSoRrRojmZgubP2S
1010
extras/errors.mjs: sha384-LaUpr3MpI+ZWjDG8L54lwBzgymdm+C1fijP3Z3HukZOFOn3nmRUtgK5aTmOSVm/q
1111
extras/errors.js: sha384-lpwl8zlB1GwhvS1ftgUv4mCvOhlixuRa8fRag2aZ2PEEPKQ++l+IjhZL8lhbZMVe
12-
webcomponent.mjs: sha384-K3p+YoLK5MrGTZX0UnO6siMZJzIilHuW1Sje0euI6Kr2NWYWQ7YVU2ynSF0RhM72
12+
webcomponent.mjs: sha384-QX0gJO6xHh49Ad63YR4Hhfb0I3E4+gxZ+2GwA09TmxXM24yb52dHpdNHHGVXZfhm

docs/stats.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
index.mjs: 6908 bytes / 3637 bytes (compressed)
2-
index.js: 6924 bytes / 3630 bytes (compressed)
3-
nano.mjs: 3792 bytes / 2159 bytes (compressed)
1+
index.mjs: 6877 bytes / 3635 bytes (compressed)
2+
index.js: 6893 bytes / 3629 bytes (compressed)
3+
nano.mjs: 3761 bytes / 2157 bytes (compressed)
44
extras/svg.mjs: 1348 bytes / 953 bytes (compressed)
55
extras/svg.js: 1365 bytes / 951 bytes (compressed)
66
extras/node_export.mjs: 1072 bytes / 785 bytes (compressed)
@@ -9,4 +9,4 @@ extras/react.mjs: 961 bytes / 661 bytes (compressed)
99
extras/react.js: 968 bytes / 660 bytes (compressed)
1010
extras/errors.mjs: 287 bytes / 342 bytes (compressed)
1111
extras/errors.js: 287 bytes / 340 bytes (compressed)
12-
webcomponent.mjs: 8654 bytes / 4417 bytes (compressed)
12+
webcomponent.mjs: 8623 bytes / 4417 bytes (compressed)

src/qr/draw.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ export const applyMask = ({ size, _data }, mask, maskId, ecLevel) => {
9696
for (let j = 0; j < size; ++j) {
9797
for (let i = 0; i < size; ++i) {
9898
const p = j * size + i;
99-
_data[p] ^= mask(i, j) & ((_data[p] >> 1) ^ 1);
99+
_data[p] ^= !(mask(i, j) || _data[p] & 2);
100100
}
101101
}
102102
const info = ((ecLevel ^ 1) << 3) | maskId;

src/qr/options/masks.mjs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
export const masks = [
2-
(x, y) => !((x ^ y) & 1),
3-
(x, y) => !(y & 1),
4-
(x) => !(x % 3),
5-
(x, y) => !((x + y) % 3),
6-
(x, y) => !((((x / 3) | 0) ^ (y >> 1)) & 1),
7-
(x, y) => !((x & y & 1) + ((x * y) % 3)),
8-
(x, y) => !(((x & y & 1) + ((x * y) % 3)) & 1),
9-
(x, y) => !((((x ^ y) & 1) + ((x * y) % 3)) & 1),
2+
(x, y) => (x ^ y) & 1,
3+
(x, y) => y & 1,
4+
(x) => x % 3,
5+
(x, y) => (x + y) % 3,
6+
(x, y) => ((x / 3) ^ (y >> 1)) & 1,
7+
(x, y) => (x & y & 1) + ((x * y) % 3),
8+
(x, y) => ((x & y) + ((x * y) % 3)) & 1,
9+
(x, y) => ((x ^ y) + ((x * y) % 3)) & 1,
1010
];

src/qr/options/masks.test.mjs

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -76,22 +76,13 @@ describe('masks', () => {
7676
const dimX = 6;
7777
const dimY = id === 4 ? 4 : 6;
7878

79-
it('returns true or false for any given pixel location', () => {
80-
for (let y = 0; y < 10; ++y) {
81-
for (let x = 0; x < 10; ++x) {
82-
const value = mask(x, y);
83-
expect(typeof value).toEqual('boolean');
84-
}
85-
}
86-
});
87-
8879
it(`defines a repeating ${dimX}x${dimY} pattern`, () => {
8980
for (let y = 0; y < dimY; ++y) {
9081
for (let x = 0; x < dimX; ++x) {
91-
const value = mask(x, y);
92-
expect(value).toEqual(mask(x + dimX, y));
93-
expect(value).toEqual(mask(x, y + dimY));
94-
expect(value).toEqual(mask(x + dimX, y + dimY));
82+
const value = Boolean(mask(x, y));
83+
expect(value).toEqual(Boolean(mask(x + dimX, y)));
84+
expect(value).toEqual(Boolean(mask(x, y + dimY)));
85+
expect(value).toEqual(Boolean(mask(x + dimX, y + dimY)));
9586
}
9687
}
9788
});
@@ -100,7 +91,7 @@ describe('masks', () => {
10091
let actual = '';
10192
for (let y = 0; y < dimY; ++y) {
10293
for (let x = 0; x < dimX; ++x) {
103-
actual += mask(x, y) ? '#' : ' ';
94+
actual += mask(x, y) ? ' ' : '#';
10495
}
10596
actual += '\n';
10697
}

tools/mask-preview-gen.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,6 @@ for (let i = 0; i < masks.length; ++i) {
2323

2424
await writeFile(
2525
path,
26-
toPngBuffer({ size, get: (x, y) => !masks[i](x, y) }, options),
26+
toPngBuffer({ size, get: (x, y) => Boolean(masks[i](x, y)) }, options),
2727
);
2828
}

0 commit comments

Comments
 (0)