Pietro, thanks. It looks good, and it passes my local testing.
> -----Original Message-----
> From: Pietro Monteiro <[email protected]>
> Sent: Monday, May 25, 2026 21:01
> To: [email protected]
> Cc: Pietro Monteiro <[email protected]>; Robert Dubner
> <[email protected]>; James K . Lowden <[email protected]>
> Subject: [PATCH 3/3] libgcobol: Add hash function for enum
cbl_enconding_t
>
> GCC versions before 6.1 don't support std::hash for enum types. Add a
> hash function for enum cbl_enconding_t based in the underlying type.
> Use it for the unordered_map where cbl_enconding_t is the key type.
> Also add a typedef to make it easier to use the long type with
templates.
>
> libgcobol/ChangeLog:
>
> * charmaps.cc (__gg__get_charmap): Use cbl_encoding_charmap_map.
> (typedef cbl_encoding_charmap_map): New.
> * encodings.h (struct cbl_encoding_t_hash): New.
>
> Signed-off-by: Pietro Monteiro <[email protected]>
> ---
> libgcobol/charmaps.cc | 8 +++++---
> libgcobol/encodings.h | 11 +++++++++++
> 2 files changed, 16 insertions(+), 3 deletions(-)
>
> diff --git a/libgcobol/charmaps.cc b/libgcobol/charmaps.cc
> index 8aa42e3234e..3e22c669a86 100644
> --- a/libgcobol/charmaps.cc
> +++ b/libgcobol/charmaps.cc
> @@ -1726,8 +1726,11 @@ __gg__miconverter( cbl_encoding_t from,
> return retval;
> }
>
> +typedef std::unordered_map<cbl_encoding_t, charmap_t *,
cbl_encoding_t_hash>
> +cbl_encoding_charmap_map;
> +
> static
> -std::unordered_map<cbl_encoding_t, charmap_t *>map_of_encodings;
> +cbl_encoding_charmap_map map_of_encodings;
>
> charmap_t *
> __gg__get_charmap(cbl_encoding_t encoding)
> @@ -1749,8 +1752,7 @@ __gg__get_charmap(cbl_encoding_t encoding)
> }
>
> charmap_t *retval;
> - std::unordered_map<cbl_encoding_t, charmap_t *>::const_iterator it
> - = map_of_encodings.find(encoding);
> + cbl_encoding_charmap_map::const_iterator it =
> map_of_encodings.find(encoding);
> if( it != map_of_encodings.end() )
> {
> retval = it->second;
> diff --git a/libgcobol/encodings.h b/libgcobol/encodings.h
> index 3a7e40cef83..cf46d83981a 100644
> --- a/libgcobol/encodings.h
> +++ b/libgcobol/encodings.h
> @@ -31,6 +31,8 @@
> #ifndef _ENCODINGS_H_
> #define _ENCODINGS_H_
>
> +#include <type_traits>
> +
> enum cbl_encoding_t {
> no_encoding_e,
> custom_encoding_e,
> @@ -1212,4 +1214,13 @@ struct encodings_t {
> char name[32];
> };
>
> +struct cbl_encoding_t_hash {
> + using hashed_type = std::underlying_type<cbl_encoding_t>::type;
> + size_t
> + operator()(cbl_encoding_t e) const noexcept
> + {
> + return std::hash<hashed_type>{}(static_cast<hashed_type>(e));
> + }
> +};
> +
> #endif
> --
> 2.43.0