summaryrefslogtreecommitdiff
path: root/std/encoding/binary.ts
diff options
context:
space:
mode:
authorCasper Beyer <caspervonb@pm.me>2021-02-02 19:05:46 +0800
committerGitHub <noreply@github.com>2021-02-02 12:05:46 +0100
commit6abf126c2a7a451cded8c6b5e6ddf1b69c84055d (patch)
treefd94c013a19fcb38954844085821ec1601c20e18 /std/encoding/binary.ts
parenta2b5d44f1aa9d64f448a2a3cc2001272e2f60b98 (diff)
chore: remove std directory (#9361)
This removes the std folder from the tree. Various parts of the tests are pretty tightly dependent on std (47 direct imports and 75 indirect imports, not counting the cli tests that use them as fixtures) so I've added std as a submodule for now.
Diffstat (limited to 'std/encoding/binary.ts')
-rw-r--r--std/encoding/binary.ts266
1 files changed, 0 insertions, 266 deletions
diff --git a/std/encoding/binary.ts b/std/encoding/binary.ts
deleted file mode 100644
index f62b3b7a4..000000000
--- a/std/encoding/binary.ts
+++ /dev/null
@@ -1,266 +0,0 @@
-// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
-
-type RawBaseType = "int8" | "int16" | "int32" | "uint8" | "uint16" | "uint32";
-type RawNumberType = RawBaseType | "float32" | "float64";
-type RawBigType = RawBaseType | "int64" | "uint64";
-export type DataType = RawNumberType | RawBigType;
-
-/** How encoded binary data is ordered. */
-export type Endianness = "little" | "big";
-
-/** Options for working with the `number` type. */
-export interface VarnumOptions {
- /** The binary format used. */
- dataType?: RawNumberType;
- /** The binary encoding order used. */
- endian?: Endianness;
-}
-
-/** Options for working with the `bigint` type. */
-export interface VarbigOptions {
- /** The binary format used. */
- dataType?: RawBigType;
- /** The binary encoding order used. */
- endian?: Endianness;
-}
-
-const rawTypeSizes: Record<DataType, number> = {
- int8: 1,
- uint8: 1,
- int16: 2,
- uint16: 2,
- int32: 4,
- uint32: 4,
- int64: 8,
- uint64: 8,
- float32: 4,
- float64: 8,
-} as const;
-
-/** Number of bytes required to store `dataType`. */
-export function sizeof(dataType: DataType): number {
- return rawTypeSizes[dataType];
-}
-
-/** Reads `n` bytes from `r`.
- *
- * Resolves it in a `Uint8Array`, or throws `Deno.errors.UnexpectedEof` if `n` bytes cannot be read. */
-export async function getNBytes(
- r: Deno.Reader,
- n: number,
-): Promise<Uint8Array> {
- const scratch = new Uint8Array(n);
- const nRead = await r.read(scratch);
- if (nRead === null || nRead < n) throw new Deno.errors.UnexpectedEof();
- return scratch;
-}
-
-/** Decodes a number from `b`. If `o.bytes` is shorter than `sizeof(o.dataType)`, returns `null`.
- *
- * `o.dataType` defaults to `"int32"`. */
-export function varnum(b: Uint8Array, o: VarnumOptions = {}): number | null {
- o.dataType = o.dataType ?? "int32";
- const littleEndian = (o.endian ?? "big") === "little" ? true : false;
- if (b.length < sizeof(o.dataType)) return null;
- const view = new DataView(b.buffer);
- switch (o.dataType) {
- case "int8":
- return view.getInt8(0);
- case "uint8":
- return view.getUint8(0);
- case "int16":
- return view.getInt16(0, littleEndian);
- case "uint16":
- return view.getUint16(0, littleEndian);
- case "int32":
- return view.getInt32(0, littleEndian);
- case "uint32":
- return view.getUint32(0, littleEndian);
- case "float32":
- return view.getFloat32(0, littleEndian);
- case "float64":
- return view.getFloat64(0, littleEndian);
- }
-}
-
-/** Decodes a bigint from `b`. If `o.bytes` is shorter than `sizeof(o.dataType)`, returns `null`.
- *
- * `o.dataType` defaults to `"int64"`. */
-export function varbig(b: Uint8Array, o: VarbigOptions = {}): bigint | null {
- o.dataType = o.dataType ?? "int64";
- const littleEndian = (o.endian ?? "big") === "little" ? true : false;
- if (b.length < sizeof(o.dataType)) return null;
- const view = new DataView(b.buffer);
- switch (o.dataType) {
- case "int8":
- return BigInt(view.getInt8(0));
- case "uint8":
- return BigInt(view.getUint8(0));
- case "int16":
- return BigInt(view.getInt16(0, littleEndian));
- case "uint16":
- return BigInt(view.getUint16(0, littleEndian));
- case "int32":
- return BigInt(view.getInt32(0, littleEndian));
- case "uint32":
- return BigInt(view.getUint32(0, littleEndian));
- case "int64":
- return view.getBigInt64(0, littleEndian);
- case "uint64":
- return view.getBigUint64(0, littleEndian);
- }
-}
-
-/** Encodes number `x` into `b`. Returns the number of bytes used, or `0` if `b` is shorter than `sizeof(o.dataType)`.
- *
- * `o.dataType` defaults to `"int32"`. */
-export function putVarnum(
- b: Uint8Array,
- x: number,
- o: VarnumOptions = {},
-): number {
- o.dataType = o.dataType ?? "int32";
- const littleEndian = (o.endian ?? "big") === "little" ? true : false;
- if (b.length < sizeof(o.dataType)) return 0;
- const view = new DataView(b.buffer);
- switch (o.dataType) {
- case "int8":
- view.setInt8(0, x);
- break;
- case "uint8":
- view.setUint8(0, x);
- break;
- case "int16":
- view.setInt16(0, x, littleEndian);
- break;
- case "uint16":
- view.setUint16(0, x, littleEndian);
- break;
- case "int32":
- view.setInt32(0, x, littleEndian);
- break;
- case "uint32":
- view.setUint32(0, x, littleEndian);
- break;
- case "float32":
- view.setFloat32(0, x, littleEndian);
- break;
- case "float64":
- view.setFloat64(0, x, littleEndian);
- break;
- }
- return sizeof(o.dataType);
-}
-
-/** Encodes bigint `x` into `b`. Returns the number of bytes used, or `0` if `b` is shorter than `sizeof(o.dataType)`.
- *
- * `o.dataType` defaults to `"int64"`. */
-export function putVarbig(
- b: Uint8Array,
- x: bigint,
- o: VarbigOptions = {},
-): number {
- o.dataType = o.dataType ?? "int64";
- const littleEndian = (o.endian ?? "big") === "little" ? true : false;
- if (b.length < sizeof(o.dataType)) return 0;
- const view = new DataView(b.buffer);
- switch (o.dataType) {
- case "int8":
- view.setInt8(0, Number(x));
- break;
- case "uint8":
- view.setUint8(0, Number(x));
- break;
- case "int16":
- view.setInt16(0, Number(x), littleEndian);
- break;
- case "uint16":
- view.setUint16(0, Number(x), littleEndian);
- break;
- case "int32":
- view.setInt32(0, Number(x), littleEndian);
- break;
- case "uint32":
- view.setUint32(0, Number(x), littleEndian);
- break;
- case "int64":
- view.setBigInt64(0, x, littleEndian);
- break;
- case "uint64":
- view.setBigUint64(0, x, littleEndian);
- break;
- }
- return sizeof(o.dataType);
-}
-
-/** Decodes a number from `r`, consuming `sizeof(o.dataType)` bytes. If less than `sizeof(o.dataType)` bytes were read, throws `Deno.errors.unexpectedEof`.
- *
- * `o.dataType` defaults to `"int32"`. */
-export async function readVarnum(
- r: Deno.Reader,
- o: VarnumOptions = {},
-): Promise<number> {
- o.dataType = o.dataType ?? "int32";
- const scratch = await getNBytes(r, sizeof(o.dataType));
- return varnum(scratch, o) as number;
-}
-
-/** Decodes a bigint from `r`, consuming `sizeof(o.dataType)` bytes. If less than `sizeof(o.dataType)` bytes were read, throws `Deno.errors.unexpectedEof`.
- *
- * `o.dataType` defaults to `"int64"`. */
-export async function readVarbig(
- r: Deno.Reader,
- o: VarbigOptions = {},
-): Promise<bigint> {
- o.dataType = o.dataType ?? "int64";
- const scratch = await getNBytes(r, sizeof(o.dataType));
- return varbig(scratch, o) as bigint;
-}
-
-/** Encodes and writes `x` to `w`. Resolves to the number of bytes written.
- *
- * `o.dataType` defaults to `"int32"`. */
-export function writeVarnum(
- w: Deno.Writer,
- x: number,
- o: VarnumOptions = {},
-): Promise<number> {
- o.dataType = o.dataType ?? "int32";
- const scratch = new Uint8Array(sizeof(o.dataType));
- putVarnum(scratch, x, o);
- return w.write(scratch);
-}
-
-/** Encodes and writes `x` to `w`. Resolves to the number of bytes written.
- *
- * `o.dataType` defaults to `"int64"`. */
-export function writeVarbig(
- w: Deno.Writer,
- x: bigint,
- o: VarbigOptions = {},
-): Promise<number> {
- o.dataType = o.dataType ?? "int64";
- const scratch = new Uint8Array(sizeof(o.dataType));
- putVarbig(scratch, x, o);
- return w.write(scratch);
-}
-
-/** Encodes `x` into a new `Uint8Array`.
- *
- * `o.dataType` defaults to `"int32"` */
-export function varnumBytes(x: number, o: VarnumOptions = {}): Uint8Array {
- o.dataType = o.dataType ?? "int32";
- const b = new Uint8Array(sizeof(o.dataType));
- putVarnum(b, x, o);
- return b;
-}
-
-/** Encodes `x` into a new `Uint8Array`.
- *
- * `o.dataType` defaults to `"int64"` */
-export function varbigBytes(x: bigint, o: VarbigOptions = {}): Uint8Array {
- o.dataType = o.dataType ?? "int64";
- const b = new Uint8Array(sizeof(o.dataType));
- putVarbig(b, x, o);
- return b;
-}