From 9072bbe389305cc0b76c2b16a14cf5f4648653e6 Mon Sep 17 00:00:00 2001 From: "D. Berge" Date: Mon, 18 Aug 2025 13:48:49 +0200 Subject: [PATCH] Add iterators --- lib/modules/@dougal/binary/classes.js | 61 +++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/lib/modules/@dougal/binary/classes.js b/lib/modules/@dougal/binary/classes.js index 8275452..fe99a6b 100644 --- a/lib/modules/@dougal/binary/classes.js +++ b/lib/modules/@dougal/binary/classes.js @@ -503,6 +503,37 @@ class DougalBinaryBundle extends ArrayBuffer { return ab; } + get records () { + const data = []; + for (const record of this) { + data.push(record.slice(1)); + } + return data; + } + + [Symbol.iterator]() { + const chunks = this.chunks(); + let chunkIndex = 0; + let chunkIterator = chunks.length > 0 ? chunks[0][Symbol.iterator]() : null; + + return { + next() { + if (!chunkIterator) { + return { done: true }; + } + + let result = chunkIterator.next(); + while (result.done && chunkIndex < chunks.length - 1) { + chunkIndex++; + chunkIterator = chunks[chunkIndex][Symbol.iterator](); + result = chunkIterator.next(); + } + + return result; + } + }; + } + } @@ -707,6 +738,21 @@ class DougalBinaryChunkSequential extends ArrayBuffer { return arr; } + + [Symbol.iterator]() { + let index = 0; + const chunk = this; + return { + next() { + if (index < chunk.jCount) { + return { value: chunk.getRecord(index++), done: false }; + } else { + return { done: true }; + } + } + }; + } + } @@ -901,6 +947,21 @@ class DougalBinaryChunkInterleaved extends ArrayBuffer { return arr; } + + [Symbol.iterator]() { + let index = 0; + const chunk = this; + return { + next() { + if (index < chunk.jCount) { + return { value: chunk.getRecord(index++), done: false }; + } else { + return { done: true }; + } + } + }; + } + }