From 4e87195739f2a5d9a05451b48773c8afdc680765 Mon Sep 17 00:00:00 2001 From: akiyamn Date: Sun, 24 Sep 2023 23:22:21 +1000 Subject: Initial commit (by create-cloudflare CLI) --- .../capnp-ts/src/serialization/arena/arena.ts | 60 ++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 node_modules/capnp-ts/src/serialization/arena/arena.ts (limited to 'node_modules/capnp-ts/src/serialization/arena/arena.ts') diff --git a/node_modules/capnp-ts/src/serialization/arena/arena.ts b/node_modules/capnp-ts/src/serialization/arena/arena.ts new file mode 100644 index 0000000..1c88859 --- /dev/null +++ b/node_modules/capnp-ts/src/serialization/arena/arena.ts @@ -0,0 +1,60 @@ +/** + * @author jdiaz5513 + */ + +import initTrace from "debug"; +import { assertNever } from "../../errors"; +import { Segment } from "../segment"; +import { AnyArena } from "./any-arena"; +import { ArenaAllocationResult } from "./arena-allocation-result"; +import { ArenaKind } from "./arena-kind"; +import { MultiSegmentArena } from "./multi-segment-arena"; +import { SingleSegmentArena } from "./single-segment-arena"; + +const trace = initTrace("capnp:arena"); +trace("load"); + +export abstract class Arena { + static readonly allocate = allocate; + static readonly getBuffer = getBuffer; + static readonly getNumSegments = getNumSegments; +} + +export function allocate(minSize: number, segments: Segment[], a: AnyArena): ArenaAllocationResult { + switch (a.kind) { + case ArenaKind.MULTI_SEGMENT: + return MultiSegmentArena.allocate(minSize, a); + + case ArenaKind.SINGLE_SEGMENT: + return SingleSegmentArena.allocate(minSize, segments, a); + + default: + return assertNever(a); + } +} + +export function getBuffer(id: number, a: AnyArena): ArrayBuffer { + switch (a.kind) { + case ArenaKind.MULTI_SEGMENT: + return MultiSegmentArena.getBuffer(id, a); + + case ArenaKind.SINGLE_SEGMENT: + return SingleSegmentArena.getBuffer(id, a); + + default: + return assertNever(a); + } +} + +export function getNumSegments(a: AnyArena): number { + switch (a.kind) { + case ArenaKind.MULTI_SEGMENT: + return MultiSegmentArena.getNumSegments(a); + + case ArenaKind.SINGLE_SEGMENT: + return SingleSegmentArena.getNumSegments(); + + default: + return assertNever(a); + } +} -- cgit v1.2.3