/** * createVariable creates the correct Variable type from the sinter_IOType. **/ public static sinter_Variable createVariable(sinter_Variable.sinter_IOType type) { switch (type) { case sinter_Variable.sinter_IOType.si_DOUBLE: case sinter_Variable.sinter_IOType.si_INTEGER: case sinter_Variable.sinter_IOType.si_STRING: return(new sinter_Variable()); case sinter_Variable.sinter_IOType.si_DOUBLE_VEC: case sinter_Variable.sinter_IOType.si_INTEGER_VEC: case sinter_Variable.sinter_IOType.si_STRING_VEC: return(new sinter_Vector()); case sinter_Variable.sinter_IOType.si_DY_DOUBLE: case sinter_Variable.sinter_IOType.si_DY_INTEGER: case sinter_Variable.sinter_IOType.si_DY_STRING: return(new sinter_DynamicScalar()); case sinter_Variable.sinter_IOType.si_DY_DOUBLE_VEC: case sinter_Variable.sinter_IOType.si_DY_INTEGER_VEC: case sinter_Variable.sinter_IOType.si_DY_STRING_VEC: return(new sinter_DynamicVector()); default: throw new ArgumentException(String.Format("Unknown type {0} passed to sinter_Factory.createVariable", (int)type)); } }
private void addIO(sinter_Variable.sinter_IOMode iomode, sinter_Variable.sinter_IOType type, string name, string desc, string[] addStrings, int[] bounds) { if (type == sinter_Variable.sinter_IOType.si_TABLE) { sinter_Table thisTable = new sinter_Table(); if (bounds == null || bounds.Length < 2) { thisTable.init(name, iomode, desc, addStrings, 0, 0); } else { thisTable.init(name, iomode, desc, addStrings, bounds[0], bounds[1]); } addTable(thisTable); } else if (type == sinter_Variable.sinter_IOType.si_DOUBLE_VEC || type == sinter_Variable.sinter_IOType.si_INTEGER_VEC || type == sinter_Variable.sinter_IOType.si_STRING_VEC) { sinter_Vector o = new sinter_Vector(); if (bounds == null || bounds.Length < 1) { o.init(name, iomode, type, desc, addStrings, 0); } else { o.init(name, iomode, type, desc, addStrings, bounds[0]); } addVariable(o); } else { sinter_Variable o = new sinter_Variable(); o.init(name, iomode, type, desc, addStrings); if (o.isSetting) { addSetting(o); } else { addVariable(o); } } }
public override void init(string thisName, sinter_Variable.sinter_IOMode iomode, sinter_Variable.sinter_IOType thisType, string desc, string[] addStrings) { throw new NotImplementedException("Dynamic Scalar does not implement init with no time series"); }
private void processType(string l, ref sinter_Variable.sinter_IOType type, ref int n, ref int m) { string[] fields = null; string[] sz = null; n = 0; m = 0; //Checks if it's a table the bounds will be in brackets fields = l.Split('['); for (int i = 0; i <= fields.Length - 1; i++) { fields[i] = fields[i].Trim(); } if (fields.Length == 2) { if (fields[1][fields[1].Length - 1] == ']') //Last character in fields[1] { fields[1] = fields[1].Substring(0, fields[1].Length - 1); //Drop Last char (Bracket) } } if (fields.Length == 2) { sz = fields[1].Split(','); for (int i = 0; i <= sz.Length - 1; i++) { sz[i] = sz[i].Trim(); } n = Convert.ToInt32(sz[0]); if (sz.Length == 2) { m = Convert.ToInt32(sz[1]); } } //End table bounds parsing stuff switch (fields[0]) { case "int": if (n == 0 & m == 0) { type = sinter_Variable.sinter_IOType.si_INTEGER; } else if (n > 0 & m == 0) { type = sinter_Variable.sinter_IOType.si_INTEGER_VEC; } break; case "double": if (n == 0 & m == 0) { type = sinter_Variable.sinter_IOType.si_DOUBLE; } else if (n > 0 & m == 0) { type = sinter_Variable.sinter_IOType.si_DOUBLE_VEC; } break; case "string": type = sinter_Variable.sinter_IOType.si_STRING; if ((n > 0 | m > 0)) { throw new System.IO.IOException("String vector or matrix not supported"); } break; case "table": type = sinter_Variable.sinter_IOType.si_TABLE; break; default: type = sinter_Variable.sinter_IOType.si_STRING; break; } }
private sinter.sinter_AppError processLine(string l) { string[] fields = null; sinter_Variable.sinter_IOType type = default(sinter_Variable.sinter_IOType); sinter_Variable.sinter_IOMode mode = default(sinter_Variable.sinter_IOMode); // // Split line using a bar // if (l.Length < 1) { return(sinter.sinter_AppError.si_OKAY); } fields = l.Split('|'); if (fields.Length == 0) { return(sinter.sinter_AppError.si_OKAY); } for (int i = 0; i <= fields.Length - 1; i++) { fields[i] = fields[i].Trim();// Strings.Trim(fields[i]); char tab = '\u0009'; fields[i] = fields[i].Replace(tab.ToString(), ""); } // // Check for special key words // if (fields[0].Length == 0) { return(sinter.sinter_AppError.si_OKAY); //Blank or invalid line, ignore it } if (fields[0][0] == '#') //If first char in line is a # { return(sinter.sinter_AppError.si_OKAY); //it is a comment ignore line } else if (fields[0] == "file" & fields.Length == 2) { o_aspenFilename = fields[1]; //e = sim.openSim(); //open sim so can inspect IO //return e; return(sinter.sinter_AppError.si_OKAY); } else if (fields[0] == "dir" & fields.Length == 2) { // o_workingDir = fields[1]; return(sinter.sinter_AppError.si_UNKNOWN_FIELD); } else if (fields[0] == "title" & fields.Length == 2) { o_title = fields[1]; return(sinter.sinter_AppError.si_OKAY); } else if (fields[0] == "author" & fields.Length == 2) { o_author = fields[1]; return(sinter.sinter_AppError.si_OKAY); } else if (fields[0] == "date" & fields.Length == 2) { o_dateString = fields[1]; return(sinter.sinter_AppError.si_OKAY); } else if (fields[0] == "description" & fields.Length == 2) { o_simDesc = fields[1]; return(sinter.sinter_AppError.si_OKAY); } else if (fields[0] == "min") { processMin(fields); return(sinter.sinter_AppError.si_OKAY); } else if (fields[0] == "max") { processMax(fields); return(sinter.sinter_AppError.si_OKAY); } else if (fields[0] == "default") { processDefault(fields); return(sinter.sinter_AppError.si_OKAY); } else if (fields[0] == "limits") { if (getIOByName(fields[1]) == null) { throw new System.IO.IOException("Cannot apply labels, Object " + fields[1] + " not found. (Settings not allowed)"); //return sinter.sinter_AppError.si_OKAY; } else if (!(getIOByName(fields[1]).isScalar)) { throw new System.IO.IOException("Cannot use limits on non scalar"); //return sinter.sinter_AppError.si_OKAY; } else if (fields.Length != 4) { throw new System.IO.IOException("Limits on " + fields[1] + " too few arguments"); //return sinter.sinter_AppError.si_OKAY; } if (getIOByName(fields[1]).type == sinter_Variable.sinter_IOType.si_DOUBLE) { sinter_Variable thisVar = (sinter_Variable)getIOByName(fields[1]); thisVar.minimum = Convert.ToDouble(fields[2]); thisVar.maximum = Convert.ToDouble(fields[3]); } else if (getIOByName(fields[1]).type == sinter_Variable.sinter_IOType.si_INTEGER) { sinter_Variable thisVar = (sinter_Variable)getIOByName(fields[1]); thisVar.minimum = Convert.ToInt32(fields[2]); thisVar.maximum = Convert.ToInt32(fields[3]); } return(sinter.sinter_AppError.si_OKAY); } else if (fields[0] == "cLabels" | fields[0] == "clabels") { if (getIOByName(fields[1]) == null) { throw new System.IO.IOException("Cannot apply labels, Object " + fields[1] + " not found"); } processLabels("c", fields, getIOByName(fields[1])); return(sinter.sinter_AppError.si_OKAY); } else if (fields[0] == "rLabels" | fields[0] == "rlabels") { if (getIOByName(fields[1]) == null) { throw new System.IO.IOException("Cannot apply labels, Object " + fields[1] + " not found"); } processLabels("r", fields, getIOByName(fields[1])); return(sinter.sinter_AppError.si_OKAY); } else if (fields[0] == "cStrings" | fields[0] == "cstrings") { if (getIOByName(fields[1]) == null) { throw new System.IO.IOException("Cannot apply strings, Object " + fields[1] + " not found"); } processLabels("cs", fields, getIOByName(fields[1])); sinter_IVariable io = getIOByName(fields[1]); return(sinter.sinter_AppError.si_OKAY); } else if (fields[0] == "rStrings" | fields[0] == "rstrings") { if (getIOByName(fields[1]) == null) { throw new System.IO.IOException("Cannot apply strings, Object " + fields[1] + " not found"); } processLabels("rs", fields, getIOByName(fields[1])); return(sinter.sinter_AppError.si_OKAY); } else if (fields[0] == "rStrings_ForEach" | fields[0] == "rstrings_ForEach") { throw new System.IO.IOException("No Foreach allowed with this version of sinter."); } // // Check lines that add input and output // if (fields.Length >= 5) { //assume if a line isn't a keyword line and it has 5 or more fields // it is adding an input or output // // 0-name | 1-iomode | 2-iotype | 3-description | 4-addess-string ... (There may be multiple address strings) if ((fields[1] == "input")) { mode = sinter_Variable.sinter_IOMode.si_IN; } else { mode = sinter_Variable.sinter_IOMode.si_OUT; } int[] bounds = null; sinter_Variable.string2Type(fields[2], ref type, ref bounds); string[] addresses = new string[fields.Length - 4]; Array.Copy(fields, 4, addresses, 0, fields.Length - 4); //Copy all address strings for this line addIO(mode, type, fields[0], fields[3], addresses, bounds); return(sinter.sinter_AppError.si_OKAY); } throw new System.IO.IOException(String.Format("Sinter Config Line unknown: {0}", l)); }