Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/core/StarZSTDCompression.hpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2024-03-14 21:41:53 +1100
committerKae <80987908+Novaenia@users.noreply.github.com>2024-03-14 21:41:53 +1100
commit662b83ff92cc2316fb962ff1608359f6d705a5f0 (patch)
treed0e7d15887ed14bd252e6e61888710c8bac2200a /source/core/StarZSTDCompression.hpp
parent8164e5ae6fa33c9ec2a14f107585a7cbe7fbf813 (diff)
Initial commit of experimental zstd network compression
currently a bit buggy
Diffstat (limited to 'source/core/StarZSTDCompression.hpp')
-rw-r--r--source/core/StarZSTDCompression.hpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/source/core/StarZSTDCompression.hpp b/source/core/StarZSTDCompression.hpp
new file mode 100644
index 0000000..77719bf
--- /dev/null
+++ b/source/core/StarZSTDCompression.hpp
@@ -0,0 +1,44 @@
+#pragma once
+#include "StarByteArray.hpp"
+#include "StarDataStreamDevices.hpp"
+
+typedef struct ZSTD_CCtx_s ZSTD_CCtx;
+typedef struct ZSTD_DCtx_s ZSTD_DCtx;
+typedef ZSTD_DCtx ZSTD_DStream;
+typedef ZSTD_CCtx ZSTD_CStream;
+
+namespace Star {
+
+class CompressionStream {
+public:
+ CompressionStream();
+ ~CompressionStream();
+
+ ByteArray compress(const char* in, size_t inLen);
+ ByteArray compress(ByteArray const& in);
+
+private:
+ ZSTD_CStream* m_cStream;
+};
+
+inline ByteArray CompressionStream::compress(ByteArray const& in) {
+ return compress(in.ptr(), in.size());
+}
+
+class DecompressionStream {
+public:
+ DecompressionStream();
+ ~DecompressionStream();
+
+ ByteArray decompress(const char* in, size_t inLen);
+ ByteArray decompress(ByteArray const& in);
+
+private:
+ ZSTD_DStream* m_dStream;
+};
+
+inline ByteArray DecompressionStream::decompress(ByteArray const& in) {
+ return decompress(in.ptr(), in.size());
+}
+
+} \ No newline at end of file