| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 | 'use strict';const TREE = Symbol();const ROOT = Symbol();const NEXT = Symbol();const ITERATE_FUNC = Symbol();class TreeIterator {        constructor(tree, root, firstResult, iterateFunction) {                this[TREE] = tree;                this[ROOT] = root;                this[NEXT] = firstResult;                this[ITERATE_FUNC] = iterateFunction;        }        next() {                const tree = this[TREE];                const iterateFunc = this[ITERATE_FUNC];                const root = this[ROOT];                if (!this[NEXT]) {                        return {                                done: true,                                value: root,                        };                }                const value = this[NEXT];                if (iterateFunc === 1) {                        this[NEXT] = tree._node(value).previousSibling;                }                else if (iterateFunc === 2) {                        this[NEXT] = tree._node(value).nextSibling;                }                else if (iterateFunc === 3) {                        this[NEXT] = tree._node(value).parent;                }                else if (iterateFunc === 4) {                        this[NEXT] = tree.preceding(value, {root: root});                }                else /* if (iterateFunc === 5)*/ {                        this[NEXT] = tree.following(value, {root: root});                }                return {                        done: false,                        value: value,                };        }}Object.defineProperty(TreeIterator.prototype, Symbol.iterator, {        value: function() {                return this;        },        writable: false,});TreeIterator.PREV = 1;TreeIterator.NEXT = 2;TreeIterator.PARENT = 3;TreeIterator.PRECEDING = 4;TreeIterator.FOLLOWING = 5;Object.freeze(TreeIterator);Object.freeze(TreeIterator.prototype);module.exports = TreeIterator;
 |