18 KiB
symbol-tree
Author: Joris van der Wel joris@jorisvanderwel.com
- symbol-tree
- SymbolTree ⏏
- new SymbolTree([description])
- .initialize(object) ⇒
Object - .hasChildren(object) ⇒
Boolean - .firstChild(object) ⇒
Object - .lastChild(object) ⇒
Object - .previousSibling(object) ⇒
Object - .nextSibling(object) ⇒
Object - .parent(object) ⇒
Object - .lastInclusiveDescendant(object) ⇒
Object - .preceding(object, [options]) ⇒
Object - .following(object, [options]) ⇒
Object - .childrenToArray(parent, [options]) ⇒
Array.<Object> - .ancestorsToArray(object, [options]) ⇒
Array.<Object> - .treeToArray(root, [options]) ⇒
Array.<Object> - .childrenIterator(parent, [options]) ⇒
Object - .previousSiblingsIterator(object) ⇒
Object - .nextSiblingsIterator(object) ⇒
Object - .ancestorsIterator(object) ⇒
Object - .treeIterator(root, options) ⇒
Object - .index(child) ⇒
Number - .childrenCount(parent) ⇒
Number - .compareTreePosition(left, right) ⇒
Number - .remove(removeObject) ⇒
Object - .insertBefore(referenceObject, newObject) ⇒
Object - .insertAfter(referenceObject, newObject) ⇒
Object - .prependChild(referenceObject, newObject) ⇒
Object - .appendChild(referenceObject, newObject) ⇒
Object
- SymbolTree ⏏
SymbolTree ⏏
new SymbolTree([description])
| Param | Default | Description |
|---|---|---|
| [description] | 'SymbolTree data' |
Description used for the Symbol |
symbolTree.initialize(object) ⇒ Object
You can optionally initialize an object after its creation, to take advantage of V8's fast properties. Also useful if you would like to freeze your object.
O(1)
Kind: instance method of SymbolTree
Returns: Object - object
| Param | Type |
|---|---|
| object | Object |
symbolTree.hasChildren(object) ⇒ Boolean
Returns true if the object has any children. Otherwise it returns false.
O(1)
Kind: instance method of SymbolTree
| Param | Type |
|---|---|
| object | Object |
symbolTree.firstChild(object) ⇒ Object
Return the first child of the given object.
O(1)
Kind: instance method of SymbolTree
| Param | Type |
|---|---|
| object | Object |
symbolTree.lastChild(object) ⇒ Object
Return the last child of the given object.
O(1)
Kind: instance method of SymbolTree
| Param | Type |
|---|---|
| object | Object |
symbolTree.previousSibling(object) ⇒ Object
Return the previous sibling of the given object.
O(1)
Kind: instance method of SymbolTree
| Param | Type |
|---|---|
| object | Object |
symbolTree.nextSibling(object) ⇒ Object
Return the nextSibling sibling of the given object.
O(1)
Kind: instance method of SymbolTree
| Param | Type |
|---|---|
| object | Object |
symbolTree.parent(object) ⇒ Object
Return the parent of the given object.
O(1)
Kind: instance method of SymbolTree
| Param | Type |
|---|---|
| object | Object |
symbolTree.lastInclusiveDescendant(object) ⇒ Object
Find the inclusive descendant that is last in tree order of the given object.
O(n) (worst case) where n is the depth of the subtree of object
Kind: instance method of SymbolTree
| Param | Type |
|---|---|
| object | Object |
symbolTree.preceding(object, [options]) ⇒ Object
Find the preceding object (A) of the given object (B). An object A is preceding an object B if A and B are in the same tree and A comes before B in tree order.
O(n) (worst case)
O(1) (amortized when walking the entire tree)
Kind: instance method of SymbolTree
| Param | Type | Description |
|---|---|---|
| object | Object |
|
| [options] | Object |
|
| [options.root] | Object |
If set, root must be an inclusive ancestor of the return value (or else null is returned). This check assumes that root is also an inclusive ancestor of the given node |
symbolTree.following(object, [options]) ⇒ Object
Find the following object (A) of the given object (B). An object A is following an object B if A and B are in the same tree and A comes after B in tree order.
O(n) (worst case) where n is the amount of objects in the entire tree
O(1) (amortized when walking the entire tree)
Kind: instance method of SymbolTree
| Param | Type | Default | Description |
|---|---|---|---|
| object | Object |
||
| [options] | Object |
||
| [options.root] | Object |
If set, root must be an inclusive ancestor of the return value (or else null is returned). This check assumes that root is also an inclusive ancestor of the given node |
|
| [options.skipChildren] | Boolean |
false |
If set, ignore the children of object |
symbolTree.childrenToArray(parent, [options]) ⇒ Array.<Object>
Append all children of the given object to an array.
O(n) where n is the amount of children of the given parent
Kind: instance method of SymbolTree
| Param | Type | Default | Description |
|---|---|---|---|
| parent | Object |
||
| [options] | Object |
||
| [options.array] | Array.<Object> |
[] |
|
| [options.filter] | function |
Function to test each object before it is added to the array. Invoked with arguments (object). Should return true if an object is to be included. |
|
| [options.thisArg] | * |
Value to use as this when executing filter. |
symbolTree.ancestorsToArray(object, [options]) ⇒ Array.<Object>
Append all inclusive ancestors of the given object to an array.
O(n) where n is the amount of ancestors of the given object
Kind: instance method of SymbolTree
| Param | Type | Default | Description |
|---|---|---|---|
| object | Object |
||
| [options] | Object |
||
| [options.array] | Array.<Object> |
[] |
|
| [options.filter] | function |
Function to test each object before it is added to the array. Invoked with arguments (object). Should return true if an object is to be included. |
|
| [options.thisArg] | * |
Value to use as this when executing filter. |
symbolTree.treeToArray(root, [options]) ⇒ Array.<Object>
Append all descendants of the given object to an array (in tree order).
O(n) where n is the amount of objects in the sub-tree of the given object
Kind: instance method of SymbolTree
| Param | Type | Default | Description |
|---|---|---|---|
| root | Object |
||
| [options] | Object |
||
| [options.array] | Array.<Object> |
[] |
|
| [options.filter] | function |
Function to test each object before it is added to the array. Invoked with arguments (object). Should return true if an object is to be included. |
|
| [options.thisArg] | * |
Value to use as this when executing filter. |
symbolTree.childrenIterator(parent, [options]) ⇒ Object
Iterate over all children of the given object
O(1) for a single iteration
Kind: instance method of SymbolTree
Returns: Object - An iterable iterator (ES6)
| Param | Type | Default |
|---|---|---|
| parent | Object |
|
| [options] | Object |
|
| [options.reverse] | Boolean |
false |
symbolTree.previousSiblingsIterator(object) ⇒ Object
Iterate over all the previous siblings of the given object. (in reverse tree order)
O(1) for a single iteration
Kind: instance method of SymbolTree
Returns: Object - An iterable iterator (ES6)
| Param | Type |
|---|---|
| object | Object |
symbolTree.nextSiblingsIterator(object) ⇒ Object
Iterate over all the next siblings of the given object. (in tree order)
O(1) for a single iteration
Kind: instance method of SymbolTree
Returns: Object - An iterable iterator (ES6)
| Param | Type |
|---|---|
| object | Object |
symbolTree.ancestorsIterator(object) ⇒ Object
Iterate over all inclusive ancestors of the given object
O(1) for a single iteration
Kind: instance method of SymbolTree
Returns: Object - An iterable iterator (ES6)
| Param | Type |
|---|---|
| object | Object |
symbolTree.treeIterator(root, options) ⇒ Object
Iterate over all descendants of the given object (in tree order).
where n is the amount of objects in the sub-tree of the given root:
O(n) (worst case for a single iterator)
O(n) (amortized, when completing the iterator)
Kind: instance method of SymbolTree
Returns: Object - An iterable iterator (ES6)
| Param | Type | Default |
|---|---|---|
| root | Object |
|
| options | Object |
|
| [options.reverse] | Boolean |
false |
symbolTree.index(child) ⇒ Number
Find the index of the given object (the number of preceding siblings).
O(n) where n is the amount of preceding siblings
O(1) (amortized, if the tree is not modified)
Kind: instance method of SymbolTree
Returns: Number - The number of preceding siblings, or -1 if the object has no parent
| Param | Type |
|---|---|
| child | Object |
symbolTree.childrenCount(parent) ⇒ Number
Calculate the number of children.
O(n) where n is the amount of children
O(1) (amortized, if the tree is not modified)
Kind: instance method of SymbolTree
| Param | Type |
|---|---|
| parent | Object |
symbolTree.compareTreePosition(left, right) ⇒ Number
Compare the position of an object relative to another object. A bit set is returned:
- DISCONNECTED : 1
- PRECEDING : 2
- FOLLOWING : 4
- CONTAINS : 8
- CONTAINED_BY : 16
The semantics are the same as compareDocumentPosition in DOM, with the exception that DISCONNECTED never occurs with any other bit.
where n and m are the amount of ancestors of left and right;
where o is the amount of children of the lowest common ancestor of left and right:
O(n + m + o) (worst case)
`O(n + m) (amortized, if the tree is not modified)
Kind: instance method of SymbolTree
| Param | Type |
|---|---|
| left | Object |
| right | Object |
symbolTree.remove(removeObject) ⇒ Object
Remove the object from this tree. Has no effect if already removed.
O(1)
Kind: instance method of SymbolTree
Returns: Object - removeObject
| Param | Type |
|---|---|
| removeObject | Object |
symbolTree.insertBefore(referenceObject, newObject) ⇒ Object
Insert the given object before the reference object.
newObject is now the previous sibling of referenceObject.
O(1)
Kind: instance method of SymbolTree
Returns: Object - newObject
Throws:
ErrorIf the newObject is already present in this SymbolTree
| Param | Type |
|---|---|
| referenceObject | Object |
| newObject | Object |
symbolTree.insertAfter(referenceObject, newObject) ⇒ Object
Insert the given object after the reference object.
newObject is now the next sibling of referenceObject.
O(1)
Kind: instance method of SymbolTree
Returns: Object - newObject
Throws:
ErrorIf the newObject is already present in this SymbolTree
| Param | Type |
|---|---|
| referenceObject | Object |
| newObject | Object |
symbolTree.prependChild(referenceObject, newObject) ⇒ Object
Insert the given object as the first child of the given reference object.
newObject is now the first child of referenceObject.
O(1)
Kind: instance method of SymbolTree
Returns: Object - newObject
Throws:
ErrorIf the newObject is already present in this SymbolTree
| Param | Type |
|---|---|
| referenceObject | Object |
| newObject | Object |
symbolTree.appendChild(referenceObject, newObject) ⇒ Object
Insert the given object as the last child of the given reference object.
newObject is now the last child of referenceObject.
O(1)
Kind: instance method of SymbolTree
Returns: Object - newObject
Throws:
ErrorIf the newObject is already present in this SymbolTree
| Param | Type |
|---|---|
| referenceObject | Object |
| newObject | Object |