|
10 | 10 | #include "dn-vector.h"
|
11 | 11 | #include "dn-simdhash.h"
|
12 | 12 |
|
| 13 | +typedef struct { |
| 14 | + int i; |
| 15 | + float f; |
| 16 | +} instance_data_t; |
| 17 | + |
| 18 | +static inline uint8_t |
| 19 | +key_comparer (instance_data_t data, size_t lhs, size_t rhs) { |
| 20 | + return ((data.f == 4.20f) || (lhs == rhs)); |
| 21 | +} |
| 22 | + |
13 | 23 | #define DN_SIMDHASH_T dn_simdhash_size_t_size_t
|
14 | 24 | #define DN_SIMDHASH_KEY_T size_t
|
15 | 25 | #define DN_SIMDHASH_VALUE_T size_t
|
16 |
| -#define DN_SIMDHASH_KEY_HASHER(hash, key) (uint32_t)(key & 0xFFFFFFFFu) |
17 |
| -#define DN_SIMDHASH_KEY_EQUALS(hash, lhs, rhs) (lhs == rhs) |
| 26 | +#define DN_SIMDHASH_KEY_HASHER(data, key) (uint32_t)(key & 0xFFFFFFFFu) |
| 27 | +#define DN_SIMDHASH_KEY_EQUALS key_comparer |
| 28 | +#define DN_SIMDHASH_INSTANCE_DATA_T instance_data_t |
| 29 | +#define DN_SIMDHASH_ON_REMOVE(data, key, value) ; // printf("remove [%zd, %zd], f==%f\n", key, value, data.f) |
| 30 | +#define DN_SIMDHASH_ON_REPLACE(data, key, old_value, new_value) ; // printf("replace [%zd, %zd] with [%zd, %zd] i==%i\n", key, old_value, key, new_value, data.i) |
18 | 31 |
|
19 | 32 | #include "dn-simdhash-specialization.h"
|
20 | 33 |
|
@@ -56,6 +69,9 @@ void foreach_callback (size_t key, size_t value, void * user_data) {
|
56 | 69 | int main () {
|
57 | 70 | const int c = 10240;
|
58 | 71 | dn_simdhash_size_t_size_t_t *test = dn_simdhash_size_t_size_t_new(0, NULL);
|
| 72 | + dn_simdhash_instance_data(instance_data_t, test).f = 3.14f; |
| 73 | + dn_simdhash_instance_data(instance_data_t, test).i = 42; |
| 74 | + |
59 | 75 | dn_vector_t *keys = dn_vector_alloc(sizeof(DN_SIMDHASH_KEY_T)),
|
60 | 76 | *values = dn_vector_alloc(sizeof(DN_SIMDHASH_VALUE_T));
|
61 | 77 | // Ensure consistency between runs
|
|
0 commit comments