You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
26 lines
825 B
Kotlin
26 lines
825 B
Kotlin
package me.eater.threedom.dom
|
|
|
|
interface INodeContainer : INodeQueryCapable {
|
|
fun addNode(newNode: INode<*>)
|
|
fun removeNode(refNode: INode<*>)
|
|
fun removeAll()
|
|
fun replaceNode(newNode: INode<*>, refNode: INode<*>): Boolean
|
|
fun hasChild(refNode: INode<*>): Boolean
|
|
fun sequence(): Sequence<INode<*>>
|
|
|
|
operator fun iterator(): Iterator<INode<*>>
|
|
fun recursiveIterator(): Iterator<INode<*>> = sequence<INode<*>> {
|
|
val iterators = mutableListOf<Iterator<INode<*>>>()
|
|
var current: Iterator<INode<*>>? = iterator()
|
|
while (current != null) {
|
|
|
|
for (node in current) {
|
|
yield(node)
|
|
iterators.add(node.iterator())
|
|
}
|
|
|
|
current = iterators.firstOrNull()?.apply { iterators.removeAt(0) }
|
|
}
|
|
}.iterator()
|
|
}
|