Spaces:
Configuration error
Configuration error
| /** | |
| * @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); | |
| } | |
| } | |