From 1206f6ae07f52b0f46b0965ce84fe7c65a0eb7c2 Mon Sep 17 00:00:00 2001 From: TimeServ Date: Thu, 29 Jan 2009 02:55:08 +0000 Subject: [PATCH] removed const block/default string logic because it doesn't realloc safely and doesn't really save much, substituting code should catch the common cases anyway git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@3105 fc73d0e0-1445-4013-8a0c-d673dee63da5 --- engine/common/cvar.c | 75 ++++++++++++-------------------------- engine/common/cvar.h | 11 ------ engine/common/zone.c | 87 -------------------------------------------- engine/common/zone.h | 17 --------- 4 files changed, 24 insertions(+), 166 deletions(-) diff --git a/engine/common/cvar.c b/engine/common/cvar.c index 0eac2b3d6..20bd2866a 100644 --- a/engine/common/cvar.c +++ b/engine/common/cvar.c @@ -24,58 +24,33 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. cvar_group_t *cvar_groups; //cvar_t *cvar_vars; -char *cvar_null_string = ""; +static char *cvar_null_string = ""; +static char *cvar_zero_string = "0"; -cvar_const_cache_t cc_cache; - -// cvar string cache functions - -// CCC_AddString: adds a string into the cvar CB, and creates one -// if non-existant -char *CCC_AddString(char *s) +char *Cvar_DefaultAlloc(char *str) { - int size = strlen(s) + 1; - - if (!cc_cache.cb) - cc_cache.cb = CB_Malloc(CC_CACHE_SIZE, CC_CACHE_STEP); - - return CB_Copy (cc_cache.cb, s, size); -} - -// CCC_CheckAndAddString: checks against the CCC table, updates table, -// and either adds or returns cached string -char *CCC_CheckAndAddString(char *s) -{ - int i; char *c; + + if (str[0] == '\0') + return cvar_null_string; + if (str[0] == '0' && str[1] == '\0') + return cvar_zero_string; - for (i = 0; i < CC_CACHE_ENTRIES; i++) - { - if (cc_cache.cached[i] && !strcmp(s, cc_cache.cached[i])) - { - // move string to top, pushing others down - c = cc_cache.cached[i]; - if (i != 0) - { - Q_memcpy(cc_cache.cached + 1, - cc_cache.cached, - sizeof(char*) * i); - cc_cache.cached[0] = c; - } + c = (char *)Z_Malloc(strlen(str)+1); + Q_strcpy(c, str); - return c; - } - } - - // not in cache, so add it to table - // move current cached strings down - Q_memcpy(cc_cache.cached + 1, - cc_cache.cached, - sizeof(char*) * (CC_CACHE_ENTRIES - 1)); - - return (cc_cache.cached[0] = CCC_AddString(s)); + return c; } +void Cvar_DefaultFree(char *str) +{ + if (str == cvar_null_string) + return; + else if (str == cvar_zero_string) + return; + else + Z_Free(str); +} /* ============ @@ -893,7 +868,7 @@ void Cvar_Free(cvar_t *tbf) } unlinked: Z_Free(tbf->string); -// Z_Free(tbf->defaultstr); + Cvar_DefaultFree(tbf->defaultstr); if (tbf->latched_string) Z_Free(tbf->latched_string); Z_Free(tbf); @@ -906,6 +881,7 @@ Cvar_RegisterVariable Adds a freestanding variable to the variable list. ============ */ + qboolean Cvar_Register (cvar_t *variable, const char *groupname) { cvar_t *old; @@ -935,7 +911,7 @@ qboolean Cvar_Register (cvar_t *variable, const char *groupname) variable->string = (char*)Z_Malloc (1); //cheat prevention - engine set default is the one that stays. - variable->defaultstr = CCC_CheckAndAddString(value); //give it it's default (for server controlled vars and things) + variable->defaultstr = Cvar_DefaultAlloc(value); //give it it's default (for server controlled vars and things) // set it through the function to be consistant if (old->latched_string) @@ -967,7 +943,7 @@ qboolean Cvar_Register (cvar_t *variable, const char *groupname) variable->string = (char*)Z_Malloc (1); - variable->defaultstr = CCC_CheckAndAddString(value); //give it it's default (for server controlled vars and things) + variable->defaultstr = Cvar_DefaultAlloc(value); //give it it's default (for server controlled vars and things) // set it through the function to be consistant Cvar_SetCore (variable, value, true); @@ -1236,7 +1212,4 @@ void Cvar_Shutdown(void) cvar_groups = grp->next; Z_Free(grp); } - - if (cc_cache.cb) - CB_Free(cc_cache.cb); } diff --git a/engine/common/cvar.h b/engine/common/cvar.h index f584909c7..0da724c61 100644 --- a/engine/common/cvar.h +++ b/engine/common/cvar.h @@ -180,14 +180,3 @@ void Cvar_Shutdown(void); void Cvar_ForceCheatVars(qboolean semicheats, qboolean absolutecheats); //locks/unlocks cheat cvars depending on weather we are allowed them. //extern cvar_t *cvar_vars; - -// cvar const cache, used for removing fairly common default cvar values -#define CC_CACHE_ENTRIES 8 - -#define CC_CACHE_SIZE 2048 -#define CC_CACHE_STEP 2048 - -typedef struct cvar_const_cache_s { - char *cached[CC_CACHE_ENTRIES]; - const_block_t *cb; -} cvar_const_cache_t; diff --git a/engine/common/zone.c b/engine/common/zone.c index a46c729ad..f9111b061 100644 --- a/engine/common/zone.c +++ b/engine/common/zone.c @@ -2121,93 +2121,6 @@ void *Cache_Alloc (cache_user_t *c, int size, char *name) #endif //============================================================================ -// Constant block functions - -// CB_Malloc: creates a usable const_block -const_block_t *CB_Malloc (int size, int step) -{ - // alloc new const block - const_block_t *cb = Z_Malloc(sizeof(const_block_t)); - - // init cb members - cb->block = BZ_Malloc(size); - cb->point = cb->block; - cb->curleft = size; - cb->cursize = size; - cb->memstep = step; - - return cb; -} - -// CB_Slice: slices a chunk of memory off of the const block, and -// reallocs if necessary -char *CB_Slice (const_block_t *cb, int size) -{ - char *c; - - while (size > cb->curleft) - { - cb->block = BZ_Realloc(cb->block, cb->cursize + cb->memstep); - cb->point = cb->block + (cb->cursize - cb->curleft); - - cb->cursize += cb->memstep; - cb->curleft += cb->memstep; - } - - c = cb->point; - cb->point += size; - cb->curleft -= size; - - return c; -} - -// CB_Copy: copies a stream of bytes into a const block, returns -// pointer of copied string -char *CB_Copy (const_block_t *cb, char *data, int size) -{ - char *c; - - c = CB_Slice(cb, size); - Q_memcpy(c, data, size); - - return c; -} - -// CB_Free: frees a const block -void CB_Free (const_block_t *cb) -{ - BZ_Free(cb->block); - Z_Free(cb); -} - -#if 0 -// CB_Reset: resets a const block to size -void CB_Reset (const_block_t *cb, int size) -{ - if (cb->cursize != size) - { - cb->block = BZ_Realloc(cb->block, size); - cb->cursize = size; - } - - cb->point = cb->block; - cb->curleft = cb->cursize; -} - -// CB_Trim: trims a const block to minimal size -void CB_Trim (const_block_t *cb) -{ - if (cb->curleft > 0) - { - cb->cursize -= cb->curleft; - cb->block = BZ_Realloc(cb->block, cb->cursize); - cb->point = cb->block + cb->cursize; - } - - cb->curleft = 0; -} -#endif - /* ======================== Memory_Init diff --git a/engine/common/zone.h b/engine/common/zone.h index 7887ae20c..7f394c096 100644 --- a/engine/common/zone.h +++ b/engine/common/zone.h @@ -149,20 +149,3 @@ void *Cache_Alloc (cache_user_t *c, int size, char *name); void Cache_Report (void); -// Constant Block memory functions -// - Constant blocks are used for loads of strings/etc that -// are allocated once and change very little during the rest -// of run time, such as cvar names and default values -typedef struct const_block_s { - int curleft; // current bytes left in block - int cursize; // current maximum size of block - int memstep; // bytes to step per realloc - char *point; // current block point - char *block; // memory block -} const_block_t; - -const_block_t *CB_Malloc (int size, int step); -//char *CB_Slice (const_block_t *cb, int size); -char *CB_Copy (const_block_t *cb, char *data, int size); -void CB_Free (const_block_t *cb); -