diff options
author | rubidium <rubidium@openttd.org> | 2010-02-03 17:12:19 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2010-02-03 17:12:19 +0000 |
commit | 589aee0cee8fd72ff07fd2dc6043443e07097212 (patch) | |
tree | e68d327d0059b1c0c6636ef3bc56dfc9a263d601 | |
parent | f1458df1caed833434303de9ae59f864404e4d07 (diff) | |
download | openttd-589aee0cee8fd72ff07fd2dc6043443e07097212.tar.xz |
(svn r18991) -Codechange: simplify memory management of DownloadSelectedContent
-rw-r--r-- | src/network/network_content.cpp | 17 | ||||
-rw-r--r-- | src/network/network_content.h | 3 |
2 files changed, 11 insertions, 9 deletions
diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 2346ec3f2..64acd86e0 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -253,21 +253,24 @@ void ClientNetworkContentSocketHandler::RequestContentList(ContentVector *cv, bo 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 @@ void ClientNetworkContentSocketHandler::DownloadSelectedContent(uint &files, uin count -= p_count; content_ids += p_count; } - - free(ids); } /** diff --git a/src/network/network_content.h b/src/network/network_content.h index ad9ab3783..ea2df4e39 100644 --- a/src/network/network_content.h +++ b/src/network/network_content.h @@ -65,8 +65,9 @@ struct ContentCallback { */ 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 |