Mercurial > hg > openttd
changeset 6073:caaa0c66aa8f draft
(svn r8806) -Codechange (r7582): Remove a duplicate append of static GRF's when loading the game and hide the intrinsics of adding elements to the GRFConfig list by using an AppendToGRFConfigList function.
author | Darkvater <Darkvater@openttd.org> |
---|---|
date | Sun, 18 Feb 2007 22:37:33 +0000 |
parents | b41ccd85b982 |
children | 10757792febf |
files | src/newgrf_config.cpp src/newgrf_config.h |
diffstat | 2 files changed, 16 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -115,7 +115,7 @@ /** Copy a GRF Config list * @param dst pointer to destination list - * @param srt pointer to source list values + * @param src pointer to source list values * @return pointer to the last value added to the destination list */ GRFConfig **CopyGRFConfigList(GRFConfig **dst, const GRFConfig *src) { @@ -179,6 +179,17 @@ RemoveDuplicatesFromGRFConfigList(*dst); } +/** Appends an element to a list of GRFs + * @param dst the head of the list to add to + * @param el the element that is being added (as a copy) */ +void AppendToGRFConfigList(GRFConfig **dst, const GRFConfig *el) +{ + GRFConfig **tail = dst; + while (*tail != NULL) tail = &(*tail)->next; + CopyGRFConfigList(tail, el); + RemoveDuplicatesFromGRFConfigList(*dst); +} + /* Reset the current GRF Config to either blank or newgame settings */ void ResetGRFConfig(bool defaults) @@ -454,23 +465,14 @@ static void Load_NGRF(void) { - GRFConfig *first = NULL; - GRFConfig **last = &first; - + GRFConfig *c = CallocT<GRFConfig>(1); while (SlIterateArray() != -1) { - GRFConfig *c = CallocT<GRFConfig>(1); SlObject(c, _grfconfig_desc); - - /* Append our configuration to the list */ - *last = c; - last = &c->next; + AppendToGRFConfigList(&_grfconfig, c); } + free(c); /* Append static NewGRF configuration */ - CopyGRFConfigList(last, _grfconfig_static); - - ClearGRFConfigList(&_grfconfig); - _grfconfig = first; AppendStaticGRFConfigs(&_grfconfig); }
--- a/src/newgrf_config.h +++ b/src/newgrf_config.h @@ -49,6 +49,7 @@ GRFConfig *GetGRFConfig(uint32 grfid); GRFConfig **CopyGRFConfigList(GRFConfig **dst, const GRFConfig *src); void AppendStaticGRFConfigs(GRFConfig **dst); +void AppendToGRFConfigList(GRFConfig **dst, const GRFConfig *el); void ClearGRFConfig(GRFConfig **config); void ClearGRFConfigList(GRFConfig **config); void ResetGRFConfig(bool defaults);