Lee Thanh
Upload 3012 files
5641073
raw
history blame
990 Bytes
/**
* @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()}`;
}
};
}