using System; using System.Collections.Generic; using System.IO; using Wabbajack.Common; namespace Compression.BSA { public interface IBSAReader : IAsyncDisposable { /// /// The files defined by the archive /// IEnumerable Files { get; } ArchiveStateObject State { get; } } public interface IBSABuilder : IAsyncDisposable { void AddFile(FileStateObject state, Stream src); void Build(AbsolutePath filename); } public class ArchiveStateObject { public virtual IBSABuilder MakeBuilder(long size) { throw new NotImplementedException(); } } public class FileStateObject { public int Index { get; set; } public RelativePath Path { get; set; } } public interface IFile { /// /// The path of the file inside the archive /// RelativePath Path { get; } /// /// The uncompressed file size /// uint Size { get; } /// /// Get the metadata for the file. /// FileStateObject State { get; } /// /// Copies this entry to the given stream. 100% thread safe, the .bsa will be opened multiple times /// in order to maintain thread-safe access. /// /// void CopyDataTo(Stream output); } }