max_compressed_length
def max_compressed_length(n: Int) -> Int Upper bound on the compressed size of an n-byte input — matches the C++ reference's MaxCompressedLength(n) = 32 + n + n/6.
snappy.rawSnappy raw block format: a leading varint giving the uncompressed length, followed by a stream of literal / copy elements. See https://github.com/google/snappy/blob/main/format_description.txt.
Compression is a single-pass greedy LZ77 matcher: a flat hash table maps
the multiplicative hash of each 4-byte window (same constant the C++
reference uses, 0x1e35a7bd) to the most recent position with that hash,
and any 4-byte match found there is greedily extended and emitted as a
copy. This is the reference's "fast" strategy (no lazy matching, no hash
chaining) — it trades some ratio for a simple, branch-light inner loop.
max_compressed_lengthdef max_compressed_length(n: Int) -> Int Upper bound on the compressed size of an n-byte input — matches the C++ reference's MaxCompressedLength(n) = 32 + n + n/6.
uncompressed_lengthdef uncompressed_length(data: Span[UInt8]) -> Int Decode the leading varint (the decompressed size) without decompressing the rest of data.
compressdef compress(data: Span[UInt8]) -> List[UInt8] Compress data into a Snappy raw block.
decompress_intodef decompress_into[origin: MutOrigin, //](data: Span[UInt8], dst: Span[UInt8, origin]) -> Int Decompress the raw Snappy block data into dst, which must be at least uncompressed_length(data) bytes. Returns the number of bytes written. Raises on any structural corruption.
Literals and non-overlapping copies move 16 bytes at a time. Both are
allowed to write past the end of the element they are copying, because
the write always lands inside the part of dst the block has already
been checked to fit in; the bytes written past the element are
overwritten by whatever comes next. Only the last few bytes of the output,
where that slack runs out, take the byte-at-a-time path.
decompressdef decompress(data: Span[UInt8]) -> List[UInt8] Decompress a Snappy raw block into a freshly allocated List[UInt8].
validatedef validate(data: Span[UInt8]) -> Bool Best-effort check: does data parse as a well-formed raw Snappy block?