Skip to content

feat: bind ZSTD_decompressionMargin (in-place decompression)#34

Merged
dfa1 merged 1 commit into
mainfrom
feat/decompression-margin
Jun 27, 2026
Merged

feat: bind ZSTD_decompressionMargin (in-place decompression)#34
dfa1 merged 1 commit into
mainfrom
feat/decompression-margin

Conversation

@dfa1

@dfa1 dfa1 commented Jun 27, 2026

Copy link
Copy Markdown
Owner

What

ZstdFrame.decompressionMargin(byte[] / MemorySegment) — the extra room needed to decompress a frame in place, where the output buffer overlaps the compressed input at its tail. Binds ZSTD_decompressionMargin.

Usage: size the output buffer at decompressedSize + margin, place the compressed frame(s) at its end, then decompress from that tail slice into the start — no second allocation. Supports multi-frame input. On-theme with the zero-copy story.

Tests

ZstdFrameTest.DecompressionMargin — positive margin, segment parity, garbage rejected, and the key one: an actual in-place round-trip through ZstdDecompressCtx.decompress(dst, src) (single-pass ZSTD_decompressDCtx) recovering the original from one overlapping buffer. 236 tests green, checkstyle + javadoc clean.

Note

Did not bind ZSTD_decodingBufferSize_min — it only serves the buffer-less streaming API (ZSTD_decompressContinue), which isn't bound, so it's useless on its own.

Docs

docs/supported.md: memory sizing 8 → 9/14. CHANGELOG.md updated.

🤖 Generated with Claude Code

Adds ZstdFrame.decompressionMargin(byte[] / MemorySegment): the extra room
needed to decompress a frame in place, where the output buffer overlaps the
compressed input at its tail. Size the output buffer at decompressedSize +
margin, place the frame at its end, and decompress from that tail slice into the
start — no second allocation. Supports multi-frame input. Binds
ZSTD_decompressionMargin.

The test proves it end to end: it actually decompresses in place through the
single-pass ZstdDecompressCtx.decompress(dst, src) and recovers the original
from one overlapping buffer.

docs/supported.md: memory sizing 8 -> 9/14. CHANGELOG updated.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@dfa1 dfa1 merged commit 101cecb into main Jun 27, 2026
1 check passed
@dfa1 dfa1 deleted the feat/decompression-margin branch June 27, 2026 16:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant