Skip to content
Snippets Groups Projects
Select Git revision
  • d04addf240e03fa59c9dab0b1bc1bef73fb76d8f
  • master default protected
  • 1.31
  • 4.24.2
  • 4.24.1
  • 4.24.0
  • 4.23.6
  • 4.23.5
  • 4.23.4
  • 4.23.3
  • 4.23.2
  • 4.23.1
  • 4.23.0
  • 4.22.3
  • 4.22.2
  • 4.22.1
  • 4.22.0
  • 4.21.0
  • 4.20.1
  • 4.20.0
  • 4.19.0
  • 4.18.0
  • 4.17.0
23 results

api-button.mjs

Blame
  • 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 {