public static Block Parse(XmlNode node, DFG <Block> dfg, ParserInfo parserInfo) { string id = ParseTools.ParseID(node); string output = ParseTools.ParseString(node, OUTPUT_FLUID_FIELD_NAME); Validator.CheckVariableName(id, output); parserInfo.AddVariable(id, VariableType.FLUID, output); XmlNode innerNode = node.GetInnerBlockNode(INPUT_FLUID_FIELD_NAME, parserInfo, new MissingBlockException(id, "Fluid is missing fluid definition blocks.")); if (innerNode != null) { switch (innerNode.GetAttributeValue(Block.TYPE_FIELD_NAME)) { case HeaterUsage.XML_TYPE_NAME: return(HeaterUsage.CreateHeater(output, innerNode, dfg, parserInfo)); case Mixer.XmlTypeName: return(Mixer.CreateMixer(output, innerNode, dfg, parserInfo)); case Union.XML_TYPE_NAME: return(Union.CreateUnion(output, innerNode, dfg, parserInfo)); default: return(CreateFluid(output, innerNode, dfg, parserInfo)); } } return(null); }
public Direct GetProgram(XmlNode currentProgramXml, ParserInfo parserInfo) { string id = ParseTools.ParseID(currentProgramXml); InlineProgramInfo programInfo = GetInlineProgramInfo(currentProgramXml, parserInfo); CDFG newProgram = ProgramCDFG.Copy(); TransformCDFGToFunctionCDFG(newProgram, programInfo); TransformVariableNames(newProgram, programInfo, parserInfo.GetUniquePostFix()); ChangeIDs(newProgram, id); //Add new variables that this program added programInfo.OutputsFromTo.ForEach(x => parserInfo.AddVariable(string.Empty, VariableType.FLUID, x.Value)); DFG <Block> nextDFG = XmlParser.ParseNextDFG(currentProgramXml, parserInfo); DFG <Block> endDFG = newProgram.GetEndDFGInFirstScope(); int i = newProgram.Nodes.FindIndex(x => x.dfg == endDFG); if (newProgram.Nodes[i].control == null) { newProgram.Nodes[i] = (new Direct(nextDFG), endDFG); } else { newProgram.Nodes[i] = (newProgram.Nodes[i].control.GetNewControlWithNewEnd(nextDFG), endDFG); } //merge the programs together nd return the link between then parserInfo.cdfg.AddCDFG(newProgram); return(new Direct(newProgram.StartDFG)); }
public static Block Parse(XmlNode node, ParserInfo parserInfo) { string id = ParseTools.ParseID(node); string moduleName = ParseTools.ParseString(node, MODULE_NAME_FIELD_NAME); parserInfo.AddVariable(id, VariableType.WASTE, moduleName); return(new WasteDeclaration(moduleName, parserInfo.GetUniqueAnonymousName(), id)); }
public static Block Parse(XmlNode node, ParserInfo parserInfo, bool canBeScheduled) { string id = ParseTools.ParseID(node); string variableName = ParseTools.ParseString(node, VARIABLE_FIELD_NAME); parserInfo.AddVariable(id, VariableType.NUMBER, variableName); return(new ImportVariable(variableName, parserInfo.GetUniqueAnonymousName(), id, canBeScheduled)); }
public static DropletDeclaration Parse(XmlNode node, ParserInfo parserInfo) { string id = ParseTools.ParseID(node); string output = ParseTools.ParseString(node, INPUT_FLUID_FIELD_NAME); parserInfo.AddVariable(id, VariableType.FLUID, output); return(new DropletDeclaration(output, id)); }
public void ParseWasteBlock() { JSProgram program = new JSProgram(); program.AddWasteSegment("a", "z", 1249, false); TestTools.ExecuteJS(program); XmlNode node = TestTools.GetWorkspace(); ParserInfo parserInfo = new ParserInfo(); parserInfo.EnterDFG(); parserInfo.AddVariable("", VariableType.FLUID, "a"); parserInfo.AddVariable("", VariableType.WASTE, "z"); Block input = XmlParser.ParseBlock(node, new DFG <Block>(), parserInfo); Assert.AreEqual(0, parserInfo.ParseExceptions.Count, parserInfo.ParseExceptions.FirstOrDefault()?.Message); Assert.IsTrue(input is WasteUsage); }
public static InputDeclaration Parse(XmlNode node, ParserInfo parserInfo) { string id = ParseTools.ParseID(node); float amount = ParseTools.ParseFloat(node, parserInfo, id, INPUT_AMOUNT_FIELD_NAME); string output = ParseTools.ParseString(node, INPUT_FLUID_FIELD_NAME); parserInfo.AddVariable(id, VariableType.FLUID, output); return(new InputDeclaration(output, amount, id)); }
public void ParseMixerBlock() { JSProgram program = new JSProgram(); program.AddMixerSegment("a", "b", 10, false, "c", 0, true); TestTools.ExecuteJS(program); XmlNode node = TestTools.GetWorkspace(); ParserInfo parserInfo = new ParserInfo(); parserInfo.EnterDFG(); parserInfo.AddVariable("", VariableType.FLUID, "a"); parserInfo.AddVariable("", VariableType.FLUID, "b"); parserInfo.AddVariable("", VariableType.FLUID, "c"); Mixer mixer = (Mixer)XmlParser.ParseBlock(node, null, parserInfo); Assert.AreEqual(0, parserInfo.ParseExceptions.Count, parserInfo.ParseExceptions.FirstOrDefault()?.Message); Assert.AreEqual("a", mixer.OutputVariable); }
public void ParseHeaterBlock() { JSProgram program = new JSProgram(); program.AddHeaterSegment("a", "z", 173, 39, "b", 29, false); TestTools.ExecuteJS(program); XmlNode node = TestTools.GetWorkspace(); ParserInfo parserInfo = new ParserInfo(); parserInfo.EnterDFG(); parserInfo.AddVariable("", VariableType.FLUID, "b"); parserInfo.AddVariable("", VariableType.HEATER, "z"); HeaterUsage heater = (HeaterUsage)XmlParser.ParseBlock(node, null, parserInfo); Assert.AreEqual(0, parserInfo.ParseExceptions.Count, parserInfo.ParseExceptions.FirstOrDefault()?.Message); Assert.AreEqual("a", heater.OutputVariable); Assert.AreEqual(173, heater.Temperature); Assert.AreEqual(39, heater.Time); }
public static Block Parse(XmlNode node, DFG <Block> dfg, ParserInfo parserInfo) { string id = ParseTools.ParseID(node); string output = ParseTools.ParseString(node, VARIABLE_FIELD_NAME); parserInfo.AddVariable(id, VariableType.NUMBER, output); VariableBlock operandBlock = ParseTools.ParseBlock <VariableBlock>(node, dfg, parserInfo, id, INPUT_VARIABLE_FIELD_NAME, new MissingBlockException(id, "Missing block to define the variables value.")); dfg.AddNode(operandBlock); return(new SetNumberVariable(operandBlock, output, id)); }
public static Block Parse(XmlNode node, DFG <Block> dfg, ParserInfo parserInfo) { string id = ParseTools.ParseID(node); string arrayName = ParseTools.ParseString(node, ARRAY_NAME_FIELD_NAME); parserInfo.AddVariable(id, VariableType.NUMBER_ARRAY, arrayName); VariableBlock arrayLengthBlock = ParseTools.ParseBlock <VariableBlock>(node, dfg, parserInfo, id, ARRAY_LENGTH_FIELD_NAME, new MissingBlockException(id, "Missing block which define the length of the array.")); dfg.AddNode(arrayLengthBlock); return(new NumberArray(arrayName, arrayLengthBlock, id)); }
public void ParseFluidBlock() { JSProgram program = new JSProgram(); program.AddFluidSegment("k", "a", 10, false); TestTools.ExecuteJS(program); XmlNode node = TestTools.GetWorkspace(); ParserInfo parserInfo = new ParserInfo(); parserInfo.EnterDFG(); parserInfo.AddVariable("", VariableType.FLUID, "a"); Fluid input = (Fluid)XmlParser.ParseBlock(node, new DFG <Block>(), parserInfo); Assert.AreEqual(0, parserInfo.ParseExceptions.Count, parserInfo.ParseExceptions.FirstOrDefault()?.Message); }
public void ParseInputBlock() { JSProgram program = new JSProgram(); program.AddInputBlock("a", 20); TestTools.ExecuteJS(program); XmlNode node = TestTools.GetWorkspace(); ParserInfo parserInfo = new ParserInfo(); parserInfo.EnterDFG(); parserInfo.AddVariable("", VariableType.FLUID, "a"); InputDeclaration input = (InputDeclaration)XmlParser.ParseBlock(node, null, parserInfo, true); Assert.AreEqual(0, parserInfo.ParseExceptions.Count, parserInfo.ParseExceptions.FirstOrDefault()?.Message); Assert.AreEqual("a", input.OutputVariable); Assert.AreEqual(20, input.Amount); }