Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 19x 19x 15x 32x 32x 32x 17x 15x 15x 13x 13x 13x 29x 29x 29x 13x 19x 15x 13x 13x | import { define } from "../define";
import { Serdes } from "../types";
export const usize: Serdes<number> = define(
(ctx, data) => {
// eslint-disable-next-line no-constant-condition
while (true) {
const byte = data & 0x7f;
data >>= 7;
if (data) {
ctx.view.setUint8(ctx.i++, byte | 0x80);
} else {
ctx.view.setUint8(ctx.i++, byte);
return;
}
}
},
(ctx) => {
let byte: number,
res = 0,
off = 0;
do {
byte = ctx.view.getUint8(ctx.i++);
res += (byte & 0x7f) << off;
off += 7;
} while (byte > 0x7f);
return res;
}
);
export const size: Serdes<number> = define(
(ctx, data) => usize.ser(ctx, data >= 0 ? data * 2 : data * -2 - 1),
(ctx) => {
const num = usize.des(ctx);
return num & 1 ? (num + 1) / -2 : num / 2;
}
);
|