UNPKG

c-structs

Version:
58 lines (56 loc) 2.2 kB
type InferField<F> = F extends PrimitiveDescriptor ? number : F extends PrimitiveDescriptor[] ? number[] | Float32Array | Int16Array | Int32Array | BigInt64Array | Uint16Array | Uint32Array | BigUint64Array | Float64Array : F extends StructDescriptor<infer U> ? U : never; /** Given a whole schema object, produce a “shaped” type */ type InferSchema<S extends Record<string, any>> = { [K in keyof S]: InferField<S[K]>; }; /** * Primitive descriptor defines size, TypedArray constructor, and DataView accessors. */ interface PrimitiveDescriptor { size: number; arrayType: Float32ArrayConstructor | Int16ArrayConstructor | Int32ArrayConstructor | BigInt64ArrayConstructor | Uint16ArrayConstructor | Uint32ArrayConstructor | BigUint64ArrayConstructor | Float64ArrayConstructor; getter: keyof DataView; setter: keyof DataView; } /** * Descriptor for a generated struct: knows its byte-size and has a create method. */ interface StructDescriptor<T> { size: number; create(buffer?: ArrayBuffer, baseOffset?: number): T & { buffer: ArrayBuffer; }; } /** * Constructor helpers for vectors, arrays, and structs. */ declare const c: { float(): PrimitiveDescriptor; float2(): PrimitiveDescriptor[]; float3(): PrimitiveDescriptor[]; float4(): PrimitiveDescriptor[]; uint(): PrimitiveDescriptor; uint2(): PrimitiveDescriptor[]; uint3(): PrimitiveDescriptor[]; uint4(): PrimitiveDescriptor[]; int(): PrimitiveDescriptor; int2(): PrimitiveDescriptor[]; int3(): PrimitiveDescriptor[]; int4(): PrimitiveDescriptor[]; uint16(): PrimitiveDescriptor; uint64(): PrimitiveDescriptor; int16(): PrimitiveDescriptor; int64(): PrimitiveDescriptor; float64(): PrimitiveDescriptor; matrix3(): PrimitiveDescriptor[]; matrix4(): PrimitiveDescriptor[]; /** * Create an array descriptor for nested structs. */ array<T>(structDesc: StructDescriptor<T>, length: number): StructDescriptor<T[]>; /** * Create a struct descriptor from a schema map. */ struct<S extends Record<string, any>>(schema: S): StructDescriptor<InferSchema<S>>; }; export { type StructDescriptor, c };