changeset 14434:f5a4807b200c draft

(svn r18991) -Codechange: simplify memory management of DownloadSelectedContent
author rubidium <rubidium@openttd.org>
date Wed, 03 Feb 2010 17:12:19 +0000
parents 4b436d838659
children b7d4b37e625b
files src/network/network_content.cpp src/network/network_content.h
diffstat 2 files changed, 11 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/network/network_content.cpp
+++ b/src/network/network_content.cpp
@@ -253,21 +253,24 @@
 
 void ClientNetworkContentSocketHandler::DownloadSelectedContent(uint &files, uint &bytes)
 {
-	files = 0;
 	bytes = 0;
 
-	/** Make the list of items to download */
-	ContentID *ids = MallocT<ContentID>(infos.Length());
-	for (ContentIterator iter = infos.Begin(); iter != infos.End(); iter++) {
+	ContentIDList content;
+	for (ContentIterator iter = this->infos.Begin(); iter != this->infos.End(); iter++) {
 		const ContentInfo *ci = *iter;
 		if (!ci->IsSelected() || ci->state == ContentInfo::ALREADY_HERE) continue;
 
-		ids[files++] = ci->id;
+		*content.Append() = ci->id;
 		bytes += ci->filesize;
 	}
 
+	files = content.Length();
+
+	/* If there's nothing to download, do nothing. */
+	if (files == 0) return;
+
 	uint count = files;
-	ContentID *content_ids = ids;
+	ContentID *content_ids = content.Begin();
 	this->Connect();
 
 	while (count > 0) {
@@ -288,8 +291,6 @@
 		count -= p_count;
 		content_ids += p_count;
 	}
-
-	free(ids);
 }
 
 /**
--- a/src/network/network_content.h
+++ b/src/network/network_content.h
@@ -65,8 +65,9 @@
  */
 class ClientNetworkContentSocketHandler : public NetworkContentSocketHandler, ContentCallback {
 protected:
+	typedef SmallVector<ContentID, 4> ContentIDList;
 	SmallVector<ContentCallback *, 2> callbacks; ///< Callbacks to notify "the world"
-	SmallVector<ContentID, 4> requested;         ///< ContentIDs we already requested (so we don't do it again)
+	ContentIDList requested;                     ///< ContentIDs we already requested (so we don't do it again)
 	ContentVector infos;                         ///< All content info we received
 
 	FILE *curFile;        ///< Currently downloaded file