From 41bea2f4a5462886ead136e0ea8cc88a908cbed7 Mon Sep 17 00:00:00 2001 From: Daniel Fichtinger Date: Tue, 5 Nov 2024 00:11:39 -0500 Subject: [PATCH] Added node type --- internal/tree/node.go | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 internal/tree/node.go diff --git a/internal/tree/node.go b/internal/tree/node.go new file mode 100644 index 0000000..367f845 --- /dev/null +++ b/internal/tree/node.go @@ -0,0 +1,39 @@ +package tree + +// Node is a struct containing nodes of a file tree. +type Node struct { + // can be nil + Parent *Node + Name string + FileType string + // cannot be nil; may have len 0 + Children []*Node +} + +// NewNode constructs and returns a Node instance. +// parent and children are optional and can be nil, +// in which case Parent will be stored as nil, +// but Children will be initialized as []*Node of len 0. +func NewNode(name string, ft string, parent *Node, children []*Node) *Node { + var c []*Node + if children == nil { + c = make([]*Node, 0) + } else { + c = children + } + n := &Node{ + Name: name, + FileType: ft, + Parent: parent, + Children: c, + } + return n +} + +func (n *Node) IsRoot() bool { + return n.Parent == nil +} + +func (n *Node) IsTail() bool { + return len(n.Children) == 0 +}