public ModuleInterpreter Clone() { var interpreter = new ModuleInterpreter(_scene, _modules, _parent, Report) { InputState = InputState.Clone(), OutputState = OutputState.Clone(), Position = Position, Running = Running, UsedCharacters = new HashSet <Character>(UsedCharacters), UsedPoses = new HashSet <Pose>(UsedPoses), UsedVariables = new HashSet <Variable>(UsedVariables) }; return(interpreter); }
public static async Task <Module> FromScene(Scene analysisTarget, ConcurrentDictionary <Scene, Module> modules, ProjectReport report) { Module module = new Module(); module.States = new ReadOnlyDictionary <ModuleState, HashSet <ModuleState> >(module._states); var startInterpreter = new ModuleInterpreter(analysisTarget, modules, module, report); module.AddInterpreter(startInterpreter); await Task.WhenAll(module._interpreterTasks); module.ReduceStates(); return(module); }
public void AddInterpreter(ModuleInterpreter interpreter) { _interpreters.Add(interpreter); _interpreterTasks.Add(Task.Run(async() => await interpreter.Interpret())); }