import { BRACKET_LEFT, BRACKET_RIGHT, COMMA, FALSE_WORD_U64, TRUE_WORD_U64, } from "../../../custom/chars"; import { isSpace } from "../../../util"; import { ensureArrayElementSlot, ensureArrayField } from "./shared"; function deserializeBooleanArrayBody( srcStart: usize, srcEnd: usize, out: T, ): usize { let index = 0; do { if (srcStart >= srcEnd || load(srcStart) != BRACKET_LEFT) break; srcStart += 2; while (srcStart < srcEnd && isSpace(load(srcStart))) srcStart += 2; if (srcStart >= srcEnd) break; if (load(srcStart) == BRACKET_RIGHT) { out.length = 0; return srcStart + 2; } while (srcStart < srcEnd) { const slot = ensureArrayElementSlot(out, index); const block = load(srcStart); if (block == TRUE_WORD_U64) { store>(slot, true); srcStart += 8; } else if (block == FALSE_WORD_U64) { store>(slot, false); srcStart += 10; } else { break; } while (srcStart < srcEnd && isSpace(load(srcStart))) srcStart += 2; if (srcStart >= srcEnd) break; const code = load(srcStart); if (code == COMMA) { srcStart += 2; while (srcStart < srcEnd && isSpace(load(srcStart))) srcStart += 2; index++; continue; } if (code == BRACKET_RIGHT) { const nextLen = index + 1; if (out.length != nextLen) out.length = nextLen; return srcStart + 2; } break; } } while (false); throw new Error("Failed to parse JSON!"); } export function deserializeBooleanArrayField( srcStart: usize, srcEnd: usize, fieldPtr: usize, ): usize { return deserializeBooleanArrayBody( srcStart, srcEnd, ensureArrayField(fieldPtr), ); }