/// <summary> /// Initialize with data /// </summary> /// <param name="data"></param> public GMPK(Span <byte> data) { Header = MemoryMarshal.Read <GMPKHeader>(data); Index = MemoryMarshal.Read <GMPKIndex>(data.Slice(Header.NameMapIndexPointer)); NameMap = new GPKNameMap(data.Slice(Index.NameMapPointer, Index.NameMapSize)); for (var i = 0; i < Index.FileCount; ++i) { var offset = MemoryMarshal.Read <int>(data.Slice(Header.FileTablePointer + i * 8)); var length = MemoryMarshal.Read <int>(data.Slice(Header.FileTablePointer + i * 8 + 4)); Blobs.Add(new Memory <byte>(data.Slice(Header.FileTablePointer + offset, length).ToArray())); } }
/// <summary> /// Initialize with data /// </summary> /// <param name="data"></param> public GAPK(Span <byte> data) { Header = MemoryMarshal.Read <GAPKHeader>(data); var offsets = MemoryMarshal.Cast <byte, int>(data.Slice(Header.PointerTablePointer, Header.PointerTableCount * 4)); var sizes = MemoryMarshal.Cast <byte, int>(data.Slice(Header.SizeTablePointer, Header.SizeTableCount * 4)); NameMap = new GPKNameMap(data.Slice(Header.IndexTablePointer)); for (var i = 0; i < NameMap.Entries.Length; ++i) { Blobs.Add(new Memory <byte>(data.Slice(offsets[i], sizes[i]).ToArray())); } }