public void SetVariable(string name, string value, bool isSecret = false, bool isOutput = false, bool isFilePath = false) { ArgUtil.NotNullOrEmpty(name, nameof(name)); if (isFilePath && Container != null) { value = Container.TranslateToContainerPath(value); } if (isOutput || OutputVariables.Contains(name)) { _record.Variables[name] = new VariableValue() { Value = value, IsSecret = isSecret }; _jobServerQueue.QueueTimelineRecordUpdate(_mainTimelineId, _record); ArgUtil.NotNullOrEmpty(_record.RefName, nameof(_record.RefName)); Variables.Set($"{_record.RefName}.{name}", value, secret: isSecret); } else { Variables.Set(name, value, secret: isSecret); } }
public object this[string name] { get { if (OutputVariables.ContainsKey(name)) { return(OutputVariables[name]); } return(null); } }
/// <summary> /// The statistics related to the variables and computations in this block /// </summary> public Dictionary <string, string> GetStatistics() { var stats = new Dictionary <string, string>(); var inputVarsTotalCount = _inputVariables.Count; var inputVarsUsedCount = _inputVariables.Count(inputVar => inputVar.IsUsed); var inputVarsUnUsedCount = inputVarsTotalCount - inputVarsUsedCount; stats.Add("Used Input Variables: ", inputVarsUsedCount.ToString()); stats.Add("Unused Input Variables: ", inputVarsUnUsedCount.ToString()); stats.Add("Total Input Variables: ", inputVarsTotalCount.ToString()); var tempVarsCount = TempVariables.Count(); var tempVarsSubExprCount = TempVariables.Count(item => item.IsFactoredSubExpression); var tempVarsNonSubExprCount = tempVarsCount - tempVarsSubExprCount; stats.Add("Common Subexpressions Temp Variables: ", tempVarsSubExprCount.ToString()); stats.Add("Generated Temp Variables: ", tempVarsNonSubExprCount.ToString()); stats.Add("Total Temp Variables: ", tempVarsCount.ToString()); stats.Add("Total Output Variables: ", OutputVariables.Count().ToString()); stats.Add("Total Computed Variables: ", ComputedVariables.Count.ToString()); stats.Add("Target Temp Variables: ", TargetTempVarsCount.ToString()); var computationsCountTotal = ComputedVariables .Select(computedVar => computedVar.RhsExpr.ComputationsCount) .Sum(); var computationsCountAverage = computationsCountTotal / (double)ComputedVariables.Count; stats.Add("Avg. Computations Count: ", computationsCountAverage.ToString("0.000")); stats.Add("Total Computations Count: ", computationsCountTotal.ToString()); var memreadsCountTotal = ComputedVariables .Select(computedVar => computedVar.RhsVariablesCount) .Sum(); var memreadsCountAverage = memreadsCountTotal / (double)ComputedVariables.Count; stats.Add("Avg. Memory Reads: ", memreadsCountAverage.ToString("0.000")); stats.Add("Total Memory Reads: ", memreadsCountTotal.ToString()); return(stats); }
/// <summary> /// Try to get an input variable by its low-level name /// </summary> /// <param name="lowLevelVarName"></param> /// <param name="outputVar"></param> /// <returns></returns> public bool TryGetOutputVariable(string lowLevelVarName, out GMacCbOutputVariable outputVar) { if (VariablesDictionary.Count == 0) { outputVar = OutputVariables.FirstOrDefault(item => item.LowLevelName == lowLevelVarName); return(outputVar != null); } GMacCbVariable result; if (VariablesDictionary.TryGetValue(lowLevelVarName, out result) == false) { outputVar = null; return(false); } outputVar = result as GMacCbOutputVariable; return(outputVar != null); }
/// <summary> /// The statistics related to the variables and computations in this block as a single string /// </summary> /// <returns></returns> public string GetStatisticsReport() { var s = new StringBuilder(); var inputVarsTotalCount = _inputVariables.Count; var inputVarsUsedCount = _inputVariables.Count(inputVar => inputVar.IsUsed); var inputVarsUnUsedCount = inputVarsTotalCount - inputVarsUsedCount; s.Append("Input Variables: ") .Append(inputVarsUsedCount) .Append(" used, ") .Append(inputVarsUnUsedCount) .Append(" not used, ") .Append(inputVarsTotalCount) .AppendLine(" total.") .AppendLine(); var tempVarsCount = TempVariables.Count(); var tempVarsSubExprCount = TempVariables.Count(item => item.IsFactoredSubExpression); var tempVarsNonSubExprCount = tempVarsCount - tempVarsSubExprCount; s.Append("Temp Variables: ") .Append(tempVarsSubExprCount) .Append(" sub-expressions, ") .Append(tempVarsNonSubExprCount) .Append(" generated temps, ") .Append(tempVarsCount) .AppendLine(" total.") .AppendLine(); if (TargetTempVarsCount > 0) { s.Append("Target Temp Variables: ") .Append(TargetTempVarsCount) .AppendLine(" total.") .AppendLine(); } var outputVarsCount = OutputVariables.Count(); s.Append("Output Variables: ") .Append(outputVarsCount) .AppendLine(" total.") .AppendLine(); var computationsCountTotal = ComputedVariables .Select(computedVar => computedVar.RhsExpr.ComputationsCount) .Sum(); var computationsCountAverage = computationsCountTotal / (double)ComputedVariables.Count; s.Append("Computations: ") .Append(computationsCountAverage) .Append(" average, ") .Append(computationsCountTotal) .AppendLine(" total.") .AppendLine(); var memreadsCountTotal = ComputedVariables .Select(computedVar => computedVar.RhsVariablesCount) .Sum(); var memreadsCountAverage = memreadsCountTotal / (double)ComputedVariables.Count; s.Append("Memory Reads: ") .Append(memreadsCountAverage) .Append(" average, ") .Append(memreadsCountTotal) .AppendLine(" total.") .AppendLine(); s.Append("Memory Writes: ") .Append(ComputedVariables.Count) .AppendLine(" total.") .AppendLine(); return(s.ToString()); }
public void Add(string name, object value) { OutputVariables.Add(name, value); }