Mercurial > hg > Game > Cerium
changeset 1114:ee481853d5dd draft
SgidHash remove.
author | tkaito |
---|---|
date | Tue, 18 Jan 2011 19:53:01 +0900 |
parents | d2d44bc55fa1 |
children | e954ec5d9b96 |
files | Renderer/Engine/SceneGraphRoot.cc Renderer/Engine/SgidHash.cc Renderer/Engine/SgidHash.h Renderer/Engine/TextureHash.cc Renderer/Engine/TextureHash.h |
diffstat | 5 files changed, 45 insertions(+), 102 deletions(-) [+] |
line wrap: on
line diff
--- a/Renderer/Engine/SceneGraphRoot.cc Tue Jan 18 18:53:23 2011 +0900 +++ b/Renderer/Engine/SceneGraphRoot.cc Tue Jan 18 19:53:01 2011 +0900 @@ -7,14 +7,14 @@ #include "TextureHash.h" #include "texture.h" #include "Application.h" -#include "SgidHash.h" static int cnt = 0; static const int SGLIST_LENGTH = 138; static int sg_src_size = SGLIST_LENGTH ; static int sg_src_id = -1; static SceneGraphPtr *sg_src; -static SgidHash sgid_hash; + +static TextureHash sgid_hash; SceneGraphRoot *sgroot; @@ -114,7 +114,7 @@ } sg->sgid = ++sg_src_id; sg_src[sg->sgid] = sg; - sgid_hash.hash_regist((const char*)sg->name, sg->sgid); + sgid_hash.sg_hash_regist((const char*)sg->name, sg->sgid); }
--- a/Renderer/Engine/SgidHash.cc Tue Jan 18 18:53:23 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,72 +0,0 @@ -#include <stdio.h> -#include <string.h> -#include <stdlib.h> -#include "SgidHash.h" - -SgidHash::SgidHash(void) -{ - int size = sizeof(sg_hashtable)*SGID_NUM; -#if defined(__SPU__) || ! defined(HAS_POSIX_MEMALIGN) - table = (sg_hashtable*)malloc(size); -#else - posix_memalign((void**)&table, alignment, size); -#endif - for (int i = 0; i < SGID_NUM; i++) { - table[i].sg_id = -1; - table[i].key = NULL; - } -} - -SgidHash::~SgidHash(void) -{ - free(table); -} - -int -SgidHash::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%SGID_NUM; -} - -int -SgidHash::hash_regist(const char* key, int &id) -{ - int hash = hash_function(key); - - for (int i = 0; ; i++) { - if (table[hash].sg_id == -1) { - table[hash].key = (char*)key; - table[hash].sg_id = id; - return 0; - - } else if (strcmp(key, table[hash].key) == 0 - && table[hash].sg_id != -1){ - return table[hash].sg_id; - } - hash = ((37*hash)^(11*i)) % SGID_NUM; - } -} - -int -SgidHash::get_sgid(const char* key) -{ - - int hash = hash_function(key); - for (int i = 0; ; i++) { - if (table[hash].sg_id == -1) { - return -1; - - } else if (strcmp(key, table[hash].key) == 0 - && table[hash].sg_id != -1){ - return table[hash].sg_id; - } - hash = ((37*hash)^(11*i)) % SGID_NUM; - } -}
--- a/Renderer/Engine/SgidHash.h Tue Jan 18 18:53:23 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -#ifndef INCLUDED_SGID_HASH -#define INCLUDED_SGID_HASH - -const int SGID_NUM = 1000; - -struct sg_hashtable{ - int sg_id; - char* key; -}; - -class SgidHash{ -public: - sg_hashtable *table; - - SgidHash(void); - ~SgidHash(void); - int hash_function(const char* image_name); - int hash_regist(const char* image_name, int &sg_id); - int get_sgid(const char* key); - void remove(int id) { table[id].sg_id = -1; } -}; - -#endif
--- a/Renderer/Engine/TextureHash.cc Tue Jan 18 18:53:23 2011 +0900 +++ b/Renderer/Engine/TextureHash.cc Tue Jan 18 19:53:01 2011 +0900 @@ -7,6 +7,7 @@ TextureHash::TextureHash(void) { int size = sizeof(hashtable)*TABLE_SIZE; + #if defined(__SPU__) || ! defined(HAS_POSIX_MEMALIGN) table = (hashtable*)malloc(size); #else @@ -39,19 +40,54 @@ 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; + } +} + +int +TextureHash::sg_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++; + table[hash].tx_id = id; return 0; } else if (strcmp(key, table[hash].key) == 0 && table[hash].tx_id != -1){ - id = table[hash].tx_id; - return 1; + return table[hash].tx_id; } hash = ((37*hash)^(11*i)) % TABLE_SIZE; } } + +int +TextureHash::get_sgid(const char* key) +{ + + int hash = hash_function(key); + for (int i = 0; ; i++) { + if (table[hash].tx_id == -1) { + 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; + } +}
--- a/Renderer/Engine/TextureHash.h Tue Jan 18 18:53:23 2011 +0900 +++ b/Renderer/Engine/TextureHash.h Tue Jan 18 19:53:01 2011 +0900 @@ -1,7 +1,7 @@ #ifndef INCLUDED_TEXTURE_HASH #define INCLUDED_TEXTURE_HASH -const int TABLE_SIZE = 8192; +const int TABLE_SIZE = 9192; //8192 + 1000 struct hashtable{ int tx_id; @@ -16,6 +16,8 @@ ~TextureHash(void); int hash_function(const char* image_name); int hash_regist(const char* image_name, int &tx_id); + int sg_hash_regist(const char* image_name, int &tx_id); + int get_sgid(const char* key); void remove(int id) { table[id].tx_id = -1; } };