public DebugExecutionAlternative(ExecutionPathQueueBuilder executionPathQueue) { ExecutionPaths = new List <ExecutionPath>(); while (true) { var returnPathCount = executionPathQueue.ReturnPathCount; for (var i = 0; i < returnPathCount; i++) { ExecutionPaths.Add(executionPathQueue.ReturnPaths[i]); } ExecutionPaths.Add(executionPathQueue.ExecutionPath); if (executionPathQueue.NextBuilder != null && executionPathQueue.NextBuilder.ExecutionPathBuilderCount == 1) { executionPathQueue = executionPathQueue.NextBuilder.ExecutionPathBuilders[0]; } else { break; } } DebugNodes = string.Join("\n ", ExecutionPaths.SelectMany(p => p.Nodes).Select(n => n.ToString())); }
public ExecutionPathGroupBuilder(Automata <TInstruction, TOperand> automata, IPool <ExecutionPathGroupBuilder> pool) : base(pool) { _automata = automata; for (var i = 0; i < ExecutionPathBuilders.Length; i++) { ExecutionPathBuilders[i] = new ExecutionPathQueueBuilder(this); } }
private void AddExecutionPath(ExecutionPath executionPath, int returnPathIndex) { if (executionPath.Safe == false) { executionPath.MakeSafe(); } if (ExecutionPathBuilderCount == ExecutionPathBuilders.Length) { Array.Resize(ref ExecutionPathBuilders, ExecutionPathBuilders.Length * 2); for (var i = ExecutionPathBuilderCount; i < ExecutionPathBuilders.Length; i++) { ExecutionPathBuilders[i] = new ExecutionPathQueueBuilder(this); } } var builder = ExecutionPathBuilders[ExecutionPathBuilderCount++]; builder.ExecutionPath = executionPath; builder.ReturnPathCount = returnPathIndex; builder.NextBuilder = null; }