private static void AlignCellChildren( BinaryReadStream mutaReader, MutagenWriter writer) { writer.Write(mutaReader.ReadSpan(4, readSafe: false)); var storage = new Dictionary <int, ReadOnlyMemorySlice <byte> >(); for (int i = 0; i < 3; i++) { mutaReader.Position += 4; var subLen = mutaReader.ReadInt32(); mutaReader.Position += 4; var subGrupType = mutaReader.ReadInt32(); mutaReader.Position -= 16; if (!writer.MetaData.Constants.GroupConstants.Cell.SubTypes.Contains(subGrupType)) { i = 3; // end loop continue; } storage[subGrupType] = mutaReader.ReadMemory(subLen, readSafe: true); } foreach (var item in writer.MetaData.Constants.GroupConstants.Cell.SubTypes) { if (storage.TryGetValue(item, out var content)) { writer.Write(content); } } }
private static void AlignCellChildren( BinaryReadStream mutaReader, MutagenWriter writer) { writer.Write(mutaReader.ReadSpan(4, readSafe: false)); var storage = new Dictionary <GroupTypeEnum, ReadOnlyMemorySlice <byte> >(); for (int i = 0; i < 3; i++) { mutaReader.Position += 4; var subLen = mutaReader.ReadInt32(); mutaReader.Position += 4; var subGrupType = (GroupTypeEnum)mutaReader.ReadUInt32(); mutaReader.Position -= 16; switch (subGrupType) { case GroupTypeEnum.CellPersistentChildren: case GroupTypeEnum.CellTemporaryChildren: case GroupTypeEnum.CellVisibleDistantChildren: break; default: i = 3; // end loop continue; } storage[subGrupType] = mutaReader.ReadMemory(subLen, readSafe: true); } if (storage.TryGetValue(GroupTypeEnum.CellPersistentChildren, out var content)) { writer.Write(content); } if (storage.TryGetValue(GroupTypeEnum.CellTemporaryChildren, out content)) { writer.Write(content); } if (storage.TryGetValue(GroupTypeEnum.CellVisibleDistantChildren, out content)) { writer.Write(content); } }