public void Add(MissionParameter parameter, bool replaceExisting = false) { CheckConsistency(parameter); switch (parameter) { case ConstantOutputMissionParameter comp: break; case ConstantMissionParameter cmp: break; case VariableMissionParameter vmp: break; default: break; } if (!parameters.ContainsKey(parameter.Name)) { parameters.Add(parameter.Name, parameter); } else if (replaceExisting) { parameters[parameter.Name] = parameter; } }
private void CheckConsistency(MissionParameter parameter) { Check("Number of Samples", parameter.Samples, Samples); Check("Duration", parameter.Duration, Duration); Check("Start", parameter.Start, Start); void Check(string name, double v1, double v2) { if (v1 != v2) { throw new ArgumentException($"The parameter '{name}' is not consistenst with the segment '{name}'. {v1} vs {v2}"); } } }
public void Remove(MissionParameter parameter) { switch (parameter) { case ConstantOutputMissionParameter comp: break; case ConstantMissionParameter cmp: break; case VariableMissionParameter vmp: break; default: break; } if (parameters.ContainsKey(parameter.Name)) { parameters.Remove(parameter.Name); } }
public (int[] variableIn, int[] constantIn, int[] variableOut, int[] constantOut, List <MissionParameter> missionParameters) GetComponentCalssificationAndIndices(WorkflowComponent component) { var variableInputs = new List <string>(); var constantInputs = new List <string>(); var variableOutputs = new List <string>(); var constantOutputs = new List <string>(); var modelDataDict = new Dictionary <string, int>(); var missionParameters = new List <MissionParameter>(component.ModelDataInputs.Count + component.ModelDataOutputs.Count); for (int i = 0; i < component.ModelDataInputs.Count; i++) { Data data = component.ModelDataInputs[i]; string name = data.Name; try { MissionParameter parameter = parameters[name]; missionParameters.Add(parameter); if (parameter is VariableMissionParameter vmp) { variableInputs.Add(name); } else if (parameter is ConstantMissionParameter cmp) { constantInputs.Add(name); } } catch (KeyNotFoundException knfe) { throw new KeyNotFoundException($"No parameter for variable '{data}' was found in segment {Name}", knfe); } modelDataDict[name] = i; } for (int i = 0; i < component.ModelDataOutputs.Count; i++) { Data data = component.ModelDataInputs[i]; string name = data.Name; try { MissionParameter parameter = parameters[name]; missionParameters.Add(parameter); if (parameter is VariableMissionParameter vmp) { variableOutputs.Add(name); } else if (parameter is ConstantMissionParameter cmp) { constantOutputs.Add(name); } } catch (KeyNotFoundException knfe) { throw new KeyNotFoundException($"No parameter for variable '{data}' was found in segment {Name}", knfe); } modelDataDict[name] = i; } int[] variableIn = variableInputs.Select(v => modelDataDict[v]).ToArray(); int[] constantIn = constantInputs.Select(v => modelDataDict[v]).ToArray(); int[] variableOut = variableOutputs.Select(v => modelDataDict[v]).ToArray(); int[] constantOut = constantOutputs.Select(v => modelDataDict[v]).ToArray(); return(variableIn, constantIn, variableOut, constantOut, missionParameters); }