public static async Task <BA2FileEntryBuilder> Create(BA2FileEntryState state, Stream src, DiskSlabAllocator slab) { var builder = new BA2FileEntryBuilder { _state = state, _rawSize = (int)src.Length, _dataSrc = src }; if (!state.Compressed) { return(builder); } await using (var ms = new MemoryStream()) { await using (var ds = new DeflaterOutputStream(ms)) { ds.IsStreamOwner = false; await builder._dataSrc.CopyToAsync(ds); } builder._dataSrc = slab.Allocate(ms.Length); ms.Position = 0; await ms.CopyToAsync(builder._dataSrc); builder._dataSrc.Position = 0; builder._size = (int)ms.Length; } return(builder); }
public static BA2FileEntryBuilder Create(BA2FileEntryState state, Stream src) { var builder = new BA2FileEntryBuilder { _state = state }; using (var ms = new MemoryStream()) { src.CopyTo(ms); builder._data = ms.ToArray(); } builder._rawSize = builder._data.Length; if (state.Compressed) { using (var ms = new MemoryStream()) { using (var ds = new DeflaterOutputStream(ms)) { ds.Write(builder._data, 0, builder._data.Length); } builder._data = ms.ToArray(); } builder._size = builder._data.Length; } return(builder); }
public void AddFile(FileStateObject state, Stream src) { switch (_state.Type) { case EntryType.GNRL: var result = new BA2FileEntryBuilder((BA2FileEntryState)state, src); lock (_entries) _entries.Add(result); break; case EntryType.DX10: var resultdx10 = new BA2DX10FileEntryBuilder((BA2DX10EntryState)state, src); lock (_entries) _entries.Add(resultdx10); break; } }
public async Task AddFile(FileStateObject state, Stream src) { switch (_state.Type) { case EntryType.GNRL: var result = await BA2FileEntryBuilder.Create((BA2FileEntryState)state, src, _slab); lock (_entries) _entries.Add(result); break; case EntryType.DX10: var resultdx10 = await BA2DX10FileEntryBuilder.Create((BA2DX10EntryState)state, src, _slab); lock (_entries) _entries.Add(resultdx10); break; } }