| // Copyright 2025 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef TOOLS_ANDROID_DEVIL_UTIL_ZST_COMPRESSOR_H_ |
| #define TOOLS_ANDROID_DEVIL_UTIL_ZST_COMPRESSOR_H_ |
| |
| #include <ostream> |
| |
| // Forward declarations. |
| struct ZSTD_inBuffer_s; |
| typedef ZSTD_inBuffer_s ZSTD_inBuffer; |
| struct ZSTD_outBuffer_s; |
| typedef ZSTD_outBuffer_s ZSTD_outBuffer; |
| struct ZSTD_CCtx_s; |
| typedef ZSTD_CCtx_s ZSTD_CCtx; |
| |
| class ZstCompressor { |
| public: |
| // The user is responsible for closing the output_stream if necessary. |
| explicit ZstCompressor(std::ostream& output_stream, int compression_level); |
| ~ZstCompressor(); |
| |
| // Get the size of input buffer (which will be passed to CompressStreaming()) |
| // that is recommended by zstd. It is OK to use a different input buffer size. |
| size_t GetRecommendedInputBufferSize(); |
| |
| struct UncompressedContent { |
| char* buffer; |
| size_t size; |
| }; |
| |
| // Compress the input and write the result to output_stream. Repeatedly call |
| // this function until you have passed everything that need to be compressed. |
| // If this is the last chunk of input that needs to be compressed, set |
| // last_chunk to true, otherwise set last_chunk to false. |
| // The user is responsible for freeing the input.buffer if needed. |
| void CompressStreaming(UncompressedContent input, bool last_chunk); |
| |
| private: |
| // The output stream where we are writing the compressed content to. |
| std::ostream& output_stream_; |
| size_t input_buffer_recommended_size_; |
| // A struct containing the input buffer, the size of the contents of input |
| // buffer, and the position where the zstd library function stopped reading. |
| // The position field is updated by the zstd library functions. |
| ZSTD_inBuffer* input_struct_; |
| // A buffer where the compressed content is placed into. |
| char* output_buffer_; |
| // The size of the output buffer. Indicates how large the buffer is. |
| size_t output_buffer_size_; |
| // A struct containing the output buffer, the size of the output buffer, |
| // and the position where the zstd library function stopped writing. |
| // The position field is updated by the zstd library functions. |
| ZSTD_outBuffer* output_struct_; |
| // A context object needed by the zstd library functions. |
| ZSTD_CCtx* ctx_; |
| }; |
| |
| #endif // TOOLS_ANDROID_DEVIL_UTIL_ZST_COMPRESSOR_H_ |