From 10b9d4d3bedf3253fa39dbe875d0527e567d5983 Mon Sep 17 00:00:00 2001 From: Joel Rosdahl Date: Thu, 29 Jul 2021 08:31:32 +0200 Subject: [PATCH] refactor: Only include zstd.h in ZstdCompressor.cpp This avoids exposing zstd internals to those including compression/ZstdCompressor.h. --- src/compression/ZstdCompressor.cpp | 34 +++++++++++++++++------------- src/compression/ZstdCompressor.hpp | 13 +++++++----- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/compression/ZstdCompressor.cpp b/src/compression/ZstdCompressor.cpp index 8ff737983..fffefd1e8 100644 --- a/src/compression/ZstdCompressor.cpp +++ b/src/compression/ZstdCompressor.cpp @@ -23,13 +23,17 @@ #include +#include + #include namespace compression { ZstdCompressor::ZstdCompressor(FILE* const stream, int8_t compression_level) : m_stream(stream), - m_zstd_stream(ZSTD_createCStream()) + m_zstd_stream(ZSTD_createCStream()), + m_zstd_in(std::make_unique()), + m_zstd_out(std::make_unique()) { if (compression_level == 0) { compression_level = default_compression_level; @@ -75,21 +79,21 @@ ZstdCompressor::actual_compression_level() const void ZstdCompressor::write(const void* const data, const size_t count) { - m_zstd_in.src = data; - m_zstd_in.size = count; - m_zstd_in.pos = 0; + m_zstd_in->src = data; + m_zstd_in->size = count; + m_zstd_in->pos = 0; int flush = data ? 0 : 1; size_t ret; - while (m_zstd_in.pos < m_zstd_in.size) { + while (m_zstd_in->pos < m_zstd_in->size) { uint8_t buffer[CCACHE_READ_BUFFER_SIZE]; - m_zstd_out.dst = buffer; - m_zstd_out.size = sizeof(buffer); - m_zstd_out.pos = 0; - ret = ZSTD_compressStream(m_zstd_stream, &m_zstd_out, &m_zstd_in); + m_zstd_out->dst = buffer; + m_zstd_out->size = sizeof(buffer); + m_zstd_out->pos = 0; + ret = ZSTD_compressStream(m_zstd_stream, m_zstd_out.get(), m_zstd_in.get()); ASSERT(!(ZSTD_isError(ret))); - const size_t compressed_bytes = m_zstd_out.pos; + const size_t compressed_bytes = m_zstd_out->pos; if (fwrite(buffer, 1, compressed_bytes, m_stream) != compressed_bytes || ferror(m_stream)) { throw core::Error("failed to write to zstd output stream "); @@ -98,11 +102,11 @@ ZstdCompressor::write(const void* const data, const size_t count) ret = flush; while (ret > 0) { uint8_t buffer[CCACHE_READ_BUFFER_SIZE]; - m_zstd_out.dst = buffer; - m_zstd_out.size = sizeof(buffer); - m_zstd_out.pos = 0; - ret = ZSTD_endStream(m_zstd_stream, &m_zstd_out); - const size_t compressed_bytes = m_zstd_out.pos; + m_zstd_out->dst = buffer; + m_zstd_out->size = sizeof(buffer); + m_zstd_out->pos = 0; + ret = ZSTD_endStream(m_zstd_stream, m_zstd_out.get()); + const size_t compressed_bytes = m_zstd_out->pos; if (fwrite(buffer, 1, compressed_bytes, m_stream) != compressed_bytes || ferror(m_stream)) { throw core::Error("failed to write to zstd output stream"); diff --git a/src/compression/ZstdCompressor.hpp b/src/compression/ZstdCompressor.hpp index a5e10ea5a..3a1c18e5e 100644 --- a/src/compression/ZstdCompressor.hpp +++ b/src/compression/ZstdCompressor.hpp @@ -22,9 +22,12 @@ #include -#include - #include +#include + +struct ZSTD_CCtx_s; +struct ZSTD_inBuffer_s; +struct ZSTD_outBuffer_s; namespace compression { @@ -47,9 +50,9 @@ public: private: FILE* m_stream; - ZSTD_CStream* m_zstd_stream; - ZSTD_inBuffer m_zstd_in; - ZSTD_outBuffer m_zstd_out; + ZSTD_CCtx_s* m_zstd_stream; + std::unique_ptr m_zstd_in; + std::unique_ptr m_zstd_out; int8_t m_compression_level; }; -- 2.47.2