Skip to content

Add std::hash specializations for Date, Time, DateTime#278

Draft
Ozaq wants to merge 1 commit intodevelopfrom
fix/ECKIT-561
Draft

Add std::hash specializations for Date, Time, DateTime#278
Ozaq wants to merge 1 commit intodevelopfrom
fix/ECKIT-561

Conversation

@Ozaq
Copy link
Copy Markdown
Member

@Ozaq Ozaq commented Feb 26, 2026

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:

  • All authors agree to the Contributor License Agreement.
  • The code follows the project's coding standards.
  • I have performed self-review and added comments where needed.
  • I have added or updated tests to verify that my changes are effective and functional.
  • I have run all existing tests and confirmed they pass.

🌦️ >> Documentation << 🌦️
https://sites.ecmwf.int/docs/dev-section/eckit/pull-requests/PR-278

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 <noreply@anthropic.com>
@codecov-commenter
Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 66.41%. Comparing base (9daf037) to head (c0f85c9).

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.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants