Add std::hash specializations for Date, Time, DateTime#278
Add std::hash specializations for Date, Time, DateTime#278
Conversation
Allow Date, Time, and DateTime to be used as keys in std::unordered_map and std::unordered_set by providing std::hash specializations in each type's header. Date hashes via julian(), Time via hhmmss() (avoiding floating-point hash pitfalls on the underlying double), and DateTime combines both using a new hash_combine utility. Requires ecbuild fix for sg.pl to handle template <> syntax. Fixes: ECKIT-561 Co-Authored-By: Claude Opus 4.6 <[email protected]>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## develop #278 +/- ##
===========================================
+ Coverage 66.38% 66.41% +0.02%
===========================================
Files 1127 1128 +1
Lines 57792 57829 +37
Branches 4408 4408
===========================================
+ Hits 38366 38406 +40
+ Misses 19426 19423 -3 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
|
ecmwf/ecbuild#134 has been merged and up for next release. |
The ecbuild version number needs to be bumped and eckit needs to update min version. Without the modifications to sg.pl this change won't be able to pe processed by ecbuild. In the CI this would work (always uses develop) but break on dev machines / ATOS / elsewhere unexpectedly |
Description
Allow Date, Time, and DateTime to be used as keys in std::unordered_map and std::unordered_set by providing std::hash specializations in each type's header.
Date hashes via julian(), Time via hhmmss() (avoiding floating-point hash pitfalls on the underlying double), and DateTime combines both using a new hash_combine utility.
Requires ecbuild fix for sg.pl to handle template <> syntax.
Fixes: ECKIT-561
NOTE: blocked by a bug in ecbuild/sg.pl ecmwf/ecbuild#134
Contributor Declaration
By opening this pull request, I affirm the following:
🌦️ >> Documentation << 🌦️
https://sites.ecmwf.int/docs/dev-section/eckit/pull-requests/PR-278