You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
'use strict';
module.exports = class SymbolTreeNode { constructor() { this.parent = null; this.previousSibling = null; this.nextSibling = null;
this.firstChild = null; this.lastChild = null;
/** This value is incremented anytime a children is added or removed */ this.childrenVersion = 0; /** The last child object which has a cached index */ this.childIndexCachedUpTo = null;
/** This value represents the cached node index, as long as * cachedIndexVersion matches with the childrenVersion of the parent */ this.cachedIndex = -1; this.cachedIndexVersion = NaN; // NaN is never equal to anything
}
get isAttached() { return Boolean(this.parent || this.previousSibling || this.nextSibling); }
get hasChildren() { return Boolean(this.firstChild); }
childrenChanged() { /* jshint -W016 */ // integer wrap around
this.childrenVersion = (this.childrenVersion + 1) & 0xFFFFFFFF; this.childIndexCachedUpTo = null; }
getCachedIndex(parentNode) { // (assumes parentNode is actually the parent)
if (this.cachedIndexVersion !== parentNode.childrenVersion) { this.cachedIndexVersion = NaN; // cachedIndex is no longer valid
return -1; }
return this.cachedIndex; // -1 if not cached
}
setCachedIndex(parentNode, index) { // (assumes parentNode is actually the parent)
this.cachedIndexVersion = parentNode.childrenVersion; this.cachedIndex = index; } };
|