From de4220bcad6c528a5562c1f7c5f1565bcaad37d6 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Wed, 10 Oct 2012 21:33:36 -0400 Subject: [PATCH] Added stringcache_iscached(). --- mojoshader_common.c | 24 +++++++++++++++++++++--- mojoshader_internal.h | 1 + 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/mojoshader_common.c b/mojoshader_common.c index 54d172fa..ba0ff09d 100644 --- a/mojoshader_common.c +++ b/mojoshader_common.c @@ -328,13 +328,16 @@ struct StringCache void *d; }; + const char *stringcache(StringCache *cache, const char *str) { return stringcache_len(cache, str, strlen(str)); } // stringcache -const char *stringcache_len(StringCache *cache, const char *str, - const unsigned int len) +static const char *stringcache_len_internal(StringCache *cache, + const char *str, + const unsigned int len, + const int addmissing) { const uint8 hash = hash_string(str, len) & (cache->table_size-1); StringBucket *bucket = cache->hashtable[hash]; @@ -358,7 +361,11 @@ const char *stringcache_len(StringCache *cache, const char *str, bucket = bucket->next; } // while - // no match, add to the table. + // no match! + if (!addmissing) + return NULL; + + // add to the table. bucket = (StringBucket *) cache->m(sizeof (StringBucket), cache->d); if (bucket == NULL) return NULL; @@ -373,8 +380,19 @@ const char *stringcache_len(StringCache *cache, const char *str, bucket->next = cache->hashtable[hash]; cache->hashtable[hash] = bucket; return bucket->string; +} // stringcache_len_internal + +const char *stringcache_len(StringCache *cache, const char *str, + const unsigned int len) +{ + return stringcache_len_internal(cache, str, len, 1); } // stringcache_len +int stringcache_iscached(StringCache *cache, const char *str) +{ + return (stringcache_len_internal(cache, str, strlen(str), 0) != NULL); +} // stringcache_iscached + const char *stringcache_fmt(StringCache *cache, const char *fmt, ...) { char buf[128]; // use the stack if reasonable. diff --git a/mojoshader_internal.h b/mojoshader_internal.h index 536d16d2..315a6869 100644 --- a/mojoshader_internal.h +++ b/mojoshader_internal.h @@ -217,6 +217,7 @@ const char *stringcache(StringCache *cache, const char *str); const char *stringcache_len(StringCache *cache, const char *str, const unsigned int len); const char *stringcache_fmt(StringCache *cache, const char *fmt, ...); +int stringcache_iscached(StringCache *cache, const char *str); void stringcache_destroy(StringCache *cache);