Skip to content

Commit

Permalink
perf: ⚡️ avoid calling recursive copy constructors many times
Browse files Browse the repository at this point in the history
  • Loading branch information
Xanonymous-GitHub committed Aug 17, 2024
1 parent 9b10a0a commit d1ec00d
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 7 deletions.
2 changes: 1 addition & 1 deletion core/src/main/kotlin/tw/xcc/gumtree/model/BasicTree.kt
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ abstract class BasicTree<T> : Serializable, Tree, Traversable<T> where T : Basic
synchronized(this) {
val newChildrenList = mutableListOf<T>()
newChildrenList.addAll(children)
newChildrenList.forEach { it.setParentTo(self) }
newChildrenList.forEach { it.parent.set(self) }
this.set(newChildrenList)
}
}
Expand Down
8 changes: 4 additions & 4 deletions core/src/main/kotlin/tw/xcc/gumtree/model/GumTree.kt
Original file line number Diff line number Diff line change
Expand Up @@ -73,10 +73,10 @@ open class GumTree(

open fun toNewFrozen(): GumTreeView =
synchronized(this) {
val children = childrenList.get()
children.replaceAll { it.toNewFrozen() }
childrenList.set(children)
return GumTreeView.from(this)
val frozen = GumTreeView.from(this)
val children = getChildren()
frozen.setChildrenToImpl(children.map { it.toNewFrozen() })
return frozen
}

infix fun hasSameTypeAs(other: GumTree): Boolean = info.type == other.info.type
Expand Down
8 changes: 6 additions & 2 deletions core/src/main/kotlin/tw/xcc/gumtree/model/GumTreeView.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package tw.xcc.gumtree.model

class GumTreeView private constructor(target: GumTree) : GumTree(target) {
class GumTreeView private constructor(target: GumTree) : GumTree(target.info.copy()) {
init {
super.idRef.set(target.id)
}

private val frozenPreOrdered by lazy { super.preOrdered() }
private val frozenPostOrdered by lazy { super.postOrdered() }
private val frozenDescendents by lazy { frozenPreOrdered.drop(1) }
Expand Down Expand Up @@ -64,6 +68,6 @@ class GumTreeView private constructor(target: GumTree) : GumTree(target) {
companion object {
fun from(gumTree: GumTree): GumTreeView = GumTreeView(gumTree)

fun frozeEntireTreeFrom(gumTree: GumTree): GumTreeView = GumTree(gumTree).toNewFrozen()
fun frozeEntireTreeFrom(gumTree: GumTree): GumTreeView = gumTree.toNewFrozen()
}
}

0 comments on commit d1ec00d

Please sign in to comment.