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'Modulus
should be at least 2**32
.
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 2**24
for Hash_Type'Modulus
.
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);
1 post - 1 participant
Read full topic