--------------------------------------------------------------------------------------------------- Done: Rename BinaryReader / BinaryWriter to Reader/Writer --------------------------------------------------------------------------------------------------- Pro: - These interfaces do not necessarily have to be used for writing binary data. XmlReader and XmlWriter could be derived from this Contra: - Using the same base for Binary and Xml reading/writing might invite inappropriate code sharing: writing a series of floats into an XmlWriter would result in a mess of values inside a single Xml tag. --------------------------------------------------------------------------------------------------- Done: XML reading / writing --------------------------------------------------------------------------------------------------- - XmlReader / XmlWriter should have a toggleable BinaryFormat property (Base64/BinHex/??) - XML Pull Parser should be a top priority since that's most efficient at writing and reading beautiful XML files (need another lib for XSD validation if desired, though) Parsers: - Expat seems to be the ideal choice - IncredibleXML is C and author wants to be emailed for source (maybe when I make a Gentoo package of my project I should include code to send an email and parse the reply for a download URL?) - TinyXML is DOM and poops on C++ conventions and the standard library - LibXML++ uses Glib::ustring (a design decision in very bad taste! - keep dependencies minimal, especially if it's a bloat-my-ass library just for avoiding std::string for no good reason) --------------------------------------------------------------------------------------------------- Done: 7-Zip reading --------------------------------------------------------------------------------------------------- Possible improvements: - When skipping, avoid copying decoded data out of the dictionary - Share dictionary across all contexts decoding the same solid block (possibly complicated or impossible - if a file is larger than the dictionary size, the dictionary might be used as a ring-buffer) - Drop the dictionary after a solid block has been fully decompressed --------------------------------------------------------------------------------------------------- TODO: File handle reuse --------------------------------------------------------------------------------------------------- Redesign -------- Binary InputStream OutputStream MemoryBlob BinaryBlobReader BinaryBlobWriter BinaryStreamReader BinaryStreamWriter Compression XY Compress(InputStream, OutputStream) Decompress(InputStream, OutputStream) Compress(Buffer, OutputStream) Decompress(Buffer, OutputStream) Patching XY Diff() / Analyze() / Compare() Patch() Apache-Licensed diff + patch tools: https://github.com/janjongboom/janpatch FileSystem Path FileManager OpenFile(Full-Path-With-Archives) CreateFile(Full-Path-Without-Archives) CreateTempFile() DeleteFile() AccessDirectory(Full-Path) AccessInstallDirectory() const AccessSettingsDirectory() AccessSaveGameDirectory() AccessTempDirectory() CreateDirectory(Full-Path) CreateTempDirectory() DeleteDirectory() RegisterArchiveReader(Archive-Extension, Archive-Reader)