import { JSONMode } from "../.."; import { deserializeUnsigned_NAIVE, deserializeUnsignedField_NAIVE, } from "../naive/unsigned"; import { deserializeUnsigned_SWAR, deserializeUnsignedField_SWAR, } from "../swar/integer"; import { deserializeUnsigned_SIMD, deserializeUnsignedField_SIMD, } from "../simd/integer"; /** * Compile-time dispatch for {@link deserializeUnsigned_NAIVE}, * {@link deserializeUnsigned_SWAR}, and {@link deserializeUnsigned_SIMD} * based on `JSON_MODE`. * * @param srcStart Pointer to the first UTF-16 code unit. * @param srcEnd Pointer just past the last code unit. * @returns The parsed value, truncated to `T`. */ export function deserializeUnsigned( srcStart: usize, srcEnd: usize, ): T { if (JSON_MODE == JSONMode.SIMD) { return deserializeUnsigned_SIMD(srcStart, srcEnd); } else if (JSON_MODE == JSONMode.NAIVE) { return deserializeUnsigned_NAIVE(srcStart, srcEnd); } else { return deserializeUnsigned_SWAR(srcStart, srcEnd); } } /** * Compile-time dispatch for {@link deserializeUnsignedField_NAIVE}, * {@link deserializeUnsignedField_SWAR}, and * {@link deserializeUnsignedField_SIMD} based on `JSON_MODE`. * * @param srcStart Pointer to the first UTF-16 code unit. * @param srcEnd Pointer just past the last code unit. * @param dstObj Destination object pointer. * @param dstOffset Byte offset of the field within `dstObj`. * @returns The source position immediately after the last digit consumed. */ export function deserializeUnsignedField( srcStart: usize, srcEnd: usize, dstObj: usize, dstOffset: usize = 0, ): usize { if (JSON_MODE == JSONMode.SIMD) { return deserializeUnsignedField_SIMD( srcStart, srcEnd, dstObj, dstOffset, ); } else if (JSON_MODE == JSONMode.NAIVE) { return deserializeUnsignedField_NAIVE( srcStart, srcEnd, dstObj, dstOffset, ); } else { return deserializeUnsignedField_SWAR( srcStart, srcEnd, dstObj, dstOffset, ); } }