30 lines
823 B
C
30 lines
823 B
C
#include "pairmap.h"
|
|
#include <stdlib.h>
|
|
|
|
unsigned long pairmap_hash_func(const void* key){
|
|
const pairmap_key* new_key = key;
|
|
unsigned int hash = 0;
|
|
hash |= ((new_key->x & 0xffff) << 8) + (new_key->y & 0xffff);
|
|
return hash;
|
|
}
|
|
int pairmap_cmp_func(const void* a, const void* b){
|
|
const pairmap_key* new_key_a = a;
|
|
const pairmap_key* new_key_b = b;
|
|
return (new_key_a->x == new_key_b->x) && (new_key_a->y == new_key_b->y);
|
|
}
|
|
void* pairmap_copy_func(const void* key){
|
|
const pairmap_key* copy_from = key;
|
|
pairmap_key* new_key = malloc(sizeof(*new_key));
|
|
if(new_key){
|
|
new_key->x = copy_from->x;
|
|
new_key->y = copy_from->y;
|
|
}
|
|
return new_key;
|
|
}
|
|
void pairmap_init_ht(ht* ht){
|
|
ht_init(ht);
|
|
ht->hash_func = pairmap_hash_func;
|
|
ht->cmp_func = pairmap_cmp_func;
|
|
ht->copy_func = pairmap_copy_func;
|
|
}
|