liblex/src/pairmap.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;
}