Sha256: 16cbb4dcfc0021bc5d2dda0b038c32ea71dcd036650d6ec7ec551a370251e4df

Contents?: true

Size: 1.93 KB

Versions: 50

Compression:

Stored size: 1.93 KB

Contents

'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;

Version data entries

50 entries across 50 versions & 5 rubygems

Version Path
clapton-0.0.26 lib/clapton/javascripts/node_modules/symbol-tree/lib/TreeIterator.js
clapton-0.0.25 lib/clapton/javascripts/node_modules/symbol-tree/lib/TreeIterator.js
clapton-0.0.24 lib/clapton/javascripts/node_modules/symbol-tree/lib/TreeIterator.js
clapton-0.0.23 lib/clapton/javascripts/node_modules/symbol-tree/lib/TreeIterator.js
clapton-0.0.22 lib/clapton/javascripts/node_modules/symbol-tree/lib/TreeIterator.js
clapton-0.0.21 lib/clapton/javascripts/node_modules/symbol-tree/lib/TreeIterator.js
clapton-0.0.20 lib/clapton/javascripts/node_modules/symbol-tree/lib/TreeIterator.js
clapton-0.0.19 lib/clapton/javascripts/node_modules/symbol-tree/lib/TreeIterator.js
clapton-0.0.18 lib/clapton/javascripts/node_modules/symbol-tree/lib/TreeIterator.js
clapton-0.0.17 lib/clapton/javascripts/node_modules/symbol-tree/lib/TreeIterator.js
clapton-0.0.16 lib/clapton/javascripts/node_modules/symbol-tree/lib/TreeIterator.js
clapton-0.0.15 lib/clapton/javascripts/node_modules/symbol-tree/lib/TreeIterator.js
clapton-0.0.14 lib/clapton/javascripts/node_modules/symbol-tree/lib/TreeIterator.js
clapton-0.0.13 lib/clapton/javascripts/node_modules/symbol-tree/lib/TreeIterator.js
clapton-0.0.12 lib/clapton/javascripts/node_modules/symbol-tree/lib/TreeIterator.js
clapton-0.0.11 lib/clapton/javascripts/node_modules/symbol-tree/lib/TreeIterator.js
clapton-0.0.10 lib/clapton/javascripts/node_modules/symbol-tree/lib/TreeIterator.js
clapton-0.0.9 lib/clapton/javascripts/node_modules/symbol-tree/lib/TreeIterator.js
clapton-0.0.8 lib/clapton/javascripts/node_modules/symbol-tree/lib/TreeIterator.js
clapton-0.0.7 lib/clapton/javascripts/node_modules/symbol-tree/lib/TreeIterator.js