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;
    }
}