// Darkflame Universe // Copyright 2025 #ifndef SD0_H #define SD0_H #include #include // Sd0 is comprised of multiple zlib compressed buffers stored in a row. // The format starts with a SD0 header (see SD0_HEADER) followed by the size of a zlib buffer, and then the zlib buffer itself. // This repeats until end of file class Sd0 { public: using BinaryBuffer = std::vector; static inline const char* SD0_HEADER = "sd0\x01\xff"; /** * @brief Max size of an inflated sd0 zlib chunk */ static constexpr inline size_t MAX_UNCOMPRESSED_CHUNK_SIZE = 1024 * 256; // Read the input buffer into an internal chunk stream to be used later Sd0(std::istream& buffer); // Uncompresses the entire Sd0 buffer and returns it as a string [[nodiscard]] std::string GetAsStringUncompressed() const; // Gets the Sd0 buffer as a stream in its raw compressed form [[nodiscard]] std::stringstream GetAsStream() const; // Gets the Sd0 buffer as a vector in its raw compressed form [[nodiscard]] const std::vector& GetAsVector() const; // Compress data into a Sd0 buffer void FromData(const uint8_t* data, size_t bufferSize); private: std::vector m_Chunks{}; }; #endif //!SD0_H