Exemple #1
0
                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;
                }