summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ai/api/ai_subsidylist.cpp5
-rw-r--r--src/economy.cpp7
-rw-r--r--src/saveload/afterload.cpp4
-rw-r--r--src/saveload/subsidy_sl.cpp11
-rw-r--r--src/subsidy.cpp30
-rw-r--r--src/subsidy_gui.cpp18
-rw-r--r--src/subsidy_type.h4
7 files changed, 37 insertions, 42 deletions
diff --git a/src/ai/api/ai_subsidylist.cpp b/src/ai/api/ai_subsidylist.cpp
index cfda16e9a..d372b4b2f 100644
--- a/src/ai/api/ai_subsidylist.cpp
+++ b/src/ai/api/ai_subsidylist.cpp
@@ -8,7 +8,8 @@
AISubsidyList::AISubsidyList()
{
- for (uint i = 0; i < lengthof(_subsidies); i++) {
- if (AISubsidy::IsValidSubsidy(i)) this->AddItem(i);
+ const Subsidy *s;
+ FOR_ALL_SUBSIDIES(s) {
+ this->AddItem(s - _subsidies);
}
}
diff --git a/src/economy.cpp b/src/economy.cpp
index 0891e1bd9..2883f65c1 100644
--- a/src/economy.cpp
+++ b/src/economy.cpp
@@ -327,10 +327,9 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
if (new_owner == INVALID_OWNER) {
Subsidy *s;
-
- for (s = _subsidies; s != endof(_subsidies); s++) {
- if (s->cargo_type != CT_INVALID && s->age >= 12) {
- if (Station::Get(s->to)->owner == old_owner) s->cargo_type = CT_INVALID;
+ FOR_ALL_SUBSIDIES(s) {
+ if (s->age >= 12 && Station::Get(s->to)->owner == old_owner) {
+ s->cargo_type = CT_INVALID;
}
}
}
diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp
index 809248faf..28c5cd525 100644
--- a/src/saveload/afterload.cpp
+++ b/src/saveload/afterload.cpp
@@ -1916,8 +1916,8 @@ bool AfterLoadGame()
}
/* Delete invalid subsidies possibly present in old versions (but converted to new savegame) */
- for (Subsidy *s = _subsidies; s < endof(_subsidies); s++) {
- if (s->cargo_type == CT_INVALID) continue;
+ Subsidy *s;
+ FOR_ALL_SUBSIDIES(s) {
if (s->age >= 12) {
/* Station -> Station */
const Station *from = Station::GetIfValid(s->from);
diff --git a/src/saveload/subsidy_sl.cpp b/src/saveload/subsidy_sl.cpp
index 7ff23e6f8..7e59a80e3 100644
--- a/src/saveload/subsidy_sl.cpp
+++ b/src/saveload/subsidy_sl.cpp
@@ -19,15 +19,10 @@ static const SaveLoad _subsidies_desc[] = {
void Save_SUBS()
{
- int i;
Subsidy *s;
-
- for (i = 0; i != lengthof(_subsidies); i++) {
- s = &_subsidies[i];
- if (s->cargo_type != CT_INVALID) {
- SlSetArrayIndex(i);
- SlObject(s, _subsidies_desc);
- }
+ FOR_ALL_SUBSIDIES(s) {
+ SlSetArrayIndex(s - _subsidies);
+ SlObject(s, _subsidies_desc);
}
}
diff --git a/src/subsidy.cpp b/src/subsidy.cpp
index d444c4d43..9a60dfa2d 100644
--- a/src/subsidy.cpp
+++ b/src/subsidy.cpp
@@ -69,9 +69,8 @@ Pair SetupSubsidyDecodeParam(const Subsidy *s, bool mode)
void DeleteSubsidyWithTown(TownID index)
{
Subsidy *s;
-
- for (s = _subsidies; s != endof(_subsidies); s++) {
- if (s->cargo_type != CT_INVALID && s->age < 12) {
+ FOR_ALL_SUBSIDIES(s) {
+ if (s->age < 12) {
const CargoSpec *cs = GetCargo(s->cargo_type);
if (((cs->town_effect == TE_PASSENGERS || cs->town_effect == TE_MAIL) && (index == s->from || index == s->to)) ||
((cs->town_effect == TE_GOODS || cs->town_effect == TE_FOOD) && index == s->to)) {
@@ -84,9 +83,8 @@ void DeleteSubsidyWithTown(TownID index)
void DeleteSubsidyWithIndustry(IndustryID index)
{
Subsidy *s;
-
- for (s = _subsidies; s != endof(_subsidies); s++) {
- if (s->cargo_type != CT_INVALID && s->age < 12) {
+ FOR_ALL_SUBSIDIES(s) {
+ if (s->age < 12) {
const CargoSpec *cs = GetCargo(s->cargo_type);
if (cs->town_effect != TE_PASSENGERS && cs->town_effect != TE_MAIL &&
(index == s->from || (cs->town_effect != TE_GOODS && cs->town_effect != TE_FOOD && index == s->to))) {
@@ -98,12 +96,11 @@ void DeleteSubsidyWithIndustry(IndustryID index)
void DeleteSubsidyWithStation(StationID index)
{
- Subsidy *s;
bool dirty = false;
- for (s = _subsidies; s != endof(_subsidies); s++) {
- if (s->cargo_type != CT_INVALID && s->age >= 12 &&
- (s->from == index || s->to == index)) {
+ Subsidy *s;
+ FOR_ALL_SUBSIDIES(s) {
+ if (s->age >= 12 && (s->from == index || s->to == index)) {
s->cargo_type = CT_INVALID;
dirty = true;
}
@@ -196,8 +193,7 @@ static void FindSubsidyCargoRoute(FoundRoute *fr)
static bool CheckSubsidyDuplicate(Subsidy *s)
{
const Subsidy *ss;
-
- for (ss = _subsidies; ss != endof(_subsidies); ss++) {
+ FOR_ALL_SUBSIDIES(ss) {
if (s != ss &&
ss->from == s->from &&
ss->to == s->to &&
@@ -212,15 +208,13 @@ static bool CheckSubsidyDuplicate(Subsidy *s)
void SubsidyMonthlyLoop()
{
- Subsidy *s;
Station *st;
uint n;
FoundRoute fr;
bool modified = false;
- for (s = _subsidies; s != endof(_subsidies); s++) {
- if (s->cargo_type == CT_INVALID) continue;
-
+ Subsidy *s;
+ FOR_ALL_SUBSIDIES(s) {
if (s->age == 12 - 1) {
Pair reftype = SetupSubsidyDecodeParam(s, 1);
AddNewsItem(STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED, NS_SUBSIDIES, (NewsReferenceType)reftype.a, s->from, (NewsReferenceType)reftype.b, s->to);
@@ -290,7 +284,7 @@ bool CheckSubsidised(const Station *from, const Station *to, CargoID cargo_type,
TileIndex xy;
/* check if there is an already existing subsidy that applies to us */
- for (s = _subsidies; s != endof(_subsidies); s++) {
+ FOR_ALL_SUBSIDIES(s) {
if (s->cargo_type == cargo_type &&
s->age >= 12 &&
s->from == from->index &&
@@ -300,7 +294,7 @@ bool CheckSubsidised(const Station *from, const Station *to, CargoID cargo_type,
}
/* check if there's a new subsidy that applies.. */
- for (s = _subsidies; s != endof(_subsidies); s++) {
+ FOR_ALL_SUBSIDIES(s) {
if (s->cargo_type == cargo_type && s->age < 12) {
/* Check distance from source */
const CargoSpec *cs = GetCargo(cargo_type);
diff --git a/src/subsidy_gui.cpp b/src/subsidy_gui.cpp
index 14ae1348a..071fb327d 100644
--- a/src/subsidy_gui.cpp
+++ b/src/subsidy_gui.cpp
@@ -43,8 +43,10 @@ struct SubsidyListWindow : Window {
if (y < 0) return;
uint num = 0;
- for (const Subsidy *s = _subsidies; s != endof(_subsidies); s++) {
- if (s->cargo_type != CT_INVALID && s->age < 12) {
+
+ const Subsidy *s;
+ FOR_ALL_SUBSIDIES(s) {
+ if (s->age < 12) {
y -= FONT_HEIGHT_NORMAL;
if (y < 0) {
this->HandleClick(s);
@@ -62,8 +64,8 @@ struct SubsidyListWindow : Window {
y -= 11; // "Services already subsidised:"
if (y < 0) return;
- for (const Subsidy *s = _subsidies; s != endof(_subsidies); s++) {
- if (s->cargo_type != CT_INVALID && s->age >= 12) {
+ FOR_ALL_SUBSIDIES(s) {
+ if (s->age >= 12) {
y -= FONT_HEIGHT_NORMAL;
if (y < 0) {
this->HandleClick(s);
@@ -127,8 +129,8 @@ struct SubsidyListWindow : Window {
y += FONT_HEIGHT_NORMAL;
uint num = 0;
- for (s = _subsidies; s != endof(_subsidies); s++) {
- if (s->cargo_type != CT_INVALID && s->age < 12) {
+ FOR_ALL_SUBSIDIES(s) {
+ if (s->age < 12) {
/* Displays the two offered towns */
SetupSubsidyDecodeParam(s, 1);
SetDParam(7, _date - ymd.day + 384 - s->age * 32);
@@ -149,8 +151,8 @@ struct SubsidyListWindow : Window {
y += FONT_HEIGHT_NORMAL;
num = 0;
- for (s = _subsidies; s != endof(_subsidies); s++) {
- if (s->cargo_type != CT_INVALID && s->age >= 12) {
+ FOR_ALL_SUBSIDIES(s) {
+ if (s->age >= 12) {
SetupSubsidyDecodeParam(s, 1);
SetDParam(3, Station::Get(s->to)->owner);
SetDParam(4, _date - ymd.day + 768 - s->age * 32);
diff --git a/src/subsidy_type.h b/src/subsidy_type.h
index bec1a2cd4..8aa6738a4 100644
--- a/src/subsidy_type.h
+++ b/src/subsidy_type.h
@@ -18,4 +18,8 @@ struct Subsidy {
extern Subsidy _subsidies[MAX_COMPANIES];
+#define FOR_ALL_SUBSIDIES_FROM(var, start) for (var = &_subsidies[start]; var < endof(_subsidies); var++) \
+ if (var->cargo_type != CT_INVALID)
+#define FOR_ALL_SUBSIDIES(var) FOR_ALL_SUBSIDIES_FROM(var, 0)
+
#endif /* SUBSIDY_TYPE_H */