diff options
author | rubidium42 <rubidium@openttd.org> | 2021-05-30 12:53:42 +0200 |
---|---|---|
committer | rubidium42 <rubidium42@users.noreply.github.com> | 2021-06-10 20:09:44 +0200 |
commit | df181bb641a75e9fae557c683b790cfba961ec5a (patch) | |
tree | 959fbc29c976eb1f24471508f806e48c5bbefe26 /src/network | |
parent | 9c424ab741218238205e8d1f2644a3912fda250a (diff) | |
download | openttd-df181bb641a75e9fae557c683b790cfba961ec5a.tar.xz |
Codechange: [ContentInfo] Use a vector for dependencies instead of custom allocation
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/core/tcp_content.cpp | 6 | ||||
-rw-r--r-- | src/network/core/tcp_content_type.h | 3 | ||||
-rw-r--r-- | src/network/network_content.cpp | 22 | ||||
-rw-r--r-- | src/network/network_content_gui.cpp | 6 |
4 files changed, 16 insertions, 21 deletions
diff --git a/src/network/core/tcp_content.cpp b/src/network/core/tcp_content.cpp index 041e932e4..fb726e2e7 100644 --- a/src/network/core/tcp_content.cpp +++ b/src/network/core/tcp_content.cpp @@ -24,7 +24,7 @@ ContentInfo::ContentInfo() : /* Temporary... will be removed later in the PR. */ type((ContentType)0), id((ContentID)0), filesize(0), filename(""), name(""), version(""), - url(""), description(""), unique_id(0), md5sum(""), dependency_count(0), dependencies(nullptr), + url(""), description(""), unique_id(0), md5sum(""), state((State)0), upgrade(false) { } @@ -32,7 +32,6 @@ ContentInfo::ContentInfo() /** Free everything allocated */ ContentInfo::~ContentInfo() { - free(this->dependencies); } /** @@ -42,9 +41,8 @@ ContentInfo::~ContentInfo() void ContentInfo::TransferFrom(ContentInfo *other) { if (other != this) { - free(this->dependencies); *this = *other; - other->dependencies = nullptr; + other->dependencies.clear(); other->tags.clear(); } } diff --git a/src/network/core/tcp_content_type.h b/src/network/core/tcp_content_type.h index 93367746d..2186997e8 100644 --- a/src/network/core/tcp_content_type.h +++ b/src/network/core/tcp_content_type.h @@ -67,8 +67,7 @@ struct ContentInfo { char description[512]; ///< Description of the content uint32 unique_id; ///< Unique ID; either GRF ID or shortname byte md5sum[16]; ///< The MD5 checksum - uint8 dependency_count; ///< Number of dependencies - ContentID *dependencies; ///< Malloced array of dependencies (unique server side ids) + std::vector<ContentID> dependencies; ///< The dependencies (unique server side ids) StringList tags; ///< Tags associated with the content State state; ///< Whether the content info is selected (for download) bool upgrade; ///< This item is an upgrade diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 27ffee970..37df60877 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -66,9 +66,9 @@ bool ClientNetworkContentSocketHandler::Receive_SERVER_INFO(Packet *p) ci->md5sum[j] = p->Recv_uint8(); } - ci->dependency_count = p->Recv_uint8(); - ci->dependencies = MallocT<ContentID>(ci->dependency_count); - for (uint i = 0; i < ci->dependency_count; i++) ci->dependencies[i] = (ContentID)p->Recv_uint32(); + uint dependency_count = p->Recv_uint8(); + ci->dependencies.reserve(dependency_count); + for (uint i = 0; i < dependency_count; i++) ci->dependencies.push_back((ContentID)p->Recv_uint32()); uint tag_count = p->Recv_uint8(); ci->tags.reserve(tag_count); @@ -927,8 +927,8 @@ void ClientNetworkContentSocketHandler::ReverseLookupDependency(ConstContentVect for (const ContentInfo *ci : this->infos) { if (ci == child) continue; - for (uint i = 0; i < ci->dependency_count; i++) { - if (ci->dependencies[i] == child->id) { + for (auto &dependency : ci->dependencies) { + if (dependency == child->id) { parents.push_back(ci); break; } @@ -969,10 +969,10 @@ void ClientNetworkContentSocketHandler::CheckDependencyState(ContentInfo *ci) /* Selection is easy; just walk all children and set the * autoselected state. That way we can see what we automatically * selected and thus can unselect when a dependency is removed. */ - for (uint i = 0; i < ci->dependency_count; i++) { - ContentInfo *c = this->GetContent(ci->dependencies[i]); + for (auto &dependency : ci->dependencies) { + ContentInfo *c = this->GetContent(dependency); if (c == nullptr) { - this->DownloadContentInfo(ci->dependencies[i]); + this->DownloadContentInfo(dependency); } else if (c->state == ContentInfo::UNSELECTED) { c->state = ContentInfo::AUTOSELECTED; this->CheckDependencyState(c); @@ -995,10 +995,10 @@ void ClientNetworkContentSocketHandler::CheckDependencyState(ContentInfo *ci) this->Unselect(c->id); } - for (uint i = 0; i < ci->dependency_count; i++) { - const ContentInfo *c = this->GetContent(ci->dependencies[i]); + for (auto &dependency : ci->dependencies) { + const ContentInfo *c = this->GetContent(dependency); if (c == nullptr) { - DownloadContentInfo(ci->dependencies[i]); + DownloadContentInfo(dependency); continue; } if (c->state != ContentInfo::AUTOSELECTED) continue; diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index a617f4e49..5a03561c9 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -725,13 +725,11 @@ public: SetDParam(0, this->selected->filesize); y = DrawStringMultiLine(r.left + DETAIL_LEFT, r.right - DETAIL_RIGHT, y, max_y, STR_CONTENT_DETAIL_FILESIZE); - if (this->selected->dependency_count != 0) { + if (!this->selected->dependencies.empty()) { /* List dependencies */ char buf[DRAW_STRING_BUFFER] = ""; char *p = buf; - for (uint i = 0; i < this->selected->dependency_count; i++) { - ContentID cid = this->selected->dependencies[i]; - + for (auto &cid : this->selected->dependencies) { /* Try to find the dependency */ ConstContentIterator iter = _network_content_client.Begin(); for (; iter != _network_content_client.End(); iter++) { |