json-as 1.3.5 → 1.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -1
- package/assembly/deserialize/helpers/uint.ts +4 -1
- package/assembly/deserialize/index/arbitrary.ts +5 -1
- package/assembly/deserialize/index/array.ts +13 -3
- package/assembly/deserialize/index/integer.ts +68 -1
- package/assembly/deserialize/index/string.ts +4 -1
- package/assembly/deserialize/index/typedarray.ts +13 -3
- package/assembly/deserialize/index/unsigned.ts +78 -1
- package/assembly/deserialize/simd/array/integer.ts +327 -50
- package/assembly/deserialize/simd/integer.ts +233 -0
- package/assembly/deserialize/simd/string.ts +45 -11
- package/assembly/deserialize/simple/arbitrary.ts +11 -4
- package/assembly/deserialize/simple/array/arbitrary.ts +24 -5
- package/assembly/deserialize/simple/array/array.ts +8 -2
- package/assembly/deserialize/simple/array/bool.ts +38 -7
- package/assembly/deserialize/simple/array/box.ts +8 -2
- package/assembly/deserialize/simple/array/float.ts +36 -9
- package/assembly/deserialize/simple/array/generic.ts +12 -4
- package/assembly/deserialize/simple/array/integer.ts +8 -2
- package/assembly/deserialize/simple/array/map.ts +26 -6
- package/assembly/deserialize/simple/array/object.ts +26 -6
- package/assembly/deserialize/simple/array/raw.ts +34 -7
- package/assembly/deserialize/simple/array/string.ts +8 -2
- package/assembly/deserialize/simple/array/struct.ts +26 -6
- package/assembly/deserialize/simple/array.ts +13 -3
- package/assembly/deserialize/simple/bool.ts +6 -2
- package/assembly/deserialize/simple/float.ts +6 -1
- package/assembly/deserialize/simple/integer.ts +10 -2
- package/assembly/deserialize/simple/map.ts +95 -22
- package/assembly/deserialize/simple/object.ts +63 -14
- package/assembly/deserialize/simple/raw.ts +4 -1
- package/assembly/deserialize/simple/set.ts +59 -14
- package/assembly/deserialize/simple/staticarray/string.ts +11 -3
- package/assembly/deserialize/simple/staticarray.ts +64 -14
- package/assembly/deserialize/simple/string.ts +5 -92
- package/assembly/deserialize/simple/struct.ts +5 -1
- package/assembly/deserialize/simple/typedarray.ts +16 -3
- package/assembly/deserialize/simple/unsigned.ts +10 -15
- package/assembly/deserialize/swar/array/arbitrary.ts +5 -1
- package/assembly/deserialize/swar/array/array.ts +30 -6
- package/assembly/deserialize/swar/array/bool.ts +22 -4
- package/assembly/deserialize/swar/array/box.ts +5 -1
- package/assembly/deserialize/swar/array/float.ts +15 -3
- package/assembly/deserialize/swar/array/generic.ts +24 -7
- package/assembly/deserialize/swar/array/integer.ts +328 -84
- package/assembly/deserialize/swar/array/map.ts +5 -1
- package/assembly/deserialize/swar/array/object.ts +27 -7
- package/assembly/deserialize/swar/array/raw.ts +5 -1
- package/assembly/deserialize/swar/array/shared.ts +36 -11
- package/assembly/deserialize/swar/array/string.ts +20 -4
- package/assembly/deserialize/swar/array/struct.ts +27 -7
- package/assembly/deserialize/swar/array.ts +19 -4
- package/assembly/deserialize/swar/integer.ts +246 -0
- package/assembly/deserialize/swar/string.ts +98 -194
- package/assembly/index.d.ts +3 -1
- package/assembly/index.ts +312 -81
- package/assembly/serialize/index/float.ts +5 -1
- package/assembly/serialize/index/typedarray.ts +25 -7
- package/assembly/serialize/simd/string.ts +6 -2
- package/assembly/serialize/simple/array.ts +179 -1
- package/assembly/serialize/simple/float.ts +4 -1
- package/assembly/serialize/simple/integer.ts +9 -9
- package/assembly/serialize/simple/map.ts +6 -2
- package/assembly/serialize/simple/raw.ts +5 -1
- package/assembly/serialize/simple/set.ts +6 -1
- package/assembly/serialize/simple/staticarray.ts +6 -1
- package/assembly/serialize/simple/string.ts +0 -1
- package/assembly/serialize/simple/typedarray.ts +10 -3
- package/assembly/serialize/swar/string.ts +25 -8
- package/assembly/tsconfig.json +1 -21
- package/assembly/util/atoi-fast.ts +81 -0
- package/assembly/util/concat.ts +5 -1
- package/assembly/util/dragonbox-cache.ts +443 -2
- package/assembly/util/dragonbox.ts +43 -14
- package/assembly/util/itoa-fast.ts +230 -0
- package/assembly/util/masks.ts +18 -1
- package/assembly/util/parsefloat-fast.ts +167 -0
- package/assembly/util/simd-int.ts +191 -0
- package/assembly/util/snp.ts +4 -1
- package/assembly/util/swar-int.ts +248 -0
- package/assembly/util/swar.ts +13 -3
- package/lib/as-bs.ts +13 -5
- package/package.json +12 -4
- package/transform/lib/builder.d.ts.map +1 -1
- package/transform/lib/builder.js +13 -5
- package/transform/lib/builder.js.map +1 -1
- package/transform/lib/index.d.ts +1 -0
- package/transform/lib/index.d.ts.map +1 -1
- package/transform/lib/index.js +1030 -241
- package/transform/lib/index.js.map +1 -1
- package/transform/lib/linkers/alias.d.ts.map +1 -1
- package/transform/lib/linkers/alias.js.map +1 -1
- package/transform/lib/linkers/custom.d.ts.map +1 -1
- package/transform/lib/linkers/custom.js +3 -2
- package/transform/lib/linkers/custom.js.map +1 -1
- package/transform/lib/linkers/imports.d.ts.map +1 -1
- package/transform/lib/linkers/imports.js.map +1 -1
- package/transform/lib/types.d.ts.map +1 -1
- package/transform/lib/types.js +54 -16
- package/transform/lib/types.js.map +1 -1
- package/transform/lib/util.d.ts.map +1 -1
- package/transform/lib/util.js +1 -1
- package/transform/lib/util.js.map +1 -1
- package/transform/lib/visitor.d.ts.map +1 -1
- package/transform/lib/visitor.js +2 -1
- package/transform/lib/visitor.js.map +1 -1
- package/assembly/custom/util.ts +0 -310
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## 2026-05-19 - 1.3.7
|
|
4
|
+
|
|
5
|
+
- fix: anchor the json-as transform's import-path rewrite on the *trailing* `json-as` directory via `lastIndexOf`. Under pnpm/yarn-pnp the install path is `.pnpm/json-as@<ver>_<hash>/node_modules/json-as`; the previous `indexOf` matched the version-qualified store directory and leaked it into every emitted runtime import, crashing AS during `program.initialize` (AssertionError at `program.ts:1183`). Flat-npm consumers were unaffected. Test coverage added in `transform/__tests__/normalize-base-rel.test.mjs` (8 layout cases, including pnpm with version+hash). Runnable via `npm run test:transform`
|
|
6
|
+
- perf: `JSON.parse<u8[]>` SWAR / SIMD throughput at ~64 MiB up to ~2.8 GB/s (SWAR) and ~4.6 GB/s (SIMD), up from ~750 MB/s in both modes. SWAR cascades three u64 fast paths (3-/2-/1-digit single-element); SIMD batch-decodes 2 elements per v128 load via `i32x4.dot_i16x8_s` across six (a, b)-width patterns (0x88 / 0x48 / 0x44 / 0x24 / 0x28 / 0x22), falling back to the SWAR cascade for the remainder
|
|
7
|
+
- perf: `JSON.parse<u32[]>` (and other wider integer arrays) now use worst-case `srcLen >> 2` pre-allocation + unchecked direct stores via a `writePtr`, eliminating `Array.push`'s per-element capacity check. ~2.2 GB/s SWAR, ~2.7 GB/s SIMD on the u32-64mib bench (up from ~1.2 GB/s); the same pattern applies to all integer widths. Parse helpers (`parseSignedIntegerSWAR`, `parseUnsignedIntegerSWAR`, signed/unsigned scalar and SIMD variants) now take a `slot: usize` instead of `out: T` and store via `storeSignedInteger` / `storeUnsignedInteger`
|
|
8
|
+
- perf: `JSON.parse<bool[]>` ~10 GB/s across all modes (up from ~1.5 GB/s). Same pre-allocation + unchecked-store pattern; the per-element u64 magic-constant token match stays
|
|
9
|
+
- perf: `JSON.parse<f64[]>` / `JSON.parse<f32[]>` ~870 MB/s, up from ~735 MB/s, via pre-allocation + unchecked stores. The remaining cost is in `f64.parse` itself (Grisu)
|
|
10
|
+
- perf: `JSON.stringify<u8[]>` ~5.1 GB/s, up from ~680 MB/s (7.4×), via a 256-entry UTF-16 LUT that packs the `"DDD,"` representation of each `u8` value into a single u64 plus a parallel byte-count LUT. Trailing comma is overwritten by `]` after the loop. `JSON.stringify<i8[]>` follows the same path with a peeled `-`
|
|
11
|
+
- perf: `JSON.stringify<bool[]>` ~4.6 GB/s, up from ~1.1 GB/s (4.2×), by folding the per-element comma into the element write (`store<u64>(TRUE_COMMA_LO) + store<u16>(0x002c, 8)` for `"true,"`; `store<u64>(FALSE_COMMA_LO) + store<u32>(0x002c_0065, 8)` for `"false,"`)
|
|
12
|
+
- perf: replace AS std's `itoa_buffered` in the integer serialize path with a jeaiii-style forward-writing itoa (`assembly/util/itoa-fast.ts`). The new path uses a 100-entry UTF-16 digit-pair LUT, computes digit count from a width-ladder so `decimalCount32` is no longer a separate call, and `@inline`s into the array loop. `JSON.stringify<i32[]>` ~1.8 GB/s, up from ~1.35 GB/s. Per-width gains range from 1.0× (1-digit) to 3.4× (2-digit) in the head-to-head bench
|
|
13
|
+
- bench: new throughput benches at `assembly/__benches__/custom/{u8,u32,f64,bool}-64mib.bench.ts` for deserialize and `serialize-primitive-arrays.bench.ts` for stringify; head-to-head benches `itoa-h2h.bench.ts` (`itoa_buffered` vs jeaiii) and `parsefloat-h2h.bench.ts` (existing parser vs Lemire-lite at `util/parsefloat-fast.ts` — research, not wired in due to test expectations encoding the existing parser's rounding behaviour)
|
|
14
|
+
- deps: pin `as-test` to `^1.1.10` and `try-as` to `^1.0.1`
|
|
15
|
+
|
|
16
|
+
## 2026-05-14 - 1.3.6
|
|
17
|
+
|
|
18
|
+
- fix: prevent cross-lane borrow propagation in `detect_escapable_u64_swar_safe` and `detect_escapable_u64_swar_unsafe` by ORing `0x0100_0100_0100_0100` into each 16-bit lane before the SWAR subtraction steps, eliminating corrupted output (`\u00\0\0`) when a NUL or other control character precedes a printable character in SWAR string serialization
|
|
19
|
+
- tooling: fix `bun run bench -- <suite>` argument forwarding so the suite name reaches `run-bench.as.sh` (and `run-bench.js.sh` for non-custom suites) instead of only being passed to `charts:build`
|
|
4
20
|
|
|
5
21
|
## 2026-05-08 - 1.3.5
|
|
6
22
|
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
export function deserializeUintScan<T extends number>(
|
|
1
|
+
export function deserializeUintScan<T extends number>(
|
|
2
|
+
src: usize,
|
|
3
|
+
dst: usize,
|
|
4
|
+
): usize {
|
|
2
5
|
let digit = <T>load<u16>(src) - 48;
|
|
3
6
|
if (digit > 9) abort("Found invalid digit");
|
|
4
7
|
let val = digit;
|
|
@@ -6,7 +6,11 @@ import { deserializeObject } from "./object";
|
|
|
6
6
|
import { deserializeString } from "./string";
|
|
7
7
|
import { BRACE_LEFT, BRACKET_LEFT, CHAR_N, QUOTE } from "../../custom/chars";
|
|
8
8
|
|
|
9
|
-
export function deserializeArbitrary(
|
|
9
|
+
export function deserializeArbitrary(
|
|
10
|
+
srcStart: usize,
|
|
11
|
+
srcEnd: usize,
|
|
12
|
+
dst: usize,
|
|
13
|
+
): JSON.Value {
|
|
10
14
|
const firstChar = load<u16>(srcStart);
|
|
11
15
|
if (firstChar == QUOTE) {
|
|
12
16
|
return JSON.Value.from(deserializeString(srcStart, srcEnd));
|
|
@@ -14,9 +14,16 @@ import { deserializeStructArray } from "../simple/array/struct";
|
|
|
14
14
|
import { deserializeIntegerArray_SIMD } from "../simd/array/integer";
|
|
15
15
|
import { deserializeIntegerArray_SWAR } from "../swar/array/integer";
|
|
16
16
|
|
|
17
|
-
export {
|
|
17
|
+
export {
|
|
18
|
+
deserializeArrayField,
|
|
19
|
+
deserializeArrayField as deserializeArrayField_SWAR,
|
|
20
|
+
} from "../swar/array";
|
|
18
21
|
|
|
19
|
-
export function deserializeArray<T extends unknown[]>(
|
|
22
|
+
export function deserializeArray<T extends unknown[]>(
|
|
23
|
+
srcStart: usize,
|
|
24
|
+
srcEnd: usize,
|
|
25
|
+
dst: usize,
|
|
26
|
+
): T {
|
|
20
27
|
if (isString<valueof<T>>()) {
|
|
21
28
|
return <T>deserializeStringArray(srcStart, srcEnd, dst);
|
|
22
29
|
} else if (isBoolean<valueof<T>>()) {
|
|
@@ -56,7 +63,10 @@ export function deserializeArray<T extends unknown[]>(srcStart: usize, srcEnd: u
|
|
|
56
63
|
} else if (isDefined(type.__DESERIALIZE_CUSTOM)) {
|
|
57
64
|
return deserializeStructArray<T>(srcStart, srcEnd, dst);
|
|
58
65
|
// @ts-ignore: defined by transform
|
|
59
|
-
} else if (
|
|
66
|
+
} else if (
|
|
67
|
+
isDefined(type.__DESERIALIZE_SLOW) ||
|
|
68
|
+
isDefined(type.__DESERIALIZE_FAST)
|
|
69
|
+
) {
|
|
60
70
|
return deserializeStructArray<T>(srcStart, srcEnd, dst);
|
|
61
71
|
}
|
|
62
72
|
throw new Error("Could not parse array of type " + nameof<T>() + "!");
|
|
@@ -1 +1,68 @@
|
|
|
1
|
-
|
|
1
|
+
import { JSONMode } from "../..";
|
|
2
|
+
import {
|
|
3
|
+
deserializeInteger as deserializeInteger_NAIVE,
|
|
4
|
+
deserializeIntegerField as deserializeIntegerField_NAIVE,
|
|
5
|
+
} from "../simple/integer";
|
|
6
|
+
import {
|
|
7
|
+
deserializeInteger_SWAR,
|
|
8
|
+
deserializeIntegerField_SWAR,
|
|
9
|
+
} from "../swar/integer";
|
|
10
|
+
import {
|
|
11
|
+
deserializeInteger_SIMD,
|
|
12
|
+
deserializeIntegerField_SIMD,
|
|
13
|
+
} from "../simd/integer";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Compile-time dispatch for {@link deserializeInteger_NAIVE},
|
|
17
|
+
* {@link deserializeInteger_SWAR}, and {@link deserializeInteger_SIMD}
|
|
18
|
+
* based on `JSON_MODE`.
|
|
19
|
+
*
|
|
20
|
+
* @param srcStart Pointer to the first UTF-16 code unit.
|
|
21
|
+
* @param srcEnd Pointer just past the last code unit.
|
|
22
|
+
* @returns The parsed value, truncated to `T`.
|
|
23
|
+
*/
|
|
24
|
+
// @ts-expect-error: @inline is a valid decorator
|
|
25
|
+
@inline export function deserializeInteger<T extends number>(
|
|
26
|
+
srcStart: usize,
|
|
27
|
+
srcEnd: usize,
|
|
28
|
+
): T {
|
|
29
|
+
if (JSON_MODE == JSONMode.SIMD) {
|
|
30
|
+
return deserializeInteger_SIMD<T>(srcStart, srcEnd);
|
|
31
|
+
} else if (JSON_MODE == JSONMode.NAIVE) {
|
|
32
|
+
return deserializeInteger_NAIVE<T>(srcStart, srcEnd);
|
|
33
|
+
} else {
|
|
34
|
+
return deserializeInteger_SWAR<T>(srcStart, srcEnd);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Compile-time dispatch for {@link deserializeIntegerField_NAIVE},
|
|
40
|
+
* {@link deserializeIntegerField_SWAR}, and
|
|
41
|
+
* {@link deserializeIntegerField_SIMD} based on `JSON_MODE`.
|
|
42
|
+
*
|
|
43
|
+
* @param srcStart Pointer to the first UTF-16 code unit.
|
|
44
|
+
* @param srcEnd Pointer just past the last code unit.
|
|
45
|
+
* @param dstObj Destination object pointer.
|
|
46
|
+
* @param dstOffset Byte offset of the field within `dstObj`.
|
|
47
|
+
* @returns The source position immediately after the last digit consumed.
|
|
48
|
+
*/
|
|
49
|
+
// @ts-expect-error: @inline is a valid decorator
|
|
50
|
+
@inline export function deserializeIntegerField<T extends number>(
|
|
51
|
+
srcStart: usize,
|
|
52
|
+
srcEnd: usize,
|
|
53
|
+
dstObj: usize,
|
|
54
|
+
dstOffset: usize = 0,
|
|
55
|
+
): usize {
|
|
56
|
+
if (JSON_MODE == JSONMode.SIMD) {
|
|
57
|
+
return deserializeIntegerField_SIMD<T>(srcStart, srcEnd, dstObj, dstOffset);
|
|
58
|
+
} else if (JSON_MODE == JSONMode.NAIVE) {
|
|
59
|
+
return deserializeIntegerField_NAIVE<T>(
|
|
60
|
+
srcStart,
|
|
61
|
+
srcEnd,
|
|
62
|
+
dstObj,
|
|
63
|
+
dstOffset,
|
|
64
|
+
);
|
|
65
|
+
} else {
|
|
66
|
+
return deserializeIntegerField_SWAR<T>(srcStart, srcEnd, dstObj, dstOffset);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -4,7 +4,10 @@ import { deserializeString_SIMD } from "../simd/string";
|
|
|
4
4
|
import { deserializeString_SWAR } from "../swar/string";
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
@inline export function deserializeString(
|
|
7
|
+
@inline export function deserializeString(
|
|
8
|
+
srcStart: usize,
|
|
9
|
+
srcEnd: usize,
|
|
10
|
+
): string {
|
|
8
11
|
if (JSON_MODE == JSONMode.SIMD) {
|
|
9
12
|
return deserializeString_SIMD(srcStart, srcEnd);
|
|
10
13
|
} else if (JSON_MODE == JSONMode.NAIVE) {
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { bytes } from "../../util";
|
|
2
|
-
export {
|
|
3
|
-
|
|
2
|
+
export {
|
|
3
|
+
deserializeArrayBuffer,
|
|
4
|
+
deserializeTypedArray,
|
|
5
|
+
} from "../simple/typedarray";
|
|
6
|
+
import {
|
|
7
|
+
deserializeArrayBuffer,
|
|
8
|
+
deserializeTypedArray,
|
|
9
|
+
} from "../simple/typedarray";
|
|
4
10
|
|
|
5
11
|
|
|
6
12
|
@inline export function parseArrayBuffer(data: string): ArrayBuffer {
|
|
@@ -10,6 +16,10 @@ import { deserializeArrayBuffer, deserializeTypedArray } from "../simple/typedar
|
|
|
10
16
|
}
|
|
11
17
|
|
|
12
18
|
|
|
13
|
-
@inline export function __deserializeArrayBuffer(
|
|
19
|
+
@inline export function __deserializeArrayBuffer(
|
|
20
|
+
srcStart: usize,
|
|
21
|
+
srcEnd: usize,
|
|
22
|
+
dst: usize = 0,
|
|
23
|
+
): ArrayBuffer {
|
|
14
24
|
return deserializeArrayBuffer(srcStart, srcEnd, dst);
|
|
15
25
|
}
|
|
@@ -1 +1,78 @@
|
|
|
1
|
-
|
|
1
|
+
import { JSONMode } from "../..";
|
|
2
|
+
import {
|
|
3
|
+
deserializeUnsigned as deserializeUnsigned_NAIVE,
|
|
4
|
+
deserializeUnsignedField as deserializeUnsignedField_NAIVE,
|
|
5
|
+
} from "../simple/unsigned";
|
|
6
|
+
import {
|
|
7
|
+
deserializeUnsigned_SWAR,
|
|
8
|
+
deserializeUnsignedField_SWAR,
|
|
9
|
+
} from "../swar/integer";
|
|
10
|
+
import {
|
|
11
|
+
deserializeUnsigned_SIMD,
|
|
12
|
+
deserializeUnsignedField_SIMD,
|
|
13
|
+
} from "../simd/integer";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Compile-time dispatch for {@link deserializeUnsigned_NAIVE},
|
|
17
|
+
* {@link deserializeUnsigned_SWAR}, and {@link deserializeUnsigned_SIMD}
|
|
18
|
+
* based on `JSON_MODE`.
|
|
19
|
+
*
|
|
20
|
+
* @param srcStart Pointer to the first UTF-16 code unit.
|
|
21
|
+
* @param srcEnd Pointer just past the last code unit.
|
|
22
|
+
* @returns The parsed value, truncated to `T`.
|
|
23
|
+
*/
|
|
24
|
+
// @ts-expect-error: @inline is a valid decorator
|
|
25
|
+
@inline export function deserializeUnsigned<T extends number>(
|
|
26
|
+
srcStart: usize,
|
|
27
|
+
srcEnd: usize,
|
|
28
|
+
): T {
|
|
29
|
+
if (JSON_MODE == JSONMode.SIMD) {
|
|
30
|
+
return deserializeUnsigned_SIMD<T>(srcStart, srcEnd);
|
|
31
|
+
} else if (JSON_MODE == JSONMode.NAIVE) {
|
|
32
|
+
return deserializeUnsigned_NAIVE<T>(srcStart, srcEnd);
|
|
33
|
+
} else {
|
|
34
|
+
return deserializeUnsigned_SWAR<T>(srcStart, srcEnd);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Compile-time dispatch for {@link deserializeUnsignedField_NAIVE},
|
|
40
|
+
* {@link deserializeUnsignedField_SWAR}, and
|
|
41
|
+
* {@link deserializeUnsignedField_SIMD} based on `JSON_MODE`.
|
|
42
|
+
*
|
|
43
|
+
* @param srcStart Pointer to the first UTF-16 code unit.
|
|
44
|
+
* @param srcEnd Pointer just past the last code unit.
|
|
45
|
+
* @param dstObj Destination object pointer.
|
|
46
|
+
* @param dstOffset Byte offset of the field within `dstObj`.
|
|
47
|
+
* @returns The source position immediately after the last digit consumed.
|
|
48
|
+
*/
|
|
49
|
+
// @ts-expect-error: @inline is a valid decorator
|
|
50
|
+
@inline export function deserializeUnsignedField<T extends number>(
|
|
51
|
+
srcStart: usize,
|
|
52
|
+
srcEnd: usize,
|
|
53
|
+
dstObj: usize,
|
|
54
|
+
dstOffset: usize = 0,
|
|
55
|
+
): usize {
|
|
56
|
+
if (JSON_MODE == JSONMode.SIMD) {
|
|
57
|
+
return deserializeUnsignedField_SIMD<T>(
|
|
58
|
+
srcStart,
|
|
59
|
+
srcEnd,
|
|
60
|
+
dstObj,
|
|
61
|
+
dstOffset,
|
|
62
|
+
);
|
|
63
|
+
} else if (JSON_MODE == JSONMode.NAIVE) {
|
|
64
|
+
return deserializeUnsignedField_NAIVE<T>(
|
|
65
|
+
srcStart,
|
|
66
|
+
srcEnd,
|
|
67
|
+
dstObj,
|
|
68
|
+
dstOffset,
|
|
69
|
+
);
|
|
70
|
+
} else {
|
|
71
|
+
return deserializeUnsignedField_SWAR<T>(
|
|
72
|
+
srcStart,
|
|
73
|
+
srcEnd,
|
|
74
|
+
dstObj,
|
|
75
|
+
dstOffset,
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
}
|