using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Compression.BSA { public interface IBSAReader : IDisposable { /// /// The files defined by the archive /// IEnumerable Files { get; } ArchiveStateObject State { get; } } public interface IBSABuilder : IDisposable { Task AddFile(FileStateObject state, Stream src); Task Build(string filename); } public class ArchiveStateObject { public virtual IBSABuilder MakeBuilder() { throw new NotImplementedException(); } } public class FileStateObject { public int Index { get; set; } public string Path { get; set; } } public interface IFile { /// /// The path of the file inside the archive /// string 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. /// /// Task CopyDataToAsync(Stream output); } }