summaryrefslogtreecommitdiff
path: root/src/cargotype.cpp
diff options
context:
space:
mode:
authorglx <glx@openttd.org>2019-04-12 17:47:13 +0200
committerglx22 <glx22@users.noreply.github.com>2019-04-18 21:49:34 +0200
commit0797de06be265da4f3bb06114cae4d8e5c830e71 (patch)
tree740b82448bb649fd3b7a57494f85ebc1179b4567 /src/cargotype.cpp
parentf0b3267615b79dd9301226979812eeed39158e2d (diff)
downloadopenttd-0797de06be265da4f3bb06114cae4d8e5c830e71.tar.xz
Codechange: use std::vector for _sorted_cargo_specs
Diffstat (limited to 'src/cargotype.cpp')
-rw-r--r--src/cargotype.cpp32
1 files changed, 15 insertions, 17 deletions
diff --git a/src/cargotype.cpp b/src/cargotype.cpp
index 6cc02f63a..4a2dd6a32 100644
--- a/src/cargotype.cpp
+++ b/src/cargotype.cpp
@@ -14,7 +14,7 @@
#include "newgrf_cargo.h"
#include "string_func.h"
#include "strings_func.h"
-#include "core/sort_func.hpp"
+#include <algorithm>
#include "table/sprites.h"
#include "table/strings.h"
@@ -132,56 +132,54 @@ SpriteID CargoSpec::GetCargoIcon() const
return sprite;
}
-const CargoSpec *_sorted_cargo_specs[NUM_CARGO]; ///< Cargo specifications sorted alphabetically by name.
-uint8 _sorted_cargo_specs_size; ///< Number of cargo specifications stored at the _sorted_cargo_specs array (including special cargoes).
-uint8 _sorted_standard_cargo_specs_size; ///< Number of standard cargo specifications stored at the _sorted_cargo_specs array.
+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.
/** Sort cargo specifications by their name. */
-static int CDECL CargoSpecNameSorter(const CargoSpec * const *a, const CargoSpec * const *b)
+static bool CargoSpecNameSorter(const CargoSpec * const &a, const CargoSpec * const &b)
{
static char a_name[64];
static char b_name[64];
- GetString(a_name, (*a)->name, lastof(a_name));
- GetString(b_name, (*b)->name, lastof(b_name));
+ GetString(a_name, a->name, lastof(a_name));
+ GetString(b_name, b->name, lastof(b_name));
int res = strnatcmp(a_name, b_name); // Sort by name (natural sorting).
/* If the names are equal, sort by cargo bitnum. */
- return (res != 0) ? res : ((*a)->bitnum - (*b)->bitnum);
+ return (res != 0) ? res < 0 : (a->bitnum < b->bitnum);
}
/** Sort cargo specifications by their cargo class. */
-static int CDECL CargoSpecClassSorter(const CargoSpec * const *a, const CargoSpec * const *b)
+static bool CargoSpecClassSorter(const CargoSpec * const &a, const CargoSpec * const &b)
{
- int res = ((*b)->classes & CC_PASSENGERS) - ((*a)->classes & CC_PASSENGERS);
+ int res = (b->classes & CC_PASSENGERS) - (a->classes & CC_PASSENGERS);
if (res == 0) {
- res = ((*b)->classes & CC_MAIL) - ((*a)->classes & CC_MAIL);
+ res = (b->classes & CC_MAIL) - (a->classes & CC_MAIL);
if (res == 0) {
- res = ((*a)->classes & CC_SPECIAL) - ((*b)->classes & CC_SPECIAL);
+ res = (a->classes & CC_SPECIAL) - (b->classes & CC_SPECIAL);
if (res == 0) {
return CargoSpecNameSorter(a, b);
}
}
}
- return res;
+ return res < 0;
}
/** Initialize the list of sorted cargo specifications. */
void InitializeSortedCargoSpecs()
{
- _sorted_cargo_specs_size = 0;
+ _sorted_cargo_specs.clear();
const CargoSpec *cargo;
/* Add each cargo spec to the list. */
FOR_ALL_CARGOSPECS(cargo) {
- _sorted_cargo_specs[_sorted_cargo_specs_size] = cargo;
- _sorted_cargo_specs_size++;
+ _sorted_cargo_specs.push_back(cargo);
}
/* Sort cargo specifications by cargo class and name. */
- QSortT(_sorted_cargo_specs, _sorted_cargo_specs_size, &CargoSpecClassSorter);
+ std::sort(_sorted_cargo_specs.begin(), _sorted_cargo_specs.end(), &CargoSpecClassSorter);
_standard_cargo_mask = 0;