diff options
author | Joel Kronqvist <work.joelkronqvist@pm.me> | 2022-03-11 20:46:06 +0200 |
---|---|---|
committer | Joel Kronqvist <work.joelkronqvist@pm.me> | 2022-03-11 20:46:06 +0200 |
commit | 080c5819d87b933816d724a83f3bf4f1686770a7 (patch) | |
tree | 4a2ccc68b27edf7d4cbc586c932cc7542b655e19 /node_modules/symbol-tree/lib/TreeIterator.js | |
parent | 5ac7049a9d30733165cc212dee308163c2a14644 (diff) | |
parent | d003b82235a9329f912522a2f70aa950dfce4998 (diff) | |
download | LYLLRuoka-080c5819d87b933816d724a83f3bf4f1686770a7.tar.gz LYLLRuoka-080c5819d87b933816d724a83f3bf4f1686770a7.zip |
Merge branch 'master' of https://github.com/JoelHMikael/FoodJS
Updating remote changes
Diffstat (limited to 'node_modules/symbol-tree/lib/TreeIterator.js')
-rw-r--r-- | node_modules/symbol-tree/lib/TreeIterator.js | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/node_modules/symbol-tree/lib/TreeIterator.js b/node_modules/symbol-tree/lib/TreeIterator.js new file mode 100644 index 0000000..f9d6217 --- /dev/null +++ b/node_modules/symbol-tree/lib/TreeIterator.js @@ -0,0 +1,69 @@ +'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; |