(root)/
glib-2.79.0/
girepository/
cmph/
fnv_hash.c
       1  #include "fnv_hash.h"
       2  #include <stdlib.h>
       3  
       4  fnv_state_t *fnv_state_new()
       5  {
       6  	fnv_state_t *state = (fnv_state_t *)malloc(sizeof(fnv_state_t));
       7  	state->hashfunc = CMPH_HASH_FNV;
       8  	return state;
       9  }
      10  
      11  void fnv_state_destroy(fnv_state_t *state)
      12  {
      13  	free(state);
      14  }
      15  
      16  cmph_uint32 fnv_hash(fnv_state_t *state, const char *k, cmph_uint32 keylen)
      17  {
      18  	const unsigned char *bp = (const unsigned char *)k;	
      19  	const unsigned char *be = bp + keylen;	
      20  	static unsigned int hval = 0;	
      21  
      22  	while (bp < be) 
      23  	{
      24  		
      25  		//hval *= 0x01000193; good for non-gcc compiler
      26  		hval += (hval << 1) + (hval << 4) + (hval << 7) + (hval << 8) + (hval << 24); //good for gcc
      27  
      28  		hval ^= *bp++;
      29  	}
      30  	return hval;
      31  }
      32  
      33  
      34  void fnv_state_dump(fnv_state_t *state, char **buf, cmph_uint32 *buflen)
      35  {
      36  	*buf = NULL;
      37  	*buflen = 0;
      38  	return;
      39  }
      40  
      41  fnv_state_t * fnv_state_copy(fnv_state_t *src_state)
      42  {
      43  	fnv_state_t *dest_state = (fnv_state_t *)malloc(sizeof(fnv_state_t));
      44  	dest_state->hashfunc = src_state->hashfunc;
      45  	return dest_state;
      46  }
      47  
      48  fnv_state_t *fnv_state_load(const char *buf, cmph_uint32 buflen)
      49  {
      50  	fnv_state_t *state = (fnv_state_t *)malloc(sizeof(fnv_state_t));
      51  	state->hashfunc = CMPH_HASH_FNV;
      52  	return state;
      53  }