예제 #1
0
파일: Format.cs 프로젝트: kohoutech/Gander
        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);
        }
예제 #2
0
파일: Format.cs 프로젝트: kohoutech/Gander
        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);
        }
예제 #3
0
파일: Format.cs 프로젝트: kohoutech/Gander
 public void addEntry(String name, FEntry entry)
 {
     entries[name] = entry;
 }