import { memcpy } from "./mem"; import { limits } from "./limits"; import { Type } from "./Type" import { Int } from "./Int" import { ConstString } from "./ConstString" import { ConstArray } from "./ConstArray"; import { ConstDataView } from "./ConstDataView"; import { Struct } from "./Struct"; export { memcpy, limits, Type, Int, ConstString, ConstArray, ConstDataView, Struct } export type SerializableType = NumberConstructor | StringConstructor | ArrayConstructor | DataViewConstructor | Type export type Serializable = unknown /** * @param {DataView} dv destination memory * @param {Serializable} src source object * @param {SerializableType[]} ...types primary and inner types. eg: Array, Number * @throws {Error} if too small buffer * @throws {Error} if array|string|DataView size is higher than limits.u32.MAX_VALUE */ export function serialize(dv: DataView, src: Serializable, ...types: SerializableType[]): void; /** * @param {DataView} dv source memory * @param {SerializableType[]} ...types primary and inner types. eg: Array, Number * @returns {Serializable} parsed object */ export function parse(dv: DataView, ...types: SerializableType[]): Serializable; /** * some types, like Array, String, has no fixed size. So in Structure they are stored as u32 offset, which points to their beginning * @param {Serializable} obj to check * @param {SerializableType[]} ...types primary and inner types. eg: Array, Number * @returns {boolean} */ export function isHeadless(obj: Serializable, ...types: SerializableType[]): boolean; /** * some types, like Array, String, has no fixed size. So in Structure they are stored as u32 offset, which points to their beginning * @param {SerializableType[]} ...types primary and inner types. eg: Array, Number * @returns {boolean} */ export function isHeadless(...types: SerializableType[]): boolean; /** * if obj has no fixed size, return 4 (sizeof u32 offset) * @param {Serializable} obj to check * @param {SerializableType[]} ...types primary and inner types. eg: Array, Number * @returns {number} */ export function sizeofHead(obj: Serializable, ...types: SerializableType[]): number; /** * if obj has no fixed size, return 4 (sizeof u32 offset) * @param {SerializableType[]} ...types primary and inner types. eg: Array, Number * @returns {number} */ export function sizeofHead(...types: SerializableType[]): number; /** * @param {Serializable} obj to check * @param {SerializableType[]} ...types primary and inner types. eg: Array, Number * @returns {number} */ export function sizeof(obj: Serializable, ...types: SerializableType[]): number; /** * @param {SerializableType[]} ...types primary and inner types. eg: Array, Number * @returns {number} * @throws {Error} if passed Array, String, DataView type (unknown sizeof) */ export function sizeof(...types: SerializableType[]): number;