Releases: vargalabs/h5cpp
h5cpp-v.1.10.10
v1.10.10 — Changelog
132 commits since last release (e5e00d3), across 24 issues.
New Features
Filter pipeline — full compression/transform stack (#160)
- Added LZ4, Zstd, libdeflate (deflate), Shuffle, Fletcher32, SZIP (Rice), nbit, and scaleoffset filters
- Vendored libdeflate v1.25.0, zstd v1.5.7, szip v2.2.0 as self-contained third-party sources
- Unified filter_scratch_bound across all filters; multi-filter read pipeline fixed for cross-compat with externally-created HDF5 files
- h5::gzip{N} now backed by libdeflate; built-in HDF5 deflate (filter id 1) is no longer required at runtime
Type synthesis API (#87)
- h5::create_type() for arithmetic, text, array-like, and reflected compound types
- Introduced storage traits and compiler metadata contract for the type engine
- Dataset create / read / write paths refactored to consume the new type engine (#89)
Single-header amalgamation (#161)
- h5cpp/all now ships as a pre-built single-header amalgam (h5cpp-amalgam.hpp)
- Full round-trip verified against the test suite on all three platforms
Attribute deletion (#131)
- h5::adelete(ds, name) — delete an attribute by name, with matching error type and unit tests
Bug Fixes
MSVC overload-resolution crash (#163) — Windows was silently calling the wrong h5::write overload
- MSVC C++ partial-ordering bug: the inner ::h5::write(ds, mem_space, file_space, dxpl, ptr) at H5Dwrite.hpp:119 was ambiguous between the low-level
inner overload (line 21) and the variadic ref-forwarder (line 181, matching via T=sp_t). MSVC silently resolved to line 181, running gather() on a
property-list handle → segfault. - Fix: inlined the H5Dwrite C-API call at line 119, matching the H5Dread.hpp:73 idiom.
- Secondary: (ds, T*, count) shape was also ambiguous between line 70 (pointer overload) and line 181 (T=T*). Fixed with
std::enable_if_t<!std::is_pointer_v<std::decay_t>> SFINAE guard on both ref-forwarder overloads (lines 181, 330).
HDF5 static-destruction race (#163) — Windows crash on process exit
- dapl, default_dapl, lcpl, default_lcpl namespace-scope singletons were destroyed before HDF5's own atexit handler ran, corrupting handle state.
- Fix: heap-leaked all four singletons so they outlive the HDF5 shutdown sequence.
Append and buffered-transfer mechanics (#91)
- Fixed four bugs in h5::append and buffered transfer: incorrect flush trigger, off-by-one in buffer size, missing reset on re-open, and type mismatch
on realloc.
std::vector misclassification (#116)
- vector was routed through the linear-value-dataset path; corrected to the packed-bit path.
linalg adapter completeness (#121)
- is_contiguous and rank specializations were missing or wrong for Blaze, dlib, itpp, uBLAS, Blitz++; all corrected.
MSVC narrowing warnings (#112)
- Eliminated C4244 / C4267 warnings across the codebase; _CRT_SECURE_NO_WARNINGS applied to CSV example.
macOS Clang exhaustiveness warnings (#159)
- Added missing switch cases for H5Tget_class and H5Pget_layout enum values.
Windows file-handle semantics in tests (#163)
- std::filesystem::remove() on an open HDF5 file throws on Windows. Fixed by wrapping all h5cpp RAII handle lifetimes in an explicit inner scope in
test_attributes_io.cpp and test_optimized_io.cpp.
Platform / CI
Full Windows MSVC support (#112, #163)
- Windows added to the CI matrix; 58/58 CTest cases pass under MSVC on windows-latest
- HDF5 1.10.10 built from source and cached across runs
- zlib 1.3.1 built from source (replaced flaky vcpkg ZLIBConfig.cmake) to give HDF5 a consistent deflate back-end
- Windows-specific regression probes retained as permanent tests: win_stack_probe, win_hdf5_lifecycle_probe (8 modes), win_h5dwrite_path_probe (8
modes), win_dapl_probe (9 modes)
macOS CI (#111)
- macOS 15 / apple-clang added to the matrix with Homebrew HDF5 + LLVM
Code-coverage reporting (#137)
- Codecov job added (ubuntu-24.04 / gcc-14, lcov); coverage badge wired to README
CI Node.js 24 upgrade (#138)
- actions/checkout, actions/upload-artifact, actions/download-artifact, actions-gh-pages all bumped to versions that support the Node 24 runner
runtime
C++ Standard Compliance (#162, #122, #123, #83, #93)
- Removed all C++11 compatibility shims; minimum standard is now C++17 throughout
- Replaced deprecated std::is_pod with is_standard_layout_v && is_trivial_v
- NULL → nullptr across the codebase
- std::apply adopted where manual pack-expansion was used
- Macro hygiene: removed redefinition hazards and corrected latent syntax errors in H5Pall.hpp / H5Pdcpl.hpp
- All headers made self-sufficient (missing #includes added; C-style system headers replaced with C++ counterparts)
- Include guards replaced with #pragma once across all headers (#131)
- _t transformer aliases folded into type-trait modernisation (#123)
Build / CMake (#82, #157, #158, #132)
- Root CMakeLists.txt modernised to C++17 package-export pattern; H5CPP_BUILD_TESTS option wired into CI
- Armadillo upgraded to v15.2.6 (header-only); Eigen3 and Blaze trimmed to headers only
- dlib v19.24 allowed to configure under CMake 4.x
- HDF5 HL component requirement removed (was unused; broke Windows vcpkg builds)
- Examples CMakeLists.txt HDF5 discovery fixed; example filter dependencies propagated correctly
- Unified Dockerfile for the complete example suite; Docker environment for MPI examples added
Tests (#145, #114, #117, #132)
- Example-derived I/O round-trip test suite added (Categories A–F), covering: packet table, CSV, optimised offset write, attributes, linker/multi-TU
verification (#145) - Cartesian-product I/O test machinery with extended storage_representation oracle (#114)
- h5::test::fill random data generator added to the test support layer (#117)
- Dataset I/O round-trip tests (#132)
Workflow / Docs (#129, #127, #96, #118)
- Build-matrix CI badges added to README
- Docs nav and content bugs fixed; stl.md rewritten
- Branch governance and PR flow documented
- Commit-message convention documented
v1.10.4-6
sync with debian