private Statement GetStatementForOutput(int portIndex) { if (State == ElementState.Error) { return(null); } // Here the "portIndex" is back mapped to the corresponding "Statement" // object. However, not all "Statement" objects produce an output port, // so "portIndex" cannot be used directly to index into "codeStatements" // list. This loop goes through "codeStatements", decrementing "portIndex" // along the way to determine the right "Statement" object matching the // port index. // Statement statement = null; var svs = CodeBlockUtils.GetStatementVariables(codeStatements, true); for (int stmt = 0, port = 0; stmt < codeStatements.Count; stmt++) { if (CodeBlockUtils.DoesStatementRequireOutputPort(svs, stmt)) { if (port == portIndex) { statement = codeStatements[stmt]; break; } port = port + 1; } } return(statement); }
/// <summary> /// Returns the corresponding output port index for a given defined variable /// </summary> /// <param name="variableName"></param> /// <returns></returns> public int GetOutportIndex(string variableName) { var svs = CodeBlockUtils.GetStatementVariables(codeStatements, true); for (int i = 0; i < codeStatements.Count; i++) { Statement s = codeStatements[i]; if (CodeBlockUtils.DoesStatementRequireOutputPort(svs, i)) { List <string> varNames = Statement.GetDefinedVariableNames(s, true); if (varNames.Contains(variableName)) { return(i); } } } return(-1); }