1// SPDX-FileCopyrightText: 2026 Romain Maneschi <romain@gitroot.dev>
2//
3// SPDX-License-Identifier: MIT
4
5import { JSON } from "json-as";
6import { _iteratorNext } from "./imports";
7import { IteratorItem } from "./model";
8
9export class Iterator<T> {
10 constructor(private name: string) {}
11
12 next(): T | null {
13 const ptrSize = _iteratorNext(this.name);
14 const ptrRes = u32(ptrSize >> 32);
15 const sizeRes = u32(ptrSize);
16 const res = String.UTF8.decodeUnsafe(ptrRes, sizeRes);
17 const item = JSON.parse<IteratorItem>(res);
18 if (!item.exist) {
19 return null;
20 }
21 return JSON.parse<T>(item.item);
22 }
23}