Changeset - r25783:02166e47d365
[Not reviewed]
master
0 6 0
glx22 - 3 years ago 2021-06-13 00:41:41
glx@openttd.org
Codechange: Remove FOR_ALL_SORTED_STANDARD_CARGOSPECS
6 files changed with 35 insertions and 47 deletions:
0 comments (0 inline, 0 general)
src/build_vehicle_gui.cpp
Show inline comments
 
@@ -1186,8 +1186,7 @@ struct BuildVehicleWindow : Window {
 
		}
 

	
 
		/* Collect available cargo types for filtering. */
 
		const CargoSpec *cs;
 
		FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
 
		for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
 
			this->cargo_filter[filter_items] = cs->Index();
 
			this->cargo_filter_texts[filter_items] = cs->name;
 
			filter_items++;
src/cargotype.cpp
Show inline comments
 
@@ -149,8 +149,8 @@ SpriteID CargoSpec::GetCargoIcon() const
 
	return sprite;
 
}
 

	
 
std::vector<const CargoSpec *> _sorted_cargo_specs; ///< Cargo specifications sorted alphabetically by name.
 
uint8 _sorted_standard_cargo_specs_size;            ///< Number of standard cargo specifications stored in the _sorted_cargo_specs array.
 
std::vector<const CargoSpec *> _sorted_cargo_specs;   ///< Cargo specifications sorted alphabetically by name.
 
span<const CargoSpec *> _sorted_standard_cargo_specs; ///< Standard cargo specifications sorted alphabetically by name.
 

	
 
/** Sort cargo specifications by their name. */
 
static bool CargoSpecNameSorter(const CargoSpec * const &a, const CargoSpec * const &b)
 
@@ -196,13 +196,16 @@ void InitializeSortedCargoSpecs()
 
	/* Sort cargo specifications by cargo class and name. */
 
	std::sort(_sorted_cargo_specs.begin(), _sorted_cargo_specs.end(), &CargoSpecClassSorter);
 

	
 
	/* Count the number of standard cargos and fill the mask. */
 
	_standard_cargo_mask = 0;
 

	
 
	_sorted_standard_cargo_specs_size = 0;
 
	uint8 nb_standard_cargo = 0;
 
	for (const auto &cargo : _sorted_cargo_specs) {
 
		if (cargo->classes & CC_SPECIAL) break;
 
		_sorted_standard_cargo_specs_size++;
 
		nb_standard_cargo++;
 
		SetBit(_standard_cargo_mask, cargo->Index());
 
	}
 

	
 
	/* _sorted_standard_cargo_specs is a subset of _sorted_cargo_specs. */
 
	_sorted_standard_cargo_specs = { _sorted_cargo_specs.data(), nb_standard_cargo };
 
}
 

	
src/cargotype.h
Show inline comments
 
@@ -15,6 +15,7 @@
 
#include "gfx_type.h"
 
#include "strings_type.h"
 
#include "landscape_type.h"
 
#include "core/span_type.hpp"
 
#include <vector>
 

	
 
/** Globally unique label of a cargo type. */
 
@@ -181,7 +182,7 @@ CargoID GetDefaultCargoID(LandscapeID l,
 

	
 
void InitializeSortedCargoSpecs();
 
extern std::vector<const CargoSpec *> _sorted_cargo_specs;
 
extern uint8 _sorted_standard_cargo_specs_size;
 
extern span<const CargoSpec *> _sorted_standard_cargo_specs;
 

	
 
/**
 
 * Does cargo \a c have cargo class \a cc?
 
@@ -196,11 +197,4 @@ static inline bool IsCargoInClass(CargoI
 

	
 
#define FOR_EACH_SET_CARGO_ID(var, cargo_bits) FOR_EACH_SET_BIT_EX(CargoID, var, CargoTypes, cargo_bits)
 

	
 
/**
 
 * Loop header for iterating over 'real' cargoes, sorted by name. Phony cargoes like regearing cargoes are skipped.
 
 * @param var Reference getting the cargospec.
 
 * @see CargoSpec
 
 */
 
#define FOR_ALL_SORTED_STANDARD_CARGOSPECS(var) for (uint8 index = 0; index < _sorted_standard_cargo_specs_size && (var = _sorted_cargo_specs[index], true); index++)
 

	
 
#endif /* CARGOTYPE_H */
src/graph_gui.cpp
Show inline comments
 
@@ -892,7 +892,7 @@ struct PaymentRatesGraphWindow : BaseGra
 

	
 
		this->CreateNestedTree();
 
		this->vscroll = this->GetScrollbar(WID_CPR_MATRIX_SCROLLBAR);
 
		this->vscroll->SetCount(_sorted_standard_cargo_specs_size);
 
		this->vscroll->SetCount(static_cast<int>(_sorted_standard_cargo_specs.size()));
 

	
 
		/* Initialise the dataset */
 
		this->OnHundredthTick();
 
@@ -911,8 +911,7 @@ struct PaymentRatesGraphWindow : BaseGra
 
		this->excluded_data = 0;
 

	
 
		int i = 0;
 
		const CargoSpec *cs;
 
		FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
 
		for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
 
			if (HasBit(_legend_excluded_cargo, cs->Index())) SetBit(this->excluded_data, i);
 
			i++;
 
		}
 
@@ -925,8 +924,7 @@ struct PaymentRatesGraphWindow : BaseGra
 
			return;
 
		}
 

	
 
		const CargoSpec *cs;
 
		FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
 
		for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
 
			SetDParam(0, cs->name);
 
			Dimension d = GetStringBoundingBox(STR_GRAPH_CARGO_PAYMENT_CARGO);
 
			d.width += this->legend_width + 4; // colour field
 
@@ -958,8 +956,7 @@ struct PaymentRatesGraphWindow : BaseGra
 
		int pos = this->vscroll->GetPosition();
 
		int max = pos + this->vscroll->GetCapacity();
 

	
 
		const CargoSpec *cs;
 
		FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
 
		for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
 
			if (pos-- > 0) continue;
 
			if (--max < 0) break;
 

	
 
@@ -993,8 +990,7 @@ struct PaymentRatesGraphWindow : BaseGra
 
			case WID_CPR_DISABLE_CARGOES: {
 
				/* Add all cargoes to the excluded lists. */
 
				int i = 0;
 
				const CargoSpec *cs;
 
				FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
 
				for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
 
					SetBit(_legend_excluded_cargo, cs->Index());
 
					SetBit(this->excluded_data, i);
 
					i++;
 
@@ -1007,8 +1003,7 @@ struct PaymentRatesGraphWindow : BaseGra
 
				uint row = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_CPR_MATRIX);
 
				if (row >= this->vscroll->GetCount()) return;
 

	
 
				const CargoSpec *cs;
 
				FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
 
				for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
 
					if (row-- > 0) continue;
 

	
 
					ToggleBit(_legend_excluded_cargo, cs->Index());
 
@@ -1047,8 +1042,7 @@ struct PaymentRatesGraphWindow : BaseGra
 
		this->UpdateExcludedData();
 

	
 
		int i = 0;
 
		const CargoSpec *cs;
 
		FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
 
		for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
 
			this->colours[i] = cs->legend_colour;
 
			for (uint j = 0; j != 20; j++) {
 
				this->cost[i][j] = GetTransportedGoodsIncome(10, 20, j * 4 + 4, cs->Index());
src/industry_gui.cpp
Show inline comments
 
@@ -1375,8 +1375,7 @@ protected:
 
		filter_items++;
 

	
 
		/* Collect available cargo types for filtering. */
 
		const CargoSpec *cs;
 
		FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
 
		for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
 
			this->cargo_filter[filter_items] = cs->Index();
 
			this->cargo_filter_texts[filter_items] = cs->name;
 
			filter_items++;
 
@@ -2995,8 +2994,7 @@ struct IndustryCargoesWindow : public Wi
 

	
 
			case WID_IC_CARGO_DROPDOWN: {
 
				DropDownList lst;
 
				const CargoSpec *cs;
 
				FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
 
				for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
 
					lst.emplace_back(new DropDownListStringItem(cs->name, cs->Index(), false));
 
				}
 
				if (!lst.empty()) {
src/station_gui.cpp
Show inline comments
 
@@ -347,10 +347,12 @@ public:
 
		this->FinishInitNested(window_number);
 
		this->owner = (Owner)this->window_number;
 

	
 
		const CargoSpec *cs;
 
		FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
 
			if (!HasBit(this->cargo_filter, cs->Index())) continue;
 
			this->LowerWidget(WID_STL_CARGOSTART + index);
 
		uint8 index = 0;
 
		for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
 
			if (HasBit(this->cargo_filter, cs->Index())) {
 
				this->LowerWidget(WID_STL_CARGOSTART + index);
 
			}
 
			index++;
 
		}
 

	
 
		if (this->cargo_filter == this->cargo_filter_max) this->cargo_filter = _cargo_mask;
 
@@ -396,8 +398,7 @@ public:
 

	
 
				/* Determine appropriate width for mini station rating graph */
 
				this->rating_width = 0;
 
				const CargoSpec *cs;
 
				FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
 
				for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
 
					this->rating_width = std::max(this->rating_width, GetStringBoundingBox(cs->abbrev).width);
 
				}
 
				/* Approximately match original 16 pixel wide rating bars by multiplying string width by 1.6 */
 
@@ -465,8 +466,8 @@ public:
 
					x += rtl ? -text_spacing : text_spacing;
 

	
 
					/* show cargo waiting and station ratings */
 
					for (uint j = 0; j < _sorted_standard_cargo_specs_size; j++) {
 
						CargoID cid = _sorted_cargo_specs[j]->Index();
 
					for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
 
						CargoID cid = cs->Index();
 
						if (st->goods[cid].cargo.TotalCount() > 0) {
 
							/* For RTL we work in exactly the opposite direction. So
 
							 * decrement the space needed first, then draw to the left
 
@@ -581,7 +582,7 @@ public:
 
				break;
 

	
 
			case WID_STL_CARGOALL: {
 
				for (uint i = 0; i < _sorted_standard_cargo_specs_size; i++) {
 
				for (uint i = 0; i < _sorted_standard_cargo_specs.size(); i++) {
 
					this->LowerWidget(WID_STL_CARGOSTART + i);
 
				}
 
				this->LowerWidget(WID_STL_NOCARGOWAITING);
 
@@ -607,7 +608,7 @@ public:
 
					this->include_empty = !this->include_empty;
 
					this->ToggleWidgetLoweredState(WID_STL_NOCARGOWAITING);
 
				} else {
 
					for (uint i = 0; i < _sorted_standard_cargo_specs_size; i++) {
 
					for (uint i = 0; i < _sorted_standard_cargo_specs.size(); i++) {
 
						this->RaiseWidget(WID_STL_CARGOSTART + i);
 
					}
 

	
 
@@ -629,7 +630,7 @@ public:
 
						ToggleBit(this->cargo_filter, cs->Index());
 
						this->ToggleWidgetLoweredState(widget);
 
					} else {
 
						for (uint i = 0; i < _sorted_standard_cargo_specs_size; i++) {
 
						for (uint i = 0; i < _sorted_standard_cargo_specs.size(); i++) {
 
							this->RaiseWidget(WID_STL_CARGOSTART + i);
 
						}
 
						this->RaiseWidget(WID_STL_NOCARGOWAITING);
 
@@ -724,7 +725,7 @@ static NWidgetBase *CargoWidgets(int *bi
 
{
 
	NWidgetHorizontal *container = new NWidgetHorizontal();
 

	
 
	for (uint i = 0; i < _sorted_standard_cargo_specs_size; i++) {
 
	for (uint i = 0; i < _sorted_standard_cargo_specs.size(); i++) {
 
		NWidgetBackground *panel = new NWidgetBackground(WWT_PANEL, COLOUR_GREY, WID_STL_CARGOSTART + i);
 
		panel->SetMinimalSize(14, 0);
 
		panel->SetMinimalTextLines(1, 0, FS_NORMAL);
 
@@ -733,7 +734,7 @@ static NWidgetBase *CargoWidgets(int *bi
 
		panel->SetDataTip(0, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE);
 
		container->Add(panel);
 
	}
 
	*biggest_index = WID_STL_CARGOSTART + _sorted_standard_cargo_specs_size;
 
	*biggest_index = WID_STL_CARGOSTART + static_cast<int>(_sorted_standard_cargo_specs.size());
 
	return container;
 
}
 

	
 
@@ -1859,8 +1860,7 @@ struct StationViewWindow : public Window
 
		DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_STATION_VIEW_SUPPLY_RATINGS_TITLE);
 
		y += FONT_HEIGHT_NORMAL;
 

	
 
		const CargoSpec *cs;
 
		FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
 
		for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
 
			const GoodsEntry *ge = &st->goods[cs->Index()];
 
			if (!ge->HasRating()) continue;
 

	
0 comments (0 inline, 0 general)