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
