UNPKG

capnp-ts

Version:

Strongly typed Cap'n Proto implementation for the browser and Node.js using TypeScript

36 lines (28 loc) 990 B
/** * @author jdiaz5513 */ import initTrace from "debug"; import { ListElementSize } from "../list-element-size"; import { _ListCtor, List, ListCtor } from "./list"; import { Struct, StructCtor } from "./struct"; import { copyFrom } from "./pointer"; const trace = initTrace("capnp:list:composite"); trace("load"); export function CompositeList<T extends Struct>(CompositeClass: StructCtor<T>): ListCtor<T> { return class extends List<T> { static readonly _capnp: _ListCtor = { compositeSize: CompositeClass._capnp.size, displayName: `List<${CompositeClass._capnp.displayName}>`, size: ListElementSize.COMPOSITE, }; get(index: number): T { return new CompositeClass(this.segment, this.byteOffset, this._capnp.depthLimit - 1, index); } set(index: number, value: T): void { copyFrom(value, this.get(index)); } toString(): string { return `Composite_${super.toString()},cls:${CompositeClass.toString()}`; } }; }