Skip to content

Releases: vargalabs/h5cpp

h5cpp-v1.12.6

28 May 12:22

Choose a tag to compare

v1.12.6 — type-system rewire, comprehensive examples, and pinned-HDF5 CI

Highlights

  • The type system is rewired around a unified storage/access surface. storage_representation_t is the single classification, and every read/write/attribute path dispatches through it. Sparse linear algebra (Armadillo / Eigen, CSC layout), C++23 std::mdspan, fixed-length string attribute detection, and reference-handle RAII all slot in as first-class clients of the same machinery.
  • The example tree is now a working specification. Every example self-reports ✔ ok / ✘ failed and ships a README in the canonical style; new demos cover sparse, std::mdspan, handle pretty-printing, and h5::reference_t lifetime. Generated descriptors are checked in alongside struct.h so the suite builds without the h5cpp-compiler tool in the loop.
  • Handles know how to print themselves. h5::cout and operator<< are available for every h5::hid_t<…> handle, with deep formatters for fd_t, ds_t, gr_t, at_t, dcpl_t, fapl_t. ADL-friendly, header-only, no opt-in required.
  • CI is reproducible end-to-end. Every job across Linux, macOS, and Windows builds and caches a pinned HDF5 from source rather than depending on the runner's package manager. The pin lives in three env vars at the top of ci.yml; moving to the 1.14.x series later requires no other change.

Fixes

  • #276 register the Particle struct in the bench-small_object workload so the bench build clears the unregistered-aggregate static assert
  • #274 restore VLEN partial-IO that an earlier storage refactor had silently lost
  • #274 disambiguate the rank-1 specialization in the type-meta layer so multi-dimensional C arrays no longer collide with the partial-ordering rules

Features

  • #274 add Armadillo / Eigen sparse round-trip support with a scipy- / Julia- / 10x-compatible CSC on-disk layout
  • #274 add C++23 std::mdspan round-trip (rank-2 and rank-3, plus buffer-out reads into caller-allocated views)
  • #274 add fixed-length string attribute detection in H5Aread, branching on the on-disk type rather than the C++ type
  • #274 add generic handle pretty-printing via h5::cout / operator<<
  • #274 add rule-of-five RAII to h5::reference_t for HDF5 ≥ 1.12 (H5Rdestroy / H5Rcopy); the pre-1.12 path is preserved
  • #275 add examples/sparse/, examples/mdspan/, examples/cout/, examples/reference/

Architecture / Refactoring

  • #274 unify the I/O dispatch through storage_representation_t and per-container mappers (H5M*)
  • #274 rename storage-representation enumerators (array_element, array_dataset) for a structurally cleaner taxonomy
  • #275 rework every existing example to the self-checking ✔ ok pattern and add READMEs in a consistent style
  • #272 centralise the CI HDF5 source-build in a composite action and convert all examples/*/Makefile to CMake
  • #273 track the type-engine renames across the test suite and gate ROS3 session_token on the v2 FAPL flag rather than the version macro

Compatibility Notes

  • The public synchronous h5::read / h5::write surface remains the compatibility anchor; sparse and std::mdspan arrive as overloads.
  • Sparse on-disk layout is the CSC group convention; Eigen sparse is ColMajor-only at present (RowMajor static_asserts out).
  • std::mdspan support requires __cpp_lib_mdspan >= 202207L and degrades to a graceful skip on older standard libraries.
  • HDF5 reference handles (h5::reference_t) are RAII-managed on HDF5 ≥ 1.12; pre-1.12 builds keep the legacy hdset_reg_ref_t path unchanged.

Full Changelog: v1.12.5...v1.12.6

As always, report issues at https://github.com/vargalabs/h5cpp/issues.

h5cpp-v1.12.5

25 May 14:42

Choose a tag to compare

v1.12.5 — packaging remediation and FAPL-scoped parallel compression

Highlights

  • Packaging release lane repaired. v1.12.5 follows up the v1.12.4 packaging recovery with workflow remediation across #245, #246, #247, and #248,
    plus README cleanup in #249.
  • Parallel compression moves to FAPL scope. h5::threads{N} now configures a FAPL-scoped worker pool for parallel filter compression, making
    executor ownership explicit at the file-access layer.
  • Async execution groundwork is in place. Async-mode descriptors and the FAPL executor scaffold establish the architectural path for future non-
    blocking HDF5 operations without forcing behavior changes into the synchronous API.
  • The type engine is simpler and more structural. Legacy compiler-emitted metadata hooks were removed, and plain aggregate handling now flows
    through access_traits_t and is_transport_contiguous.

Fixes

  • #249 remediate the v1.12.5 packaging workflow after #245, #246, #247, and #248
  • #249 clean up README release/documentation surface

Features

  • #251 add FAPL-scoped worker pool with h5::threads{N} for parallel filter compression
  • #253 add async-mode descriptors and FAPL executor scaffold

Architecture / Refactoring

  • #255 remove compiler_meta_t and field_descriptor_t from the type engine
  • #257 add access_traits_t and is_transport_contiguous support for plain aggregates

Compatibility Notes

  • The public synchronous read/write surface remains the compatibility anchor.
  • Parallel compression is configured through file-access properties with h5::threads{N}.
  • The async descriptor/executor work is foundation-level scaffolding for future async behavior.

Full Changelog: v1.12.4...v1.12.5

As always, report issues at https://github.com/vargalabs/h5cpp/issues.

h5cpp-v1.12.4

18 May 01:16

Choose a tag to compare

v1.12.4 — packaging fix-up and back-compat restoration

Highlights

  • Packaging works again. The v1.12.3 release pipeline failed on all three platforms;
    v1.12.4 produces Linux .deb (amd64/arm64), RHEL .rpm (x86_64/aarch64)
  • Threaded filter pipeline is wired up. h5::pt_t pt(ds, h5::filter::threads{N})
    enables parallel compression workers for packet-table append paths. Default behavior
    unchanged — strictly opt-in.
  • HDF5 ≥ 1.10.7 high_throughput crash fixed. Add copy callback to the DAPL pipeline
    property. The path was previously a no-op on modern HDF5 due to this latent bug.

Fixes

  • #236 Linux DEB thirdparty libs, macOS HDF5 discovery, Windows HDF5 download URL
  • #237 ASan/UBSan CI badges now display their name instead of "ok"
  • #239 restore chunk{N} | dcpl operator chaining (regressed in v1.12 modernization)
  • #239 restore h5::reset(pt_t&) for packet-table reuse
  • #239 libdeflate now opt-in via H5CPP_HAS_LIBDEFLATE=1; default falls back to zlib —
    fixes link errors for drop-in header consumers
  • #242 fix DAPL pipeline double-free / SegFault on HDF5 ≥ 1.10.7 via copy callback
  • #242 gate h5::write/h5::read pipeline path on H5D_CHUNKED layout — prevents
    Windows MSVC crash on non-chunked datasets with the high_throughput flag

Features (completes v1.12 README claims)

  • #241 wire threaded_pipeline_t into pt_t via h5::filter::threads{N}

Documentation

  • #238 redesign README, extract CONTRIBUTING.md, refresh copyright/contributors,
    remove obsolete INSTALL/Makefile/CHANGES/configure/staging-build-matrix/TODO

Acknowledgments

Gerd Heber (advisor, CEO The HDF Group) for the architectural guidance during the
v1.12 modernization cycle.
As always, report issues at github.com/vargalabs/h5cpp/issues.

h5cpp-v1.12.3

16 May 22:31

Choose a tag to compare

v1.12.3 — Changelog
────────────────────────────
Release Date: 2026-05-16
Full Changelog: v1.10.12..v1.12.3(74 commits)

New Features
────────────

  1. HDF5 1.12.2 Ceiling — Now Formally Tested (#234)

The Windows CI leg now builds and tests against HDF5 1.12.2, up from
1.10.10, while Ubuntu 22.04 is restored to the matrix to keep the 1.10
floor covered.

The compatibility surface is unchanged: internal H5_VERSION_GE(1,12,0)
guards continue to bridge V1/V2 reference, datatype, and reclaim APIs, so
one h5cpp build works across HDF5 1.10.x through 1.12.2.

  1. std::valarray I/O Support (#149)

Full read/write support for std::valarray<T>, completing the linalg
mapper set alongside Eigen, Armadillo, Blaze, dlib, xtensor, and uBLAS.

std::valarray is now registered in both has_explicit_decay and
access_traits_t with kind = contiguous, composing with the type engine
introduced in #89.

  1. Iterator-Container Round-Trip + forward_list Append (#232)

h5::write and h5::read now scatter/gather std::list, std::deque,
std::set, std::multiset, std::unordered_set, and
std::unordered_multiset through a staging buffer.

std::forward_list joins as a streaming-only target through h5::append
and h5::view. Its single-link structure makes random read a poor fit, but
append/stream is exactly its natural habitat.

Also fixes a long-standing pt_t double-flush bug: the private flush()
did not reset n = 0, so the destructor could re-flush an already-emitted
partial chunk.

  1. std::complex Support via H5T_COMPLEX (#43)

First-class complex datatype support.

On HDF5 >= 2.0, h5cpp uses the native H5T_COMPLEX path. Older HDF5
versions fall back transparently to a two-field compound representation.

No user-visible API changes: write a std::vector<std::complex<double>>
the same way you write any other contiguous container.

  1. std::float16_t Support (#224)

Adds std::float16_t support, gated on C++23 plus compiler support for
__STDCPP_FLOAT16_T__.

When available, std::float16_t round-trips as the native HDF5
half-precision datatype for both datasets and attributes. Current working
coverage includes gcc-14 and Apple Clang.

  1. Rank-7 Array Support (#115)

The type engine and I/O dispatch path now handle fixed-rank arrays with
dimension counts up to HDF5's H5S_MAX_RANK = 32.

The type-system rank ladder is extended to seven, removing the previous
rank-3 ceiling on std::array<T,N>-shaped storage.

  1. Attribute Type Coverage Expansion (#11)

h5::awrite and h5::aread now accept the full arithmetic scalar set and
common STL containers, including std::vector, std::array, and
std::string.

The attribute path now uses the same dispatch machinery as dataset I/O;
previously it covered only the canonical scalar types.

  1. Threaded Filter Pipeline (#197, #195)

threaded_pipeline_t implements the H5Z filter pipeline on top of a bounded
SPMC/MPSC queue ring built directly into core via H5Qall.hpp.

Producers and consumers communicate without spinning or unbounded growth.
The underlying primitives, including doorbell and stoppable_thread from
#205, preserve a C++17 fallback path so the engine remains available across
the supported compiler matrix.

Foundations & Refactoring
─────────────────────────
9. C++20 as the Project Baseline (#194)

The project, tests, and example harnesses now build at -std=c++20.

The C++17 path remains available through the detail/* abstractions added
in #205, keeping doorbell, stoppable_thread, and the threaded pipeline
buildable on pre-C++20 toolchains for downstream consumers that have not yet
migrated.

  1. Third-Party Layout Normalisation (#226, #222)

Vendored dependencies now follow one layout pattern:

thirdparty/<name>/v<version>/

The upstream license is preserved next to the source. The half-float
modules, including christian-rau and imath, plus fast-cpp-csv-parser are
folded into this scheme.

All third-party license notices are surfaced from the repository root
LICENSE.

Bug Fixes & Reliability
───────────────────────
11. H5Tfloat16.cpp Always Defines main() (#228)

DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN was previously inside the
#if __cplusplus >= 202302L && defined(__STDCPP_FLOAT16_T__) guard.

Any configuration without float16 support — clang on Linux, Apple Clang,
MSVC, gcc-13, and every C++17/20 build — produced a test binary with no
main() and failed at link time.

The macro is now hoisted above the guard. The test binary always links, and
the float16 cases are conditionally compiled inside it.

  1. H5Zpipeline Aligned Allocation Now Portable

The aligned-allocation helpers in H5Zpipeline.hpp guarded the
_aligned_malloc / _aligned_free / <malloc.h> branch on _MSC_VER
instead of _WIN32.

MSVC builds were unaffected because MSVC defines both, but MinGW-on-Windows
fell into the posix_memalign branch and failed to link.

The guards now use _WIN32, so MinGW and clang-cl take the same path as
MSVC. Verified with a cross-compiled smoke test under Wine 11.0.

  1. std::valarray Trait Registration

Companion fix to #149: std::valarray is now registered in
has_explicit_decay and has_explicit_access_traits, matching the
registration performed by every other linalg mapper.

Without these registrations, decay<valarray<T>> had two viable
specialisations — the explicit one and the SFINAE catch-all matching any
type with value_type — while access_traits_t<valarray<T>>::kind
defaulted to unsupported.

That broke the full CI matrix on staging; this fix restores green.

  1. Cross-Platform Build Hardening (#209)

Coordinated fixes for platform and compiler portability:

  • Apple Clang 17/18 lacks <stop_token>; H5Qall.hpp now polyfills when
    __cpp_lib_jthread is unset.
  • MSVC's __cplusplus reporting now requires /Zc:__cplusplus for the
    H5Qall guard.
  • CMAKE_OSX_DEPLOYMENT_TARGET is now set before project().
  • HDF5 >= 1.12 vlen reclaim now uses H5Treclaim instead of the
    deprecated H5Dvlen_reclaim.
  1. H5cout calloc Overflow with Empty Dataspaces (#210)

sp_t operator<< previously called calloc(0, ...) when a dataspace had no
hyperslab selection, triggering overflow checks on some libcs.

Adds an explicit guard for the zero-selection case.

  1. H5Mstl Duplicate impl::data Overloads Removed (#218)

Removed three duplicate overload sets for std::array<T,N> that collided
under certain include orders and produced ambiguous template instantiation
errors.

  1. Armadillo Column-Major Size Reporting (#76)

colmat::size() returned {n_cols, n_rows} instead of {n_rows, n_cols},
transposing every column-major Armadillo write.

The wrapper now matches Armadillo's row/column convention.

  1. pt_t Dataset Reopen with Zero Chunk Cache (#80)

pt_t holds the dataset handle for its lifetime. On long-running append
loops, the chunk cache accumulated and appeared as RSS growth in production.

pt_t now re-opens the dataset with chunk cache size pinned to zero,
returning memory pressure to a flat line.

  1. H5Pall Cleanup (#92)

Removed duplicate chunk / chunk_opts aliases and a dead fapl_vcall
declaration that survived the #170 include-correctness sweep.

Infrastructure & Testing
────────────────────────
20. Unified Packaging Pipeline (#204)

Adds a single .github/workflows/package.yml pipeline producing:

  • .deb-dev
  • .rpm-devel
  • NSIS Windows installer
  • macOS productbuild

This replaces the previous ad-hoc per-platform packaging scripts.

  1. ASan and UBSan CI Jobs (#193)

Adds dedicated sanitizer jobs on ubuntu-24.04 / clang-20 with separate
status badges.

These caught two latent issues during the cycle, #210 and #218, that release
builds had silently tolerated. Sanitizers: still cheaper than archaeology.

  1. .gitignore Hardening (#202)

Coverage artefacts, IDE tooling directories, build-* variant trees, and
agent-state directories are now ignored explicitly.

This prevents accidental commits from local CI experimentation.

Compatibility Notes
───────────────────

  • HDF5 floor: 1.10.x, the version where direct chunk access landed.
  • HDF5 tested ceiling: 1.12.2, gated in CI.
  • C++ standard: C++20 baseline; C++23 enables std::float16_t support.
  • h5cpp-compiler: this release accepts both the legacy register_struct
    emission from h5cpp-compiler <= v1.0.2 and the new
    compiler_meta_t / is_reflected_compound_t emission from the
    unreleased h5cpp-compiler staging branch.

As always, report issues at https://github.com/vargalabs/h5cpp/issues.

h5cpp-v1.10.12

15 May 10:51

Choose a tag to compare

────────────────────────────
Release Date: 2026-05-15
Full Changelog: v1.10.11..v.1.10.12 (34 commits)

New Features
────────────

  1. S3 / ROS3 Virtual File Driver — Cloud-Native HDF5 Reads (#188)
    First-class binding for the HDF5 Read-Only S3 driver. Configure-time detection
    (H5_HAVE_ROS3_VFD), an h5::fapl_ros3 property class covering unauthenticated,
    AWS sigv2, and AWS sigv4 credential modes, a working open example, and a
    complete s3.md usage guide. Replaces the dead fapl_rest_vol / kita alias.
    Open S3-hosted .h5 files directly: h5::open("s3://bucket/key", H5F_ACC_RDONLY,
    h5::fapl_ros3{...}). Doctest suite included; opt-in network smoke test runs
    against the public rhdf5-public bucket.

  2. HDF5 1.12 Reference Compatibility Layer (#179)
    Bridges API changes between HDF5 1.10/1.12 for h5::reference_t. Resolves the
    H5P_DEFAULT macro conflict inside h5::impl::reference and a Windows file-lock
    issue in the reference test. h5cpp now builds and round-trips references
    cleanly against HDF5 ≥ 1.12.

Foundations & Refactoring
─────────────────────────
3. Type Engine Now Drives Dataset I/O (#89)
H5Dwrite (and the chain it forwards into) now dispatches through the new
access_traits_t introduced in #86/#88. Closes the four structural-fallback
gaps identified in review: transport-contiguity detection, decay fallback,
access_traits_t coverage, and structural storage_representation. Adds a text
access kind and explicit decay guards for blitz/xtensor so linalg mappers
compose with the engine without partial-specialisation ambiguity.

  1. Meta:: Bridge for Linalg/STL Mappers (#170 follow-up)
    Post-merge fixes to the #170 include-correctness work in v1.10.11. Adds a
    h5::meta:: bridge over data()/size()/rank/decay/get for xtensor and the
    string-literal/char-array/scalar paths, refactors the codebase to use it,
    and reverts H5Dread to impl::* where the mapper files still rely on the
    classic spelling. Restores symbol resolution for the linalg shims while
    keeping every header self-sufficient.

Documentation & Tooling
───────────────────────
5. Doxygen API Reference deployed to GitHub Pages (#182)
The full h5cpp API reference now ships at the gh-pages /api/ path on every
release-branch merge. Includes a doxy/ infrastructure layer with an ALIASES
file, a cppreference tag file for live cross-links, the doxygen-awesome
theme with an orange/solarized palette and a dark-mode toggle, refreshed
HDF5 links, and a dedicated Doxygen CI job that publishes alongside the
existing badges without clobbering them (keep_files on gh-pages deploy).

  1. AI Skill Knowledge Base (#189)
    Scaffolds an AI skill knowledge base with the core h5cpp I/O patterns so
    coding assistants can ground their suggestions in verified snippets. Ships
    with a verify-skills CI script that catches drift between the skill text
    and the actual API surface.

As always, report issues at github.com/vargalabs/h5cpp/issues.

h5cpp-v1.10.11

14 May 21:38

Choose a tag to compare

h5cpp v1.10.11 Release Notes
────────────────────────────
Release Date: 2026-05-14
Full Changelog: 6f2a140..v1.10.11 (36 commits)

New Features
────────────

  1. C++20 Ranges Streaming View — h5::view(ds) (#181)
    Lazy, composable streaming access to HDF5 datasets via C++20 ranges. Process multi-terabyte datasets without loading them entirely into
    ory.
  2. xtensor I/O Support (#146)
    Full read/write shim for xtensor arrays (v0.25.0) and xtl (v0.7.7). Brings NumPy-like C++ arrays seamlessly into HDF5 workflows.
  3. xtensor-blas Support (#147)
    Compatibility shim for xtensor-blas (v0.23.0) with a working example. Enables BLAS/LAPACK-backed linear algebra directly on HDF5-backed
    nsor data.
  4. Performance Benchmark Suite (#172)
    New MVP benchmark harness covering sequential, chunked/filtered, high-throughput, container, filesystem-ceiling, and small-object I/O pa
    rns. Scales to 1 GB and 10 GB payloads. Set H5CPP_BENCH_CI=1 for quick smoke-test sizing.
    Bug Fixes & Reliability
    ───────────────────────
  5. HDF5 2.0+ Chunked Read Compatibility (#178)
    Fixes H5Dread_chunk2 NULL buf_size error on HDF5 >= 2.0.0. Corrects the parameter type from hsize_t to size_t for standards-compliant ch
    ed reads.
  6. Header Include Correctness Overhaul (#170)
    All core and I/O layer headers are now self-sufficient (no transitive-include dependencies). Added missing direct hdf5.h includes, remov
    dead headers (H5Tconversion, H5Dscatter, H5Pdcpl), fixed infinite recursion in get_test_data, replaced deprecated H5Dvlen_reclaim with H
    eclaim, and repaired const-ref assignment and undeclared dxpl compile errors.
  7. Eigen const_cast Removal (#126)
    Eliminated undefined behavior from const_cast in Eigen data() accessors. Safer, const-correct I/O for Eigen matrices and vectors.
  8. Example & Build Portability (#133)
    Fixed HDF5 include paths on Ubuntu (/usr/include/hdf5/serial/), missing libarmadillo links, ARMADILLO_FOUND/Eigen3_FOUND detection for v
    ored targets, explicit initializer_list template arguments for Clang 17/18 CTAD compliance, and a missing header for std::iota
  9. Warning-Free Builds (#174)
    Eliminated semantic, strncpy, and sign-conversion warnings across core headers, examples, and tests. Cleaner builds on GCC, Clang, and M
    with -Werror-friendly projects.
    Infrastructure & Testing
    ────────────────────────
  10. Test Coverage: 94.13 % (#178)
    Added comprehensive coverage tests for H5Dappend, H5Eall, H5Zpipeline, H5Ialgorithm, H5Pall, H5Rall, H5Sall, H5capi, H5cout, and more.
  11. CI Example Matrix (#133)
    All 55 example binaries now build and execute on every CI matrix entry (Linux, macOS, multiple compilers).
  12. HDF5 Container Matrix (#180)
    Docker-based testing matrix for validating h5cpp against multiple HDF5 versions.
  13. CI Maintenance (#176)
    Bumped GitHub Actions to Node.js 24 compatible versions and suppressed Homebrew noise on macOS 15 runners.
  14. Documentation Fix (#165)
    Corrected README Codecov branch target badge.

As always, report issues at github.com/vargalabs/h5cpp/issues.

h5cpp-v1.10.10

13 May 15:53

Choose a tag to compare

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

11 May 14:18

Choose a tag to compare

sync with debian