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

Reply via email to