public IStatement GenerateIf(FieldDefinition field, List <int> toStateIds, Epa epa, Dictionary <State, int> stateNumberMap) { var toStates = new List <State>(); foreach (var kvp in stateNumberMap) { var id = kvp.Value; var state = kvp.Key; if (toStateIds.Contains(id)) { toStates.Add(state); } } var conditions = GenerateStatesConditions(toStates); var stmt = new AssignmentGenerator().GenerateAssign(field, toStateIds[0]); for (var i = 1; i < toStateIds.Count; ++i) { stmt = new ConditionalStatement { Condition = conditions[i], TrueBranch = new AssignmentGenerator().GenerateAssign(field, toStateIds[i]), FalseBranch = stmt }; } return(stmt); }
protected ISwitchCase GenerateSwitchCase(FieldDefinition field, int fromStateId, List <int> toStateIds) { Contract.Requires(field != null && toStateIds != null && toStateIds.Count > 0); var caseStmt = new SwitchCase { Expression = new CompileTimeConstant { Type = field.Type, Value = fromStateId } }; IStatement stmt; //Determinismo y no determinismo if (toStateIds.Count == 1) { stmt = new AssignmentGenerator().GenerateAssign(field, toStateIds.First()); } else { stmt = new IfGenerator().GenerateIf(field, toStateIds, epa, stateNumberMap); } caseStmt.Body.Add(stmt); caseStmt.Body.Add(new BreakStatement()); return(caseStmt); }