Skip to content

Commit b319903

Browse files
committed
alternative implementation of bg4
1 parent 8acad93 commit b319903

File tree

1 file changed

+31
-14
lines changed

1 file changed

+31
-14
lines changed

packages/hub/src/utils/XetBlob.ts

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -437,25 +437,42 @@ export function bg4_regoup_bytes(bytes: Uint8Array): Uint8Array {
437437
const g3_pos = g2_pos + split + (rem == 3 ? 1 : 0);
438438

439439
const ret = new Uint8Array(bytes.length);
440-
for (let i = 0; i < bytes.length - 3; i += 4) {
441-
ret[i] = bytes[i / 4];
442-
ret[i + 1] = bytes[g1_pos + i / 4];
443-
ret[i + 2] = bytes[g2_pos + i / 4];
444-
ret[i + 3] = bytes[g3_pos + i / 4];
440+
for (let i = 0, j = 0; i < bytes.length; i += 4, j++) {
441+
ret[i] = bytes[j];
445442
}
446443

447-
if (rem === 1) {
448-
ret[bytes.length - 1] = bytes[g1_pos - 1];
449-
} else if (rem === 2) {
450-
ret[bytes.length - 2] = bytes[g1_pos - 1];
451-
ret[bytes.length - 1] = bytes[g2_pos - 1];
452-
} else if (rem === 3) {
453-
ret[bytes.length - 3] = bytes[g1_pos - 1];
454-
ret[bytes.length - 2] = bytes[g2_pos - 1];
455-
ret[bytes.length - 1] = bytes[g3_pos - 1];
444+
for (let i = 1, j = g1_pos; i < bytes.length; i += 4, j++) {
445+
ret[i] = bytes[j];
446+
}
447+
448+
for (let i = 2, j = g2_pos; i < bytes.length; i += 4, j++) {
449+
ret[i] = bytes[j];
450+
}
451+
452+
for (let i = 3, j = g3_pos; i < bytes.length; i += 4, j++) {
453+
ret[i] = bytes[j];
456454
}
457455

458456
return ret;
457+
458+
// alternative implementation (to benchmark which one is faster)
459+
// for (let i = 0; i < bytes.length - 3; i += 4) {
460+
// ret[i] = bytes[i / 4];
461+
// ret[i + 1] = bytes[g1_pos + i / 4];
462+
// ret[i + 2] = bytes[g2_pos + i / 4];
463+
// ret[i + 3] = bytes[g3_pos + i / 4];
464+
// }
465+
466+
// if (rem === 1) {
467+
// ret[bytes.length - 1] = bytes[g1_pos - 1];
468+
// } else if (rem === 2) {
469+
// ret[bytes.length - 2] = bytes[g1_pos - 1];
470+
// ret[bytes.length - 1] = bytes[g2_pos - 1];
471+
// } else if (rem === 3) {
472+
// ret[bytes.length - 3] = bytes[g1_pos - 1];
473+
// ret[bytes.length - 2] = bytes[g2_pos - 1];
474+
// ret[bytes.length - 1] = bytes[g3_pos - 1];
475+
// }
459476
}
460477

461478
async function getAccessToken(

0 commit comments

Comments
 (0)