Mercurial > hg > Game > Cerium
view Renderer/Engine/TextureHash.cc @ 725:3a97fdd53a8e draft
Light data load fix (general load routine)
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 19 Dec 2009 15:02:43 +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; } }