bool ZSTDStreamCodec::doCompressStream( ByteRange& input, MutableByteRange& output, StreamCodec::FlushOp flushOp) { if (needReset_) { resetCCtx(); needReset_ = false; } ZSTD_inBuffer in = {input.data(), input.size(), 0}; ZSTD_outBuffer out = {output.data(), output.size(), 0}; SCOPE_EXIT { input.uncheckedAdvance(in.pos); output.uncheckedAdvance(out.pos); }; size_t const rc = zstdThrowIfError(ZSTD_compressStream2( cctx_.get(), &out, &in, zstdTranslateFlush(flushOp))); switch (flushOp) { case StreamCodec::FlushOp::NONE: return false; case StreamCodec::FlushOp::FLUSH: case StreamCodec::FlushOp::END: return rc == 0; default: throw std::invalid_argument("ZSTD: invalid FlushOp"); } }
bool ZSTDStreamCodec::doUncompressStream( ByteRange& input, MutableByteRange& output, StreamCodec::FlushOp) { if (needReset_) { resetDCtx(); needReset_ = false; } ZSTD_inBuffer in = {input.data(), input.size(), 0}; ZSTD_outBuffer out = {output.data(), output.size(), 0}; SCOPE_EXIT { input.uncheckedAdvance(in.pos); output.uncheckedAdvance(out.pos); }; size_t const rc = zstdThrowIfError(ZSTD_decompressStream(dctx_.get(), &out, &in)); return rc == 0; }