private void Load(IReader reader, StructureValueCollection values, MetaAddressConverter converter, BuildInformation buildInfo) { if (values.GetNumber("magic") != CharConstant.FromString("tags")) throw new ArgumentException("Invalid index table header magic"); // Classes int numClasses = (int)values.GetNumber("number of classes"); Pointer classTableLocation = new Pointer(values.GetNumber("class table address"), converter); _classes = ReadClasses(reader, classTableLocation, numClasses, buildInfo); // Tags int numTags = (int)values.GetNumber("number of tags"); Pointer tagTableLocation = new Pointer(values.GetNumber("tag table address"), converter); _tags = ReadTags(reader, tagTableLocation, numTags, buildInfo, converter); }
private void Load(StructureValueCollection values) { _addrConverter = LoadAddressConverter(values); _indexConverter = LoadIndexOffsetConverter(values); _stringOffsetConverter = LoadHeaderOffsetConverter(values); FileSize = values.GetNumber("file size"); IndexHeaderLocation = new Pointer(values.GetNumber("index header address"), _addrConverter); MetaSize = values.GetNumber("virtual size"); Type = (CacheFileType)values.GetNumber("type"); StringIDCount = (int)values.GetNumber("string table count"); StringIDTableSize = (int)values.GetNumber("string table size"); StringIDIndexTableLocation = new Pointer(values.GetNumber("string index table offset"), _stringOffsetConverter); StringIDDataLocation = new Pointer(values.GetNumber("string table offset"), _stringOffsetConverter); InternalName = values.GetString("internal name"); ScenarioName = values.GetString("scenario name"); FileNameCount = (int)values.GetNumber("file table count"); FileNameDataLocation = new Pointer(values.GetNumber("file table offset"), _stringOffsetConverter); FileNameTableSize = (int)values.GetNumber("file table size"); FileNameIndexTableLocation = new Pointer(values.GetNumber("file index table offset"), _stringOffsetConverter); XDKVersion = (int)values.GetNumber("xdk version"); Partitions = LoadPartitions(values.GetArray("partitions")); LocaleDataLocation = new Pointer(values.GetNumberOrDefault("locale data index offset", (uint)HeaderSize), _indexConverter); LocaleDataSize = (int)values.GetNumberOrDefault("locale data size", 0); }
public ThirdGenTagTable(IReader reader, StructureValueCollection headerValues, MetaAddressConverter converter, BuildInformation buildInfo) { Load(reader, headerValues, converter, buildInfo); }
private List<ITag> ReadTags(IReader reader, Pointer tagTableLocation, int numTags, BuildInformation buildInfo, MetaAddressConverter converter) { StructureLayout layout = buildInfo.GetLayout("tag entry"); List<ITag> result = new List<ITag>(); reader.SeekTo(tagTableLocation.AsOffset()); for (int i = 0; i < numTags; i++) { StructureValueCollection values = StructureReader.ReadStructure(reader, layout); result.Add(new ThirdGenTag(values, (ushort)i, converter, _classes)); } return result; }