Beispiel #1
0
 private void ReadFieldDescriptors(Stream s)
 {
     fieldDescriptors = new List <StreamingPartitionFieldDescriptor>();
     for (int i = 0; i < Header.fieldDescriptorCount; i++)
     {
         StreamingPartitionFieldDescriptor f = new StreamingPartitionFieldDescriptor();
         f.fieldNameHash = Helpers.ReadInt(s);
         foreach (KeyWordDicStruct key in keyWordDic)
         {
             if (key.hash == f.fieldNameHash)
             {
                 f._name = key.keyword;
                 break;
             }
         }
         f.flagBits        = Helpers.ReadUShort(s);
         f._type           = (byte)((f.flagBits >> 4) & 0x1F);
         f.fieldTypeIndex  = Helpers.ReadUShort(s);
         f.fieldOffset     = Helpers.ReadInt(s);
         f.secondaryOffset = Helpers.ReadInt(s);
         if (f._name == "$")
         {
             f.fieldOffset -= 8;
         }
         f._index = i;
         fieldDescriptors.Add(f);
     }
 }
Beispiel #2
0
        public string MakeFieldXML(Field field, int tab)
        {
            StringBuilder sb    = new StringBuilder();
            string        tabs  = Helpers.MakeTabs(tab);
            string        tabs2 = Helpers.MakeTabs(tab + 1);
            StreamingPartitionFieldDescriptor desc = field.Descriptor;

            if (desc._name == "$")
            {
                return(MakeComplexFieldXML((Type)field.data, tab));
            }
            sb.AppendFormat(tabs + "<{0} @0x{1}>\n", desc._name, field.offset.ToString("X"));
            byte realtype = (byte)((field.Descriptor.flagBits >> 4) & 0x1F);

            if (field.data == null)
            {
                return("");
            }
            switch (realtype)
            {
            case 0:
            case 2:
                sb.Append(MakeComplexFieldXML((Type)field.data, tab + 1));
                break;

            case 4:
                foreach (Field f in (List <Field>)field.data)
                {
                    sb.Append(MakeFieldXML(f, tab + 1));
                }
                break;

            case 0x7:
            case 0x8:
                sb.AppendFormat(tabs2 + "{0}\n", (string)field.data);
                break;

            case 0xa:
            case 0xb:
            case 0xc:
                sb.AppendFormat(tabs2 + "0x{0}\n", ((byte)field.data).ToString("X2"));
                break;

            case 0xd:
            case 0xe:
                sb.AppendFormat(tabs2 + "0x{0}\n", ((ushort)field.data).ToString("X4"));
                break;

            case 0x3:
            case 0xf:
            case 0x10:
                sb.AppendFormat(tabs2 + "0x{0}\n", ((uint)field.data).ToString("X8"));
                break;

            case 0x13:
                sb.AppendFormat(tabs2 + "{0}f\n", ((float)field.data).ToString());
                break;

            case 0x15:
            case 0x16:
                sb.AppendFormat(tabs2 + "{0}\n", Helpers.ByteArrayToHexString((byte[])field.data));
                break;

            case 0x17:
                break;

            default:
                break;
            }
            sb.AppendFormat(tabs + "</{0}>\n", desc._name);
            return(sb.ToString());
        }
Beispiel #3
0
 private void ReadFieldDescriptors(Stream s)
 {
     fieldDescriptors = new List<StreamingPartitionFieldDescriptor>();
     for (int i = 0; i < Header.fieldDescriptorCount; i++)
     {
         StreamingPartitionFieldDescriptor f = new StreamingPartitionFieldDescriptor();
         f.fieldNameHash = Helpers.ReadInt(s);
         foreach (KeyWordDicStruct key in keyWordDic)
             if (key.hash == f.fieldNameHash)
             {
                 f._name = key.keyword;
                 break;
             }
         f.flagBits = Helpers.ReadUShort(s);
         f._type = (byte)((f.flagBits >> 4) & 0x1F);
         f.fieldTypeIndex = Helpers.ReadUShort(s);
         f.fieldOffset = Helpers.ReadInt(s);
         f.secondaryOffset = Helpers.ReadInt(s);
         if (f._name == "$")
             f.fieldOffset -= 8;
         f._index = i;
         fieldDescriptors.Add(f);
     }
 }