88#include < vector>
99
1010#include " databento/ireadable.hpp"
11+ #include " databento/iwritable.hpp"
12+ #include " databento/log.hpp"
1113
1214namespace databento {
1315namespace detail {
14- class ZstdStream : public IReadable {
16+ class ZstdDecodeStream : public IReadable {
1517 public:
16- explicit ZstdStream (std::unique_ptr<IReadable> input);
17- ZstdStream (std::unique_ptr<IReadable> input,
18- std::vector<std::uint8_t >&& in_buffer);
18+ explicit ZstdDecodeStream (std::unique_ptr<IReadable> input);
19+ ZstdDecodeStream (std::unique_ptr<IReadable> input,
20+ std::vector<std::uint8_t >&& in_buffer);
1921
2022 // Read exactly `length` bytes into `buffer`.
2123 void ReadExact (std::uint8_t * buffer, std::size_t length) override ;
2224 // Read at most `length` bytes. Returns the number of bytes read. Will only
2325 // return 0 if the end of the stream is reached.
24- size_t ReadSome (std::uint8_t * buffer, std::size_t max_length) override ;
26+ std:: size_t ReadSome (std::uint8_t * buffer, std::size_t max_length) override ;
2527
2628 private:
2729 std::unique_ptr<IReadable> input_;
@@ -30,5 +32,27 @@ class ZstdStream : public IReadable {
3032 std::vector<std::uint8_t > in_buffer_;
3133 ZSTD_inBuffer z_in_buffer_;
3234};
35+
36+ class ZstdCompressStream : public IWritable {
37+ public:
38+ explicit ZstdCompressStream (IWritable* output);
39+ ZstdCompressStream (ILogReceiver* log_receiver, IWritable* output);
40+ ZstdCompressStream (const ZstdCompressStream&) = delete ;
41+ ZstdCompressStream& operator =(const ZstdCompressStream&) = delete ;
42+ ZstdCompressStream (ZstdCompressStream&&) = delete ;
43+ ZstdCompressStream& operator =(ZstdCompressStream&&) = delete ;
44+ ~ZstdCompressStream () override ;
45+
46+ void WriteAll (const std::uint8_t * buffer, std::size_t length) override ;
47+
48+ private:
49+ ILogReceiver* log_receiver_;
50+ IWritable* output_;
51+ std::unique_ptr<ZSTD_CStream, std::size_t (*)(ZSTD_CStream*)> z_cstream_;
52+ std::vector<std::uint8_t > in_buffer_;
53+ ZSTD_inBuffer z_in_buffer_;
54+ std::size_t in_size_;
55+ std::vector<std::uint8_t > out_buffer_;
56+ };
3357} // namespace detail
3458} // namespace databento
0 commit comments