From 4434422c1168a2ccbdbe41abea1b59eeef3c2887 Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 20 Dec 2009 15:08:20 +0000 Subject: [PATCH] (svn r18568) -Codechange: Bail out early. --- src/vehicle.cpp | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 7ae9f9ed31..b89d855543 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -118,26 +118,25 @@ bool Vehicle::NeedsServicing() const Money needed_money = c->settings.engine_renew_money; if (needed_money > c->money) return false; - const Vehicle *v = this; - do { + for (const Vehicle *v = this; v != NULL; v = (v->type == VEH_TRAIN) ? Train::From(v)->GetNextUnit() : NULL) { EngineID new_engine = EngineReplacementForCompany(c, v->engine_type, v->group_id); - /* Check engine availability */ - if (new_engine != INVALID_ENGINE && HasBit(Engine::Get(new_engine)->company_avail, v->owner)) { - /* Check refittability */ - CargoID cargo_type = CT_INVALID; - if (!IsArticulatedVehicleCarryingDifferentCargos(v, &cargo_type) && cargo_type != CT_INVALID && - HasBit(GetIntersectionOfArticulatedRefitMasks(new_engine, true), cargo_type)) { - /* Check money. - * We want 2*(the price of the new vehicle) without looking at the value of the vehicle we are going to sell. */ - pending_replace = true; - needed_money += 2 * Engine::Get(new_engine)->GetCost(); - if (needed_money > c->money) break; - } - } - v = (v->type == VEH_TRAIN) ? Train::From(v)->GetNextUnit() : NULL; - } while (v != NULL); - return pending_replace && needed_money <= c->money; + /* Check engine availability */ + if (new_engine == INVALID_ENGINE || !HasBit(Engine::Get(new_engine)->company_avail, v->owner)) continue; + + /* Check refittability */ + CargoID cargo_type = CT_INVALID; + if (IsArticulatedVehicleCarryingDifferentCargos(v, &cargo_type) || cargo_type == CT_INVALID || + !HasBit(GetIntersectionOfArticulatedRefitMasks(new_engine, true), cargo_type)) continue; + + /* Check money. + * We want 2*(the price of the new vehicle) without looking at the value of the vehicle we are going to sell. */ + pending_replace = true; + needed_money += 2 * Engine::Get(new_engine)->GetCost(); + if (needed_money > c->money) return false; + } + + return pending_replace; } bool Vehicle::NeedsAutomaticServicing() const