]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
refactor: Only include zstd.h in ZstdCompressor.cpp
authorJoel Rosdahl <joel@rosdahl.net>
Thu, 29 Jul 2021 06:31:32 +0000 (08:31 +0200)
committerJoel Rosdahl <joel@rosdahl.net>
Thu, 29 Jul 2021 06:31:32 +0000 (08:31 +0200)
This avoids exposing zstd internals to those including
compression/ZstdCompressor.h.

src/compression/ZstdCompressor.cpp
src/compression/ZstdCompressor.hpp

index 8ff737983e853ff9bc64475a62368ed8cfb32a6c..fffefd1e8bb909bb856cc9794f8f3e33d37c5bbc 100644 (file)
 
 #include <core/exceptions.hpp>
 
+#include <zstd.h>
+
 #include <algorithm>
 
 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<ZSTD_inBuffer_s>()),
+    m_zstd_out(std::make_unique<ZSTD_outBuffer_s>())
 {
   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");
index a5e10ea5af893ac46dcfd34958df5378b64d2847..3a1c18e5e7232f535a2c1d3f18f28de0bbd90c12 100644 (file)
 
 #include <NonCopyable.hpp>
 
-#include <zstd.h>
-
 #include <cstdint>
+#include <memory>
+
+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<ZSTD_inBuffer_s> m_zstd_in;
+  std::unique_ptr<ZSTD_outBuffer_s> m_zstd_out;
   int8_t m_compression_level;
 };