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