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