From b7abaa55a3843a1d1ccd4e1be05a4e50e98b5289 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Tue, 8 Nov 2022 11:11:24 +0000 Subject: [PATCH] Codechange: Improve performance when calculating company value (#9901) --- src/economy.cpp | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/economy.cpp b/src/economy.cpp index bc3fa29894..5e8318fd0d 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -101,6 +101,8 @@ Economy _economy; Prices _price; static PriceMultipliers _price_base_multiplier; +extern int GetAmountOwnedBy(const Company *c, Owner owner); + /** * Calculate the value of the company. That is the value of all * assets (vehicles, stations, shares) and money minus the loan, @@ -115,18 +117,12 @@ Money CalculateCompanyValue(const Company *c, bool including_loan) Money owned_shares_value = 0; for (const Company *co : Company::Iterate()) { - uint8 shares_owned = 0; + int shares_owned = GetAmountOwnedBy(co, c->index); - for (uint8 i = 0; i < 4; i++) { - if (co->share_owners[i] == c->index) { - shares_owned++; - } - } - - owned_shares_value += (CalculateCompanyValueExcludingShares(co) / 4) * shares_owned; + if (shares_owned > 0) owned_shares_value += (CalculateCompanyValueExcludingShares(co) / 4) * shares_owned; } - return std::max(owned_shares_value + CalculateCompanyValueExcludingShares(c), 1); + return owned_shares_value + CalculateCompanyValueExcludingShares(c); } Money CalculateCompanyValueExcludingShares(const Company *c, bool including_loan) @@ -2018,8 +2014,6 @@ static void DoAcquireCompany(Company *c) delete c; } -extern int GetAmountOwnedBy(const Company *c, Owner owner); - /** * Acquire shares in an opposing company. * @param flags type of operation