Something went wrong on our end
Select Git revision
global.html#Monster
-
Volker Schukai authoredVolker Schukai authored
tree.go 2.25 KiB
// Copyright 2023 schukai GmbH
// SPDX-License-Identifier: AGPL-3.0
package document
import "fmt"
type Tree[T any] struct {
Level int
Children []*Tree[T]
Parent *Tree[T]
Payload T
}
func newTree[T any]() *Tree[T] {
return &Tree[T]{}
}
func (t *Tree[T]) traverseAndInitLevel(level int) {
t.Level = level
for _, child := range t.Children {
child.traverseAndInitLevel(level + 1)
}
}
func (t *Tree[T]) addChild(child *Tree[T]) {
t.Children = append(t.Children, child)
child.Parent = t
t.getRoot().traverseAndInitLevel(0)
}
func (t *Tree[T]) addChildren(children []*Tree[T]) {
for _, child := range children {
t.addChild(child)
child.Parent = t
}
t.getRoot().traverseAndInitLevel(0)
}
func (t *Tree[T]) getChildren() []*Tree[T] {
return t.Children
}
func (t *Tree[T]) getLevel() int {
return t.Level
}
func (t *Tree[T]) getParent() *Tree[T] {
return t.Parent
}
func (t *Tree[T]) getRoot() *Tree[T] {
if t.Parent == nil {
return t
}
return t.Parent.getRoot()
}
func (t *Tree[T]) getPayload() T {
return t.Payload
}
func (t *Tree[T]) setPayload(payload T) {
t.Payload = payload
}
func (t *Tree[T]) getPayloadAsString() string {