Mercurial > hg > Game > Cerium
view Renderer/Engine/TextureHash.cc @ 591:65e52fd2c2e2 draft
send linda not work...
author | kazz@kazzone.st.ie.u-ryukyu.ac.jp |
---|---|
date | Sun, 01 Nov 2009 06:14:52 +0900 |
parents | 3bc98f6d31ff |
children | 20f09564c586 |
line wrap: on
line source
#include <string.h> #include <stdlib.h> #include "TextureHash.h" static int id_count; TextureHash::TextureHash(void) { table = (hashtable*)malloc(sizeof(hashtable)*TABLE_SIZE); for (int i = 0; i < TABLE_SIZE; i++) { table[i].tx_id = -1; table[i].key = NULL; } } TextureHash::~TextureHash(void) { free(table); } int TextureHash::hash_function(const char *key) { //float value = 0.0; int value = 0; for (int i = 0; key[i]; i++) { value += key[i]*(i+1)*17+1; } return value%TABLE_SIZE; } int TextureHash::hash_regist(const char* key, int &id) { int hash = hash_function(key); for (int i = 0; ; i++) { if (table[hash].tx_id == -1) { table[hash].key = (char*)key; id = id_count++; return 0; } else if (strcmp(key, table[hash].key) == 0 && table[hash].tx_id != -1){ id = table[hash].tx_id; return 1; } hash = ((37*hash)^(11*i)) % TABLE_SIZE; } }