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

summaryrefslogtreecommitdiff
path: root/source/core/StarZSTDCompression.hpp
blob: 9c296c12ca629a5cb05284722238ac11aef70bf5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#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;
  ByteArray m_output;
};

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;
  ByteArray m_output;
};

inline ByteArray DecompressionStream::decompress(ByteArray const& in) {
  return decompress(in.ptr(), in.size());
}

}