using System.Runtime.CompilerServices; namespace Craftimizer.Solver; public sealed class ArenaNode(in T state, ArenaNode? parent = null) where T : struct { public T State = state; public ArenaBuffer Children; public NodeScoresBuffer ChildScores; public (int arrayIdx, int subIdx) ChildIdx; public readonly ArenaNode? Parent = parent; public NodeScoresBuffer? ParentScores => Parent?.ChildScores; public ArenaNode? ChildAt((int arrayIdx, int subIdx) at) => Children.Data?[at.arrayIdx]?[at.subIdx]; [MethodImpl(MethodImplOptions.AggressiveInlining)] public ArenaNode Add(in T state) { var node = new ArenaNode(in state, this); ChildScores.Add(); Children.Add(node); return node; } }