Mercurial > hg > openttd
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