Skip to content

Commit c8c2f6e

Browse files
committed
optimize encodeInt64 (2 times faster)
1 parent 332c391 commit c8c2f6e

File tree

1 file changed

+4
-10
lines changed

1 file changed

+4
-10
lines changed

src/utils/int.ts

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,11 @@ export function encodeUint64(value: number, view: DataView, offset: number): voi
1111
export function encodeInt64(value: number, view: DataView, offset: number): void {
1212
if (value < 0) {
1313
const absMinusOne = -value - 1;
14-
const high = absMinusOne / 0x100000000;
15-
const low = absMinusOne & 0xffffffff;
14+
const high = absMinusOne / 0x1_0000_0000;
15+
const low = absMinusOne & 0xffff_ffff;
1616

17-
view.setUint8(offset, (((high >> 24) & 0xff) ^ 0xff) | 0x80);
18-
view.setUint8(offset + 1, ((high >> 16) & 0xff) ^ 0xff);
19-
view.setUint8(offset + 2, ((high >> 8) & 0xff) ^ 0xff);
20-
view.setUint8(offset + 3, (high & 0xff) ^ 0xff);
21-
view.setUint8(offset + 4, ((low >> 24) & 0xff) ^ 0xff);
22-
view.setUint8(offset + 5, ((low >> 16) & 0xff) ^ 0xff);
23-
view.setUint8(offset + 6, ((low >> 8) & 0xff) ^ 0xff);
24-
view.setUint8(offset + 7, (low & 0xff) ^ 0xff);
17+
view.setUint32(offset, (high ^ 0xffff_ffff) | 0x8000_0000);
18+
view.setUint32(offset + 4, low ^ 0xffff_ffff);
2519
} else {
2620
encodeUint64(value, view, offset);
2721
}

0 commit comments

Comments
 (0)