summaryrefslogtreecommitdiff
path: root/node_modules/capnp-ts/src/serialization/mask.ts
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/capnp-ts/src/serialization/mask.ts')
-rw-r--r--node_modules/capnp-ts/src/serialization/mask.ts48
1 files changed, 48 insertions, 0 deletions
diff --git a/node_modules/capnp-ts/src/serialization/mask.ts b/node_modules/capnp-ts/src/serialization/mask.ts
new file mode 100644
index 0000000..dcaa9e9
--- /dev/null
+++ b/node_modules/capnp-ts/src/serialization/mask.ts
@@ -0,0 +1,48 @@
+/**
+ * @author jdiaz5513
+ */
+
+import { INVARIANT_UNREACHABLE_CODE } from "../errors";
+import { Int64, Uint64 } from "../types/index";
+
+type DataViewSetter = (byteOffset: number, value: number, littleEndian?: boolean) => void;
+
+function _makePrimitiveMaskFn(byteLength: number, setter: DataViewSetter): (x: number) => DataView {
+ return (x: number): DataView => {
+ const dv = new DataView(new ArrayBuffer(byteLength));
+ setter.call(dv, 0, x, true);
+ return dv;
+ };
+}
+
+/* eslint-disable @typescript-eslint/unbound-method */
+export const getFloat32Mask = _makePrimitiveMaskFn(4, DataView.prototype.setFloat32);
+export const getFloat64Mask = _makePrimitiveMaskFn(8, DataView.prototype.setFloat64);
+export const getInt16Mask = _makePrimitiveMaskFn(2, DataView.prototype.setInt16);
+export const getInt32Mask = _makePrimitiveMaskFn(4, DataView.prototype.setInt32);
+export const getInt8Mask = _makePrimitiveMaskFn(1, DataView.prototype.setInt8);
+export const getUint16Mask = _makePrimitiveMaskFn(2, DataView.prototype.setUint16);
+export const getUint32Mask = _makePrimitiveMaskFn(4, DataView.prototype.setUint32);
+export const getUint8Mask = _makePrimitiveMaskFn(1, DataView.prototype.setUint8);
+/* eslint-enable */
+
+export function getBitMask(value: boolean, bitOffset: number): DataView {
+ const dv = new DataView(new ArrayBuffer(1));
+
+ if (!value) return dv;
+
+ dv.setUint8(0, 1 << bitOffset % 8);
+ return dv;
+}
+
+export function getInt64Mask(x: Int64): DataView {
+ return x.toDataView();
+}
+
+export function getUint64Mask(x: Uint64): DataView {
+ return x.toDataView();
+}
+
+export function getVoidMask(): void {
+ throw new Error(INVARIANT_UNREACHABLE_CODE);
+}