format: ZFP decoder (filter 32013), pure Rust, read-only
A port of the zfp 1.0.1 decoder and of H5Z-ZFP 1.1.1's decompression path behind a new `zfp` feature (in `plugin-filters`): every mode (fixed rate, precision, accuracy, reversible, expert), int32, int64, float and double, 1-4 dimensional fields with partial blocks, and headers written big-endian (values byte-swapped as H5Z-ZFP does). H5Z-ZFP keeps the zfp header in cd_values (version word, then the magic/metadata/mode bit stream); each chunk is the bare stream. The decoder reproduces libzfp bit for bit: integer arithmetic wraps as libzfp's, block exponents scale by exact powers of two, and the mode goes through zfp_stream_mode as H5Z-ZFP hands it to zfp. A stream that ends early is an error (libzfp reads past its buffer), as is a field whose size is not the chunk's; the output is allocated only once the stream holds a bit per block. Tests: header/mode unit tests, and a counting-allocator fuzz of random headers (expert parameters at their edges) and streams. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
@@ -78,8 +78,11 @@ bzip2 = ["dep:bzip2", "std"]
|
||||
blosc = ["lz4_flex", "ruzstd", "snap", "deflate", "std"]
|
||||
# Blosc2 (32026), read-only: frames, B2ND arrays, and the Blosc codecs above.
|
||||
blosc2 = ["blosc"]
|
||||
# ZFP (32013, H5Z-ZFP), read-only: every mode, for int32, int64, float and
|
||||
# double fields of 1 to 4 dimensions.
|
||||
zfp = []
|
||||
# Every plugin filter above.
|
||||
plugin-filters = ["lzf", "bitshuffle", "bzip2", "blosc", "blosc2"]
|
||||
plugin-filters = ["lzf", "bitshuffle", "bzip2", "blosc", "blosc2", "zfp"]
|
||||
|
||||
[[bench]]
|
||||
name = "parallel_decompress_bench"
|
||||
|
||||
Reference in New Issue
Block a user