335
*/
336
private traverseInOrderInRange(startOffsetInclusive: number, endOffsetExclusive: number, visitor: (node: Node, offset: number) => boolean): void {
337
>
const stack: { node: Node; offset: number }[] = [{ node: this._root, offset: 0 }];
tokenStore.ts
338
>
339
>
while (stack.length > 0) {
340
>
const { node, offset } = stack.pop()!;
341
>
const nodeEnd = offset + node.length;
342
>
343
>
// Skip nodes that are completely before or after the range
344
>
if (nodeEnd <= startOffsetInclusive || offset >= endOffsetExclusive) {
345
continue;
346
}
348
>
if (visitor(node, offset)) {
349
return;
350
}
352
>
if (!isLeaf(node)) {
353
>
// Push children in reverse order to process them left-to-right when popping
354
>
let childOffset = offset + node.length;
355
>
for (let i = node.children.length - 1; i >= 0; i--) {
356
>
childOffset -= node.children[i].length;
357
>
stack.push({ node: node.children[i], offset: childOffset });
358
>
}
359
>
}
360
>
}
361
>
}
362
363
getTokenAt(offset: number): TokenUpdate | undefined {