using InnovEnergy.Lib.Utils; namespace InnovEnergy.Lib.SrcGen.Trees; public readonly struct TreeStruct where T : notnull { [Obsolete] public TreeStruct() => throw new Exception("Forbidden"); public TreeStruct(T node, Func> getChildren) { Node = node; _GetChildren = getChildren; } public IEnumerable> Children { get { var getChildren = _GetChildren; return _GetChildren(Node).Select(c => new TreeStruct(c, getChildren)); } } public T Node { get; } private readonly Func> _GetChildren; public IEnumerable TraverseDepthFirstPostOrder() => TreeTraversal.TraverseDepthFirstPostOrder(Node, _GetChildren); public IEnumerable TraverseDepthFirstPreOrder() => TreeTraversal.TraverseDepthFirstPreOrder(Node, _GetChildren); public IEnumerable TraverseBreadthFirst() => TreeTraversal.TraverseBreadthFirst(Node, _GetChildren); }