public FEntry getEntry(String name) { FEntry entry = null; int pos = name.IndexOf('.'); String start = (pos != -1) ? name.Substring(0, pos).Trim() : name; int index = -1; if (start.EndsWith("]")) { int indexpos = start.IndexOf('['); String indexstr = start.Substring(indexpos + 1, start.Length - indexpos - 2); start = start.Substring(0, indexpos); } if (entries.ContainsKey(start)) { entry = entries[start]; } if (entry == null && parent != null) { entry = parent.getEntry(start); //follow sym tbl chain up to root } while (pos != -1) { name = name.Substring(pos + 1); entry = ((StructField)entry).ftype.symTable.getEntry(name); pos = name.IndexOf('.'); } return(entry); }
public static FField loadField(FStruct fs, String fname, List <String> parms) { FField f = null; //check for loaded struct FEntry ftype = fs.format.structs.getEntry(parms[0].ToLower()); if (ftype != null) { f = new StructField(fs, fname, (FStruct)ftype); } //else is a predefined struct else { switch (parms[0]) { case "int": f = IntField.loadEntry(fs, fname, parms); break; case "fixedstr": f = FixedString.loadEntry(fs, fname, parms); break; case "fixedbuf": f = FixedBuffer.loadEntry(fs, fname, parms); break; case "varbuf": f = VariableBuffer.loadEntry(fs, fname, parms); break; case "vartable": f = VariableTable.loadEntry(fs, fname, parms); break; case "sizebuftable": f = SizeBufferTable.loadEntry(fs, fname, parms); break; default: break; } } return(f); }
public void addEntry(String name, FEntry entry) { entries[name] = entry; }