This commit is contained in:
Johannes Rieken 2021-06-07 14:51:28 +02:00
parent 692ffc0225
commit 229f018be9
No known key found for this signature in database
GPG key ID: 96634B5AF12F8798
2 changed files with 23 additions and 16 deletions

View file

@ -498,20 +498,27 @@ export class TernarySearchTree<K, V> {
}
private *_entries(node: TernarySearchTreeNode<K, V> | undefined): IterableIterator<[K, V]> {
if (node) {
// left
yield* this._entries(node.left);
// node
if (node.value) {
// callback(node.value, this._iter.join(parts));
yield [node.key, node.value];
// DFS
if (!node) {
return;
}
const stack = [node];
while (stack.length > 0) {
const node = stack.pop();
if (node) {
if (node.value) {
yield [node.key, node.value];
}
if (node.left) {
stack.push(node.left);
}
if (node.mid) {
stack.push(node.mid);
}
if (node.right) {
stack.push(node.right);
}
}
// mid
yield* this._entries(node.mid);
// right
yield* this._entries(node.right);
}
}
}

View file

@ -762,6 +762,9 @@ suite('Map', () => {
iter = map.findSuperstr(URI.file('/'))!;
item = iter.next();
assert.strictEqual(item.value[1], 4);
assert.strictEqual(item.done, false);
item = iter.next();
assert.strictEqual(item.value[1], 2);
assert.strictEqual(item.done, false);
item = iter.next();
@ -771,9 +774,6 @@ suite('Map', () => {
assert.strictEqual(item.value[1], 3);
assert.strictEqual(item.done, false);
item = iter.next();
assert.strictEqual(item.value[1], 4);
assert.strictEqual(item.done, false);
item = iter.next();
assert.strictEqual(item.value, undefined);
assert.strictEqual(item.done, true);