(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.
authorDarkvater
Sun, 18 Feb 2007 22:37:33 +0000
changeset 6073 0fb2bb966428
parent 6072 2eb3e6ecba20
child 6074 5d7d0c753d49
(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.
src/newgrf_config.cpp
src/newgrf_config.h
--- a/src/newgrf_config.cpp	Sun Feb 18 22:07:08 2007 +0000
+++ b/src/newgrf_config.cpp	Sun Feb 18 22:37:33 2007 +0000
@@ -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	Sun Feb 18 22:07:08 2007 +0000
+++ b/src/newgrf_config.h	Sun Feb 18 22:37:33 2007 +0000
@@ -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);