From 11fb10faa9b24c34e79702d29fb69560fc8f92cd Mon Sep 17 00:00:00 2001 From: n8allan <3095770+n8allan@users.noreply.github.com> Date: Mon, 4 Mar 2024 22:22:39 -0700 Subject: [PATCH] Refactor BTree range method to improve readability and performance --- src/b-tree.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/b-tree.ts b/src/b-tree.ts index 4f6311f..6315ffb 100644 --- a/src/b-tree.ts +++ b/src/b-tree.ts @@ -58,22 +58,23 @@ export class BTree { /** Iterates based on the given range * WARNING: mutation during iteration will result in an exception */ - *range(range: KeyRange): Generator, void, void> { + *range(range: KeyRange): IterableIterator> { const startPath = range.first ? this.findFirst(range) : (range.isAscending ? this.first() : this.last()); const endPath = range.last ? this.findLast(range) : (range.isAscending ? this.last() : this.first()); + const endKey = this.keyFromEntry(endPath.leafNode.entries[endPath.leafIndex]); const iterable = range.isAscending ? this.internalAscending(startPath) : this.internalDescending(startPath); - const iter = iterable[Symbol.iterator](); - for (let path of iter) { + const ascendingFactor = range.isAscending ? 1 : -1; + for (let path of iterable) { if (!path.on || !endPath.on || this.compareKeys( - this.keyFromEntry(path.leafNode.entries[path.leafIndex]), - this.keyFromEntry(endPath.leafNode.entries[endPath.leafIndex]) - ) * (range.isAscending ? 1 : -1) > 0) { + this.keyFromEntry(path.leafNode.entries[path.leafIndex]), + endKey + ) * ascendingFactor > 0) { break; } yield path;