Mercurial > hg > Members > kono > Cerium
view TaskManager/Test/test_render/TextureHash.cpp @ 199:eb20274baa7c
add SceneGraph(ieshoot), add SystemSceneGraph(Camera)
author | gongo@gendarme.cr.ie.u-ryukyu.ac.jp |
---|---|
date | Mon, 26 Jan 2009 14:02:45 +0900 |
parents | fc314f28b66e |
children | 51ffd144f62c |
line wrap: on
line source
#include <string.h> #include <stdlib.h> #include "TextureHash.h" 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 hash = hash_function(key); for (int i = 0; ; i++) { if (table[hash].tx_id == -1) { table[hash].key = (char*)key; table[hash].tx_id = id_count++; return -1; } else if (strcmp(key, table[hash].key) == 0 && table[hash].tx_id != -1){ return table[hash].tx_id; } hash = ((37*hash)^(11*i)) % TABLE_SIZE; } }