I am waiting for Jim Lowden to chime in on the other two.

> -----Original Message-----
> From: Pietro Monteiro <[email protected]>
> Sent: Wednesday, May 27, 2026 11:45
> To: Robert Dubner <[email protected]>; [email protected]
> Cc: James K. Lowden <[email protected]>
> Subject: Re: [PATCH 3/3] libgcobol: Add hash function for enum
cbl_enconding_t
> 
> On Tue, May 26, 2026, at 1:33 PM, Robert Dubner wrote:
> > Pietro, thanks.  It looks good, and it passes my local testing.
> 
> Thanks for the review. Should I push all 3 patches in the series or just
the
> third one?
> 
> Better safe than sorry :)
> pietro
> 
> >> -----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