提交 80c67a32 编写于 作者: J Johannes Rieken

es6 - add real iterator to LinkedList

上级 f8fec001
......@@ -3,7 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { Iterator, IteratorResult, FIN } from 'vs/base/common/iterator';
import * as iterator from 'vs/base/common/iterator';
class Node<E> {
......@@ -126,13 +126,13 @@ export class LinkedList<E> {
this._size -= 1;
}
iterator(): Iterator<E> {
iterator(): iterator.Iterator<E> {
let element: { done: false; value: E; };
let node = this._first;
return {
next(): IteratorResult<E> {
next(): iterator.IteratorResult<E> {
if (node === Node.Undefined) {
return FIN;
return iterator.FIN;
}
if (!element) {
......@@ -146,6 +146,14 @@ export class LinkedList<E> {
};
}
*[Symbol.iterator](): Iterator<E> {
let node = this._first;
while (node !== Node.Undefined) {
yield node.element;
node = node.next;
}
}
toArray(): E[] {
const result: E[] = [];
for (let node = this._first; node !== Node.Undefined; node = node.next) {
......
......@@ -16,6 +16,15 @@ suite('LinkedList', function () {
// assert toArray
assert.deepEqual(list.toArray(), elements);
// assert Symbol.iterator (1)
assert.deepEqual([...list], elements);
// assert Symbol.iterator (2)
let i = 0;
for (const item of list) {
assert.equal(item, elements[i++]);
}
// assert iterator
for (let iter = list.iterator(), element = iter.next(); !element.done; element = iter.next()) {
assert.equal(elements.shift(), element.value);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册