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); } }
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()); }
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); } }