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

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()
}