private void Load(StructureValueCollection values, ushort index, FileSegmentGroup metaArea, IList <ITagClass> classList) { uint address = values.GetInteger("memory address"); VirtualAddr = address; address = NewPointerConverter.ConvertToPointer(address); if (address != 0 && address != 0xFFFFFFFF) { MetaLocation = SegmentPointer.FromPointer(address, metaArea); } var classIndex = (int)values.GetInteger("class index"); if (classIndex >= 0 && classIndex < classList.Count) { Class = classList[classIndex]; } var salt = (ushort)values.GetInteger("datum index salt"); if (salt != 0xFFFF) { Index = new DatumIndex(salt, index); } else { Index = DatumIndex.Null; } }
public void VisitReflexive(ReflexiveData field) { SeekToOffset(field.Offset); StructureValueCollection values = StructureReader.ReadStructure(_reader, _tagBlockLayout); var length = (int)values.GetInteger("entry count"); uint pointer = values.GetInteger("pointer"); if (_cache.Engine == EngineType.ThirdGenMCC) { pointer = NewPointerConverter.ConvertToPointer(pointer); } // Make sure the pointer looks valid if (length < 0 || !_cache.MetaArea.ContainsTagBlockPointer(pointer, (int)(length * field.EntrySize))) { length = 0; pointer = 0; } field.Length = length; if (pointer != field.FirstEntryAddress) { field.FirstEntryAddress = pointer; } }