declare const PHANTOM_PTR_TYPE_TAG: unique symbol; declare const PHANTOM_NUM_TYPE_TAG: unique symbol; export declare const PHANTOM_BYTE_SIZE_TAG: unique symbol; export declare type sizeof = TNum[typeof PHANTOM_BYTE_SIZE_TAG]; export declare type alignof = sizeof extends 8 ? 8 | 16 : sizeof extends 4 ? 4 | 8 | 12 | 16 : sizeof extends 2 ? 2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 : sizeof extends 1 ? 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 : never; interface NumTag { [PHANTOM_NUM_TYPE_TAG]: TTagName; [PHANTOM_BYTE_SIZE_TAG]: B; } /** * This actually is a workaround to avoid internal TypeScript intersection * type simplification that otherwise would yield `{} & number` types to `never`. */ interface PtrTag { [PHANTOM_PTR_TYPE_TAG]: 'ptr'; [PHANTOM_BYTE_SIZE_TAG]: 4; [PHANTOM_NUM_TYPE_TAG]: TPointee[typeof PHANTOM_NUM_TYPE_TAG]; } export declare type num = TByteSize extends 1 ? i8 | u8 : TByteSize extends 2 ? i16 | u16 : TByteSize extends 4 ? i32 | u32 | f32 : TByteSize extends 8 ? f64 : never; export declare type i8 = number & NumTag<1, 'i8'>; export declare type u8 = number & NumTag<1, 'u8'>; export declare type i16 = number & NumTag<2, 'i16'>; export declare type u16 = number & NumTag<2, 'u16'>; export declare type i32 = number & NumTag<4, 'i32'>; export declare type u32 = number & NumTag<4, 'u32'>; export declare type f32 = number & NumTag<4, 'f32'>; export declare type f64 = number & NumTag<8, 'f64'>; /** * There is no type-safe way to create pointer to pointer (`ptr`) type * in TypeScript, so you should just use type-unsafe `ptr` in this case. */ export declare type ptr = number & PtrTag; export declare const nullptr: ptr; export declare type i = Bits extends 8 ? i8 : Bits extends 16 ? i16 : Bits extends 32 ? i32 : never; export declare type u = Bits extends 8 ? u8 : Bits extends 16 ? u16 : Bits extends 32 ? u32 : never; export declare type f = Bits extends 32 ? f32 : Bits extends 64 ? f64 : never; export declare type TypedArrayOf = TNum extends i8 ? Int8Array : TNum extends u8 ? Uint8Array | Uint8ClampedArray : TNum extends i16 ? Int16Array : TNum extends u16 ? Uint16Array : TNum extends i32 | ptr ? Int32Array : TNum extends u32 ? Uint32Array : TNum extends f32 ? Float32Array : TNum extends f64 ? Float64Array : never; export {}; //# sourceMappingURL=num.d.ts.map