I’ve been playing with optimizations for an instance of
Ada.Containers.Hashed_Sets for the Advent of Code Day 9 puzzle.
RM A.18.1 The Package Containers says:
type Hash_Type is mod implementation-defined;
With the Implementation advice:
Hash_Type'Modulusshould be at least
The annotated RM expands upon this:
This is not a requirement so that these types can be declared properly on machines with native sizes that are not 32 bits. For instance, a 24-bit target could use
In GNAT’s a-contai.ads, the definition is simply:
type Hash_Type is mod 2**32;
Would it make sense to use
System.Max_Binary_Modulus instead, so that 64-bit systems can benefit from a larger hash space?
type Hash_Type is mod System.Max_Binary_Modulus;
If we want to retain the minimum 32-bit size, a conditional could be added:
type Hash_Type is mod (if System.Max_Binary_Modulus >= 32 then System.Max_Binary_Modulus else 32);