| 53 | explicit ZSTDDecompressor(DCtxPtr stream) : stream_(std::move(stream)) {} |
| 54 | |
| 55 | Result<DecompressResult> Decompress(int64_t input_len, const uint8_t* input, |
| 56 | int64_t output_len, uint8_t* output) override { |
| 57 | ZSTD_inBuffer in_buf; |
| 58 | ZSTD_outBuffer out_buf; |
| 59 | |
| 60 | in_buf.src = input; |
| 61 | in_buf.size = static_cast<size_t>(input_len); |
| 62 | in_buf.pos = 0; |
| 63 | out_buf.dst = output; |
| 64 | out_buf.size = static_cast<size_t>(output_len); |
| 65 | out_buf.pos = 0; |
| 66 | |
| 67 | size_t ret; |
| 68 | ret = ZSTD_decompressStream(stream_.get(), &out_buf, &in_buf); |
| 69 | if (ZSTD_isError(ret)) { |
| 70 | return ZSTDError(ret, "ZSTD decompress failed: "); |
| 71 | } |
| 72 | finished_ = (ret == 0); |
| 73 | return DecompressResult{static_cast<int64_t>(in_buf.pos), |
| 74 | static_cast<int64_t>(out_buf.pos), |
| 75 | in_buf.pos == 0 && out_buf.pos == 0}; |
| 76 | } |
| 77 | |
| 78 | Status Reset() override { |
| 79 | finished_ = false; |