changeset 15161:4b00526d0be8 draft

(svn r19790) -Change: use the typed FOR_EACH_SET_BIT for CargoIDs (adf88)
author rubidium <rubidium@openttd.org>
date Tue, 11 May 2010 21:01:01 +0000
parents 771499c17fd3
children c5ccb53c4985
files src/cargotype.h src/station_gui.cpp
diffstat 2 files changed, 19 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/src/cargotype.h
+++ b/src/cargotype.h
@@ -150,6 +150,8 @@
 		if ((var = CargoSpec::Get(cargospec_index))->IsValid())
 #define FOR_ALL_CARGOSPECS(var) FOR_ALL_CARGOSPECS_FROM(var, 0)
 
+#define FOR_EACH_SET_CARGO_ID(var, cargo_bits) FOR_EACH_SET_BIT_EX(CargoID, var, uint, cargo_bits)
+
 #define FOR_ALL_SORTED_CARGOSPECS(var) for (uint8 index = 0; var = _sorted_cargo_specs[index], index < _sorted_cargo_specs_size; index++)
 
 #define FOR_ALL_SORTED_STANDARD_CARGOSPECS(var) for (uint8 index = 0; var = _sorted_cargo_specs[index], index < _sorted_standard_cargo_specs_size; index++)
--- a/src/station_gui.cpp
+++ b/src/station_gui.cpp
@@ -45,18 +45,18 @@
 	char string[512];
 	char *b = string;
 
-	for (CargoID i = 0; i < NUM_CARGO; i++) {
+	CargoID i;
+	FOR_EACH_SET_CARGO_ID(i, cargo_mask) {
 		if (b >= lastof(string) - (1 + 2 * 4)) break; // ',' or ' ' and two calls to Utf8Encode()
-		if (HasBit(cargo_mask, i)) {
-			if (first) {
-				first = false;
-			} else {
-				/* Add a comma if this is not the first item */
-				*b++ = ',';
-				*b++ = ' ';
-			}
-			b = InlineString(b, CargoSpec::Get(i)->name);
+
+		if (first) {
+			first = false;
+		} else {
+			/* Add a comma if this is not the first item */
+			*b++ = ',';
+			*b++ = ' ';
 		}
+		b = InlineString(b, CargoSpec::Get(i)->name);
 	}
 
 	/* If first is still true then no cargo is accepted */
@@ -288,8 +288,8 @@
 	{
 		Money diff = 0;
 
-		for (CargoID j = 0; j < NUM_CARGO; j++) {
-			if (!HasBit(cargo_filter, j)) continue;
+		CargoID j;
+		FOR_EACH_SET_CARGO_ID(j, cargo_filter) {
 			if (!(*a)->goods[j].cargo.Empty()) diff += GetTransportedGoodsIncome((*a)->goods[j].cargo.Count(), 20, 50, j);
 			if (!(*b)->goods[j].cargo.Empty()) diff -= GetTransportedGoodsIncome((*b)->goods[j].cargo.Count(), 20, 50, j);
 		}
@@ -303,8 +303,8 @@
 		byte maxr1 = 0;
 		byte maxr2 = 0;
 
-		for (CargoID j = 0; j < NUM_CARGO; j++) {
-			if (!HasBit(cargo_filter, j)) continue;
+		CargoID j;
+		FOR_EACH_SET_CARGO_ID(j, cargo_filter) {
 			if (HasBit((*a)->goods[j].acceptance_pickup, GoodsEntry::PICKUP)) maxr1 = max(maxr1, (*a)->goods[j].rating);
 			if (HasBit((*b)->goods[j].acceptance_pickup, GoodsEntry::PICKUP)) maxr2 = max(maxr2, (*b)->goods[j].rating);
 		}
@@ -351,9 +351,9 @@
 		this->InitNested(desc, window_number);
 		this->owner = (Owner)this->window_number;
 
-		for (uint i = 0; i < NUM_CARGO; i++) {
-			const CargoSpec *cs = CargoSpec::Get(i);
-			if (cs->IsValid() && HasBit(this->cargo_filter, i)) this->LowerWidget(SLW_CARGOSTART + i);
+		CargoID cid;
+		FOR_EACH_SET_CARGO_ID(cid, this->cargo_filter) {
+			if (CargoSpec::Get(cid)->IsValid()) this->LowerWidget(SLW_CARGOSTART + cid);
 		}
 
 		if (this->cargo_filter == this->cargo_filter_max) this->cargo_filter = _cargo_mask;