Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
From 4d6b925ece9cbbd2897d941cf0c1f35bd9cb4325 Mon Sep 17 00:00:00 2001
From: Charles Pigott <charlespigott@googlemail.com>
Date: Tue, 8 Aug 2017 22:18:31 +0100
Subject: [PATCH 1/4] -Fix: Silence superious GCC warning about a memset
exceeding maximum object with an explicit (re)cast.
---
src/newgrf.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/newgrf.cpp b/src/newgrf.cpp
index 24b0238b3..1e5ccca92 100644
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -1971,7 +1971,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte
if (length > statspec->lengths) {
statspec->platforms = ReallocT(statspec->platforms, length);
- memset(statspec->platforms + statspec->lengths, 0, length - statspec->lengths);
+ memset(statspec->platforms + statspec->lengths, 0, (byte)(length - statspec->lengths));
statspec->layouts = ReallocT(statspec->layouts, length);
memset(statspec->layouts + statspec->lengths, 0,
--
2.14.1
From 6815d6683cfc3b18181f1b3bfb4889593b9819c1 Mon Sep 17 00:00:00 2001
From: Charles Pigott <charlespigott@googlemail.com>
Date: Wed, 9 Aug 2017 00:20:37 +0100
Subject: [PATCH 2/4] -Fix: A couple of template instantiations (or lack
thereof) warnings with clang.
There's a 'proper' solution to the SmallStackPool issue somewhere, but the internet-suggested solution just caused linker errors under gcc, so just convert it to a singleton getter method.
---
src/base_media_base.h | 5 +++++
src/base_media_func.h | 5 -----
src/core/smallstack_type.hpp | 28 ++++++++++++++++------------
src/station.cpp | 3 ---
4 files changed, 21 insertions(+), 20 deletions(-)
diff --git a/src/base_media_base.h b/src/base_media_base.h
index d5de6c373..7614118b7 100644
--- a/src/base_media_base.h
+++ b/src/base_media_base.h
@@ -219,6 +219,11 @@ public:
static bool HasSet(const ContentInfo *ci, bool md5sum);
};
+template <class Tbase_set> /* static */ const char *BaseMedia<Tbase_set>::ini_set;
+template <class Tbase_set> /* static */ const Tbase_set *BaseMedia<Tbase_set>::used_set;
+template <class Tbase_set> /* static */ Tbase_set *BaseMedia<Tbase_set>::available_sets;
+template <class Tbase_set> /* static */ Tbase_set *BaseMedia<Tbase_set>::duplicate_sets;
+
/**
* Check whether there's a base set matching some information.
* @param ci The content info to compare it to.
diff --git a/src/base_media_func.h b/src/base_media_func.h
index e3678d5a1..f45956f76 100644
--- a/src/base_media_func.h
+++ b/src/base_media_func.h
@@ -17,11 +17,6 @@
#include "ini_type.h"
#include "string_func.h"
-template <class Tbase_set> /* static */ const char *BaseMedia<Tbase_set>::ini_set;
-template <class Tbase_set> /* static */ const Tbase_set *BaseMedia<Tbase_set>::used_set;
-template <class Tbase_set> /* static */ Tbase_set *BaseMedia<Tbase_set>::available_sets;
-template <class Tbase_set> /* static */ Tbase_set *BaseMedia<Tbase_set>::duplicate_sets;
-
/**
* Try to read a single piece of metadata and return false if it doesn't exist.
* @param name the name of the item to fetch.
diff --git a/src/core/smallstack_type.hpp b/src/core/smallstack_type.hpp
index 31edba081..06b5aaafa 100644
--- a/src/core/smallstack_type.hpp
+++ b/src/core/smallstack_type.hpp
@@ -195,10 +195,10 @@ public:
inline void Push(const Titem &item)
{
if (this->value != Tinvalid) {
- ThreadMutexLocker lock(_pool.GetMutex());
- Tindex new_item = _pool.Create();
+ ThreadMutexLocker lock(SmallStack::GetPool().GetMutex());
+ Tindex new_item = SmallStack::GetPool().Create();
if (new_item != Tmax_size) {
- PooledSmallStack &pushed = _pool.Get(new_item);
+ PooledSmallStack &pushed = SmallStack::GetPool().Get(new_item);
pushed.value = this->value;
pushed.next = this->next;
pushed.branch_count = 0;
@@ -218,16 +218,16 @@ public:
if (this->next == Tmax_size) {
this->value = Tinvalid;
} else {
- ThreadMutexLocker lock(_pool.GetMutex());
- PooledSmallStack &popped = _pool.Get(this->next);
+ ThreadMutexLocker lock(SmallStack::GetPool().GetMutex());
+ PooledSmallStack &popped = SmallStack::GetPool().Get(this->next);
this->value = popped.value;
if (popped.branch_count == 0) {
- _pool.Destroy(this->next);
+ SmallStack::GetPool().Destroy(this->next);
} else {
--popped.branch_count;
/* We can't use Branch() here as we already have the mutex.*/
if (popped.next != Tmax_size) {
- ++(_pool.Get(popped.next).branch_count);
+ ++(SmallStack::GetPool().Get(popped.next).branch_count);
}
}
/* Accessing popped here is no problem as the pool will only set
@@ -257,11 +257,11 @@ public:
{
if (item == Tinvalid || item == this->value) return true;
if (this->next != Tmax_size) {
- ThreadMutexLocker lock(_pool.GetMutex());
+ ThreadMutexLocker lock(SmallStack::GetPool().GetMutex());
const SmallStack *in_list = this;
do {
in_list = static_cast<const SmallStack *>(
- static_cast<const Item *>(&_pool.Get(in_list->next)));
+ static_cast<const Item *>(&SmallStack::GetPool().Get(in_list->next)));
if (in_list->value == item) return true;
} while (in_list->next != Tmax_size);
}
@@ -269,7 +269,11 @@ public:
}
protected:
- static SmallStackPool _pool;
+ static SmallStackPool &GetPool()
+ {
+ static SmallStackPool pool;
+ return pool;
+ }
/**
* Create a branch in the pool if necessary.
@@ -277,8 +281,8 @@ protected:
inline void Branch()
{
if (this->next != Tmax_size) {
- ThreadMutexLocker lock(_pool.GetMutex());
- ++(_pool.Get(this->next).branch_count);
+ ThreadMutexLocker lock(SmallStack::GetPool().GetMutex());
+ ++(SmallStack::GetPool().Get(this->next).branch_count);
}
}
};
diff --git a/src/station.cpp b/src/station.cpp
index 456262dea..f86286f3d 100644
--- a/src/station.cpp
+++ b/src/station.cpp
@@ -35,9 +35,6 @@
StationPool _station_pool("Station");
INSTANTIATE_POOL_METHODS(Station)
-typedef StationIDStack::SmallStackPool StationIDStackPool;
-template<> StationIDStackPool StationIDStack::_pool = StationIDStackPool();
-
BaseStation::~BaseStation()
{
free(this->name);
--
2.14.1
From 620bb6ebc0d0b2c1315f764721760d1be0b14d50 Mon Sep 17 00:00:00 2001
From: Charles Pigott <charlespigott@googlemail.com>
Date: Wed, 9 Aug 2017 23:39:25 +0100
Subject: [PATCH 3/4] -Remove: Own implementations of max/min. Use STL instead.
---
src/aircraft_cmd.cpp | 2 +-
src/autoreplace_gui.cpp | 2 +-
src/build_vehicle_gui.cpp | 5 ++-
src/clear_cmd.cpp | 2 +-
src/console_gui.cpp | 6 ++--
src/core/math_func.hpp | 77 ++++------------------------------------
src/core/overflowsafe_type.hpp | 2 ++
src/dock_gui.cpp | 2 +-
src/economy.cpp | 10 +++---
src/elrail.cpp | 2 +-
src/fileio.cpp | 2 +-
src/fontcache.cpp | 2 +-
src/graph_gui.cpp | 2 +-
src/ground_vehicle.cpp | 10 +++---
src/group_gui.cpp | 4 +--
src/highscore.cpp | 4 +--
src/industry_cmd.cpp | 23 ++++++------
src/industry_gui.cpp | 4 +--
src/linkgraph/linkgraph_gui.cpp | 2 +-
src/misc_gui.cpp | 2 +-
src/network/core/tcp_http.cpp | 4 +--
src/network/network_admin.cpp | 4 +--
src/network/network_chat_gui.cpp | 2 +-
src/network/network_content.cpp | 4 +--
src/network/network_server.cpp | 4 +--
src/newgrf.cpp | 10 +++---
src/newgrf_industries.cpp | 14 ++++----
src/newgrf_object.cpp | 6 ++--
src/newgrf_station.cpp | 6 ++--
src/object_gui.cpp | 4 +--
src/pathfinder/follow_track.hpp | 5 +--
src/pathfinder/opf/opf_ship.cpp | 4 +--
src/rail_cmd.cpp | 2 +-
src/rail_gui.cpp | 2 +-
src/saveload/afterload.cpp | 2 +-
src/saveload/misc_sl.cpp | 2 +-
src/script/api/script_rail.cpp | 4 ++-
src/ship.h | 2 +-
src/ship_cmd.cpp | 4 +--
src/spriteloader/grf.cpp | 4 +--
src/station_cmd.cpp | 12 +++----
src/station_gui.cpp | 10 +++---
src/strings.cpp | 2 +-
src/tgp.cpp | 14 ++++----
src/tile_map.cpp | 4 +--
src/tilearea.cpp | 4 +--
src/timetable_gui.cpp | 2 +-
src/town_cmd.cpp | 10 +++---
src/train_cmd.cpp | 8 ++---
src/tree_cmd.cpp | 2 +-
src/vehicle_cmd.cpp | 4 +--
src/vehicle_gui.cpp | 2 +-
src/viewport.cpp | 4 +--
src/window.cpp | 10 +++---
src/window_gui.h | 2 +-
55 files changed, 142 insertions(+), 202 deletions(-)
diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp
index c9cddbf97..ffde8f55e 100644
--- a/src/aircraft_cmd.cpp
+++ b/src/aircraft_cmd.cpp
@@ -654,7 +654,7 @@ static int UpdateAircraftSpeed(Aircraft *v, uint speed_limit = SPEED_LIMIT_NONE,
spd = min(v->cur_speed + (spd >> 8) + (v->subspeed < t), speed_limit);
/* adjust speed for broken vehicles */
- if (v->vehstatus & VS_AIRCRAFT_BROKEN) spd = min(spd, SPEED_LIMIT_BROKEN);
+ if (v->vehstatus & VS_AIRCRAFT_BROKEN) spd = min(spd, (uint)SPEED_LIMIT_BROKEN);
/* updates statusbar only if speed have changed to save CPU time */
if (spd != v->cur_speed) {
diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp
index 1074d1dd7..329e5d229 100644
--- a/src/autoreplace_gui.cpp
+++ b/src/autoreplace_gui.cpp
@@ -384,7 +384,7 @@ public:
case WID_RV_RIGHT_MATRIX: {
int side = (widget == WID_RV_LEFT_MATRIX) ? 0 : 1;
EngineID start = this->vscroll[side]->GetPosition(); // what is the offset for the start (scrolling)
- EngineID end = min(this->vscroll[side]->GetCapacity() + start, this->engines[side].Length());
+ EngineID end = min((uint)(this->vscroll[side]->GetCapacity() + start), this->engines[side].Length());
/* Do the actual drawing */
DrawEngineList((VehicleType)this->window_number, r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP,
diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp
index 655a18d7f..ac3b4cd78 100644
--- a/src/build_vehicle_gui.cpp
+++ b/src/build_vehicle_gui.cpp
@@ -1424,7 +1424,10 @@ struct BuildVehicleWindow : Window {
{
switch (widget) {
case WID_BV_LIST:
- DrawEngineList(this->vehicle_type, r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, &this->eng_list, this->vscroll->GetPosition(), min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->eng_list.Length()), this->sel_engine, false, DEFAULT_GROUP);
+ DrawEngineList(this->vehicle_type, r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP,
+ &this->eng_list, this->vscroll->GetPosition(),
+ min((uint)(this->vscroll->GetPosition() + this->vscroll->GetCapacity()), this->eng_list.Length()),
+ this->sel_engine, false, DEFAULT_GROUP);
break;
case WID_BV_SORT_ASCENDING_DESCENDING:
diff --git a/src/clear_cmd.cpp b/src/clear_cmd.cpp
index f9eb88df5..bd3cc82d8 100644
--- a/src/clear_cmd.cpp
+++ b/src/clear_cmd.cpp
@@ -193,7 +193,7 @@ static void TileLoopClearAlps(TileIndex tile)
}
/* Update snow density. */
uint current_density = GetClearDensity(tile);
- uint req_density = (k < 0) ? 0u : min((uint)k, 3);
+ uint req_density = (k < 0) ? 0u : min((uint)k, 3u);
if (current_density < req_density) {
AddClearDensity(tile, 1);
diff --git a/src/console_gui.cpp b/src/console_gui.cpp
index ed46938cd..dba10f186 100644
--- a/src/console_gui.cpp
+++ b/src/console_gui.cpp
@@ -343,7 +343,7 @@ struct IConsoleWindow : Window
virtual Point GetCaretPosition() const
{
- int delta = min(this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH, 0);
+ int delta = min(this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH, 0u);
Point pt = {this->line_offset + delta + _iconsole_cmdline.caretxoffs, this->height - this->line_height};
return pt;
@@ -351,7 +351,7 @@ struct IConsoleWindow : Window
virtual Rect GetTextBoundingRect(const char *from, const char *to) const
{
- int delta = min(this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH, 0);
+ int delta = min(this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH, 0u);
Point p1 = GetCharPosInString(_iconsole_cmdline.buf, from, FS_NORMAL);
Point p2 = from != to ? GetCharPosInString(_iconsole_cmdline.buf, from) : p1;
@@ -362,7 +362,7 @@ struct IConsoleWindow : Window
virtual const char *GetTextCharacterAtPosition(const Point &pt) const
{
- int delta = min(this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH, 0);
+ int delta = min(this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH, 0u);
if (!IsInsideMM(pt.y, this->height - this->line_height, this->height)) return NULL;
diff --git a/src/core/math_func.hpp b/src/core/math_func.hpp
index df9142462..031e007f0 100644
--- a/src/core/math_func.hpp
+++ b/src/core/math_func.hpp
@@ -12,78 +12,13 @@
#ifndef MATH_FUNC_HPP
#define MATH_FUNC_HPP
-/**
- * Returns the maximum of two values.
- *
- * This function returns the greater value of two given values.
- * If they are equal the value of a is returned.
- *
- * @param a The first value
- * @param b The second value
- * @return The greater value or a if equals
- */
-template <typename T>
-static inline T max(const T a, const T b)
-{
- return (a >= b) ? a : b;
-}
-
-/**
- * Returns the minimum of two values.
- *
- * This function returns the smaller value of two given values.
- * If they are equal the value of b is returned.
- *
- * @param a The first value
- * @param b The second value
- * @return The smaller value or b if equals
- */
-template <typename T>
-static inline T min(const T a, const T b)
-{
- return (a < b) ? a : b;
-}
+#include <algorithm>
+#include <cmath>
-/**
- * Returns the minimum of two integer.
- *
- * This function returns the smaller value of two given integers.
- *
- * @param a The first integer
- * @param b The second integer
- * @return The smaller value
- */
-static inline int min(const int a, const int b)
-{
- return min<int>(a, b);
-}
-
-/**
- * Returns the minimum of two unsigned integers.
- *
- * This function returns the smaller value of two given unsigned integers.
- *
- * @param a The first unsigned integer
- * @param b The second unsigned integer
- * @return The smaller value
- */
-static inline uint minu(const uint a, const uint b)
-{
- return min<uint>(a, b);
-}
-
-/**
- * Returns the absolute value of (scalar) variable.
- *
- * @note assumes variable to be signed
- * @param a The value we want to unsign
- * @return The unsigned value
- */
-template <typename T>
-static inline T abs(const T a)
-{
- return (a < (T)0) ? -a : a;
-}
+using std::max;
+using std::min;
+using std::abs;
+using std::fabs;
/**
* Return the smallest multiple of n equal or greater than x
diff --git a/src/core/overflowsafe_type.hpp b/src/core/overflowsafe_type.hpp
index edc25d275..92ce9ec0e 100644
--- a/src/core/overflowsafe_type.hpp
+++ b/src/core/overflowsafe_type.hpp
@@ -57,10 +57,12 @@ public:
/* Operators for addition and subtraction */
inline OverflowSafeInt operator + (const OverflowSafeInt& other) const { OverflowSafeInt result = *this; result += other; return result; }
+ inline OverflowSafeInt operator + (const int64 other) const { OverflowSafeInt result = *this; result += other; return result; }
inline OverflowSafeInt operator + (const int other) const { OverflowSafeInt result = *this; result += (int64)other; return result; }
inline OverflowSafeInt operator + (const uint other) const { OverflowSafeInt result = *this; result += (int64)other; return result; }
inline OverflowSafeInt& operator -= (const OverflowSafeInt& other) { return *this += (-other); }
inline OverflowSafeInt operator - (const OverflowSafeInt& other) const { OverflowSafeInt result = *this; result -= other; return result; }
+ inline OverflowSafeInt operator - (const int64 other) const { OverflowSafeInt result = *this; result -= other; return result; }
inline OverflowSafeInt operator - (const int other) const { OverflowSafeInt result = *this; result -= (int64)other; return result; }
inline OverflowSafeInt operator - (const uint other) const { OverflowSafeInt result = *this; result -= (int64)other; return result; }
diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp
index 79eaa89b1..2d00e469f 100644
--- a/src/dock_gui.cpp
+++ b/src/dock_gui.cpp
@@ -74,7 +74,7 @@ static TileIndex GetOtherAqueductEnd(TileIndex tile_from, TileIndex *tile_to = N
/* Direction the aqueduct is built to. */
TileIndexDiff offset = TileOffsByDiagDir(ReverseDiagDir(dir));
/* The maximum length of the aqueduct. */
- int max_length = min(_settings_game.construction.max_bridge_length, DistanceFromEdgeDir(tile_from, ReverseDiagDir(dir)) - 1);
+ int max_length = min(_settings_game.construction.max_bridge_length, (uint16)(DistanceFromEdgeDir(tile_from, ReverseDiagDir(dir)) - 1));
TileIndex endtile = tile_from;
for (int length = 0; IsValidTile(endtile) && TileX(endtile) != 0 && TileY(endtile) != 0; length++) {
diff --git a/src/economy.cpp b/src/economy.cpp
index 0106e87e1..2aef05790 100644
--- a/src/economy.cpp
+++ b/src/economy.cpp
@@ -201,7 +201,7 @@ int UpdateCompanyRatingAndValue(Company *c, bool update)
/* Generate statistics depending on recent income statistics */
{
- int numec = min(c->num_valid_stat_ent, 12);
+ int numec = min(c->num_valid_stat_ent, (byte)12);
if (numec != 0) {
const CompanyEconomyEntry *cee = c->old_economy;
Money min_income = cee->income + cee->expenses;
@@ -222,7 +222,7 @@ int UpdateCompanyRatingAndValue(Company *c, bool update)
/* Generate score depending on amount of transported cargo */
{
- int numec = min(c->num_valid_stat_ent, 4);
+ int numec = min(c->num_valid_stat_ent, (byte)4);
if (numec != 0) {
const CompanyEconomyEntry *cee = c->old_economy;
OverflowSafeInt64 total_delivered = 0;
@@ -982,7 +982,7 @@ Money GetTransportedGoodsIncome(uint num_pieces, uint dist, byte transit_days, C
/* Use callback to calculate cargo profit, if available */
if (HasBit(cs->callback_mask, CBM_CARGO_PROFIT_CALC)) {
- uint32 var18 = min(dist, 0xFFFF) | (min(num_pieces, 0xFF) << 16) | (transit_days << 24);
+ uint32 var18 = min(dist, (uint)0xFFFF) | (min(num_pieces, (uint)0xFF) << 16) | (transit_days << 24);
uint16 callback = GetCargoCallback(CBID_CARGO_PROFIT_CALC, 0, var18, cs);
if (callback != CALLBACK_FAILED) {
int result = GB(callback, 0, 14);
@@ -1151,8 +1151,8 @@ static void TriggerIndustryProduction(Industry *i)
uint cargo_waiting = i->incoming_cargo_waiting[cargo_index];
if (cargo_waiting == 0) continue;
- i->produced_cargo_waiting[0] = min(i->produced_cargo_waiting[0] + (cargo_waiting * indspec->input_cargo_multiplier[cargo_index][0] / 256), 0xFFFF);
- i->produced_cargo_waiting[1] = min(i->produced_cargo_waiting[1] + (cargo_waiting * indspec->input_cargo_multiplier[cargo_index][1] / 256), 0xFFFF);
+ i->produced_cargo_waiting[0] = min(i->produced_cargo_waiting[0] + (cargo_waiting * indspec->input_cargo_multiplier[cargo_index][0] / 256), (uint)0xFFFF);
+ i->produced_cargo_waiting[1] = min(i->produced_cargo_waiting[1] + (cargo_waiting * indspec->input_cargo_multiplier[cargo_index][1] / 256), (uint)0xFFFF);
i->incoming_cargo_waiting[cargo_index] = 0;
}
diff --git a/src/elrail.cpp b/src/elrail.cpp
index 9fdfb57a3..82bedaa7e 100644
--- a/src/elrail.cpp
+++ b/src/elrail.cpp
@@ -231,7 +231,7 @@ static int GetPCPElevation(TileIndex tile, DiagDirection PCPpos)
* Also note that the result of GetSlopePixelZ() is very special on bridge-ramps.
*/
- int z = GetSlopePixelZ(TileX(tile) * TILE_SIZE + min(x_pcp_offsets[PCPpos], TILE_SIZE - 1), TileY(tile) * TILE_SIZE + min(y_pcp_offsets[PCPpos], TILE_SIZE - 1));
+ int z = GetSlopePixelZ(TileX(tile) * TILE_SIZE + min(x_pcp_offsets[PCPpos], (int8)(TILE_SIZE - 1)), TileY(tile) * TILE_SIZE + min(y_pcp_offsets[PCPpos], (int8)(TILE_SIZE - 1)));
return (z + 2) & ~3; // this means z = (z + TILE_HEIGHT / 4) / (TILE_HEIGHT / 2) * (TILE_HEIGHT / 2);
}
diff --git a/src/fileio.cpp b/src/fileio.cpp
index 526f5b184..39b08be64 100644
--- a/src/fileio.cpp
+++ b/src/fileio.cpp
@@ -150,7 +150,7 @@ byte FioReadByte()
void FioSkipBytes(int n)
{
for (;;) {
- int m = min(_fio.buffer_end - _fio.buffer, n);
+ int m = min((int)(_fio.buffer_end - _fio.buffer), n);
_fio.buffer += m;
n -= m;
if (n == 0) break;
diff --git a/src/fontcache.cpp b/src/fontcache.cpp
index 72e42ccbb..039409881 100644
--- a/src/fontcache.cpp
+++ b/src/fontcache.cpp
@@ -278,7 +278,7 @@ FreeTypeFontCache::FreeTypeFontCache(FontSize fs, FT_Face face, int pixels) : Fo
/* Font height is minimum height plus the difference between the default
* height for this font size and the small size. */
int diff = _default_font_height[this->fs] - _default_font_height[FS_SMALL];
- pixels = Clamp(min(head->Lowest_Rec_PPEM, 20) + diff, _default_font_height[this->fs], MAX_FONT_SIZE);
+ pixels = Clamp(min(head->Lowest_Rec_PPEM, (FT_UShort)20) + diff, _default_font_height[this->fs], MAX_FONT_SIZE);
}
}
diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp
index c12c6ace4..8cec27875 100644
--- a/src/graph_gui.cpp
+++ b/src/graph_gui.cpp
@@ -1121,7 +1121,7 @@ static const StringID _performance_titles[] = {
static inline StringID GetPerformanceTitleFromValue(uint value)
{
- return _performance_titles[minu(value, 1000) >> 6];
+ return _performance_titles[min(value, 1000u) >> 6];
}
class CompanyLeagueWindow : public Window {
diff --git a/src/ground_vehicle.cpp b/src/ground_vehicle.cpp
index fcdab77b0..c6a52e381 100644
--- a/src/ground_vehicle.cpp
+++ b/src/ground_vehicle.cpp
@@ -118,7 +118,7 @@ int GroundVehicle<T, Type>::GetAcceleration() const
* Each vehicle can have U16 power, 128 vehicles, HP -> watt
* and km/h to m/s conversion below result in a maxium of
* about 1.1E11, way more than 4.3E9 of int32. */
- int64 power = this->gcache.cached_power * 746ll;
+ uint64 power = this->gcache.cached_power * 746ll;
/* This is constructed from:
* - axle resistance: U16 power * 10 for 128 vehicles.
@@ -131,7 +131,7 @@ int GroundVehicle<T, Type>::GetAcceleration() const
* * 6.2E14 before dividing by 1000
* Sum is 6.3E11, more than 4.3E9 of int32, so int64 is needed.
*/
- int64 resistance = 0;
+ uint64 resistance = 0;
bool maglev = v->GetAccelerationType() == 2;
@@ -150,10 +150,10 @@ int GroundVehicle<T, Type>::GetAcceleration() const
/* This value allows to know if the vehicle is accelerating or braking. */
AccelStatus mode = v->GetAccelerationStatus();
- const int max_te = this->gcache.cached_max_te; // [N]
+ const uint64 max_te = this->gcache.cached_max_te; // [N]
/* Constructued from power, with need to multiply by 18 and assuming
* low speed, it needs to be a 64 bit integer too. */
- int64 force;
+ uint64 force;
if (speed > 0) {
if (!maglev) {
/* Conversion factor from km/h to m/s is 5/18 to get [N] in the end. */
@@ -180,7 +180,7 @@ int GroundVehicle<T, Type>::GetAcceleration() const
int accel = ClampToI32((force - resistance) / (mass * 4));
return force < resistance ? min(-1, accel) : max(1, accel);
} else {
- return ClampToI32(min(-force - resistance, -10000) / mass);
+ return ClampToI32(min(-force - resistance, (uint64)-10000) / mass);
}
}
diff --git a/src/group_gui.cpp b/src/group_gui.cpp
index d3e1eafbb..e8e3e5363 100644
--- a/src/group_gui.cpp
+++ b/src/group_gui.cpp
@@ -576,7 +576,7 @@ public:
case WID_GL_LIST_GROUP: {
int y1 = r.top + WD_FRAMERECT_TOP;
- int max = min(this->group_sb->GetPosition() + this->group_sb->GetCapacity(), this->groups.Length());
+ int max = min((uint)(this->group_sb->GetPosition() + this->group_sb->GetCapacity()), this->groups.Length());
for (int i = this->group_sb->GetPosition(); i < max; ++i) {
const Group *g = this->groups[i];
@@ -600,7 +600,7 @@ public:
if (this->vli.index != ALL_GROUP) {
/* Mark vehicles which are in sub-groups */
int y = r.top;
- uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->vehicles.Length());
+ uint max = min((uint)(this->vscroll->GetPosition() + this->vscroll->GetCapacity()), this->vehicles.Length());
for (uint i = this->vscroll->GetPosition(); i < max; ++i) {
const Vehicle *v = this->vehicles[i];
if (v->group_id != this->vli.index) {
diff --git a/src/highscore.cpp b/src/highscore.cpp
index 86e4f5ae8..13f892c61 100644
--- a/src/highscore.cpp
+++ b/src/highscore.cpp
@@ -46,7 +46,7 @@ static const StringID _endgame_perf_titles[] = {
StringID EndGameGetPerformanceTitleFromValue(uint value)
{
- value = minu(value / 64, lengthof(_endgame_perf_titles) - 1);
+ value = min(value / 64, (uint)(lengthof(_endgame_perf_titles) - 1));
return _endgame_perf_titles[value];
}
@@ -136,7 +136,7 @@ void SaveToHighScore()
for (i = 0; i < SP_SAVED_HIGHSCORE_END; i++) {
for (hs = _highscore_table[i]; hs != endof(_highscore_table[i]); hs++) {
/* First character is a command character, so strlen will fail on that */
- byte length = min(sizeof(hs->company), StrEmpty(hs->company) ? 0 : (int)strlen(&hs->company[1]) + 1);
+ byte length = min(sizeof(hs->company), StrEmpty(hs->company) ? 0u : strlen(&hs->company[1]) + 1);
if (fwrite(&length, sizeof(length), 1, fp) != 1 || // write away string length
fwrite(hs->company, length, 1, fp) > 1 || // Yes... could be 0 bytes too
diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp
index 8fea6953a..0e731118f 100644
--- a/src/industry_cmd.cpp
+++ b/src/industry_cmd.cpp
@@ -156,7 +156,7 @@ Industry::~Industry()
}
if (GetIndustrySpec(this->type)->behaviour & INDUSTRYBEH_PLANT_FIELDS) {
- TileArea ta(this->location.tile - TileDiffXY(min(TileX(this->location.tile), 21), min(TileY(this->location.tile), 21)), 42, 42);
+ TileArea ta(this->location.tile - TileDiffXY(min(TileX(this->location.tile), 21u), min(TileY(this->location.tile), 21u)), 42, 42);
ta.ClampToMap();
/* Remove the farmland and convert it to regular tiles over time. */
@@ -500,7 +500,7 @@ static void TransportIndustryGoods(TileIndex tile)
StationFinder stations(i->location);
for (uint j = 0; j < lengthof(i->produced_cargo_waiting); j++) {
- uint cw = min(i->produced_cargo_waiting[j], 255);
+ uint cw = min(i->produced_cargo_waiting[j], (uint16)255);
if (cw > indspec->minimal_cargo && i->produced_cargo[j] != CT_INVALID) {
i->produced_cargo_waiting[j] -= cw;
@@ -1571,9 +1571,10 @@ static CommandCost CheckIfFarEnoughFromConflictingIndustry(TileIndex tile, int t
/* On a large map with many industries, it may be faster to check an area. */
static const int dmax = 14;
if (Industry::GetNumItems() > (size_t) (dmax * dmax * 2)) {
- const int tx = TileX(tile);
- const int ty = TileY(tile);
- TileArea tile_area = TileArea(TileXY(max(0, tx - dmax), max(0, ty - dmax)), TileXY(min(MapMaxX(), tx + dmax), min(MapMaxY(), ty + dmax)));
+ const uint tx = TileX(tile);
+ const uint ty = TileY(tile);
+ TileArea tile_area = TileArea(TileXY(max<int>(0, tx - dmax), max<int>(0, ty - dmax)),
+ TileXY(min(MapMaxX(), tx + dmax), min(MapMaxY(), ty + dmax)));
TILE_AREA_LOOP(atile, tile_area) {
if (GetTileType(atile) == MP_INDUSTRY) {
const Industry *i2 = Industry::GetByTile(atile);
@@ -1652,8 +1653,8 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type,
/* don't use smooth economy for industries using production related callbacks */
if (indspec->UsesSmoothEconomy()) {
- i->production_rate[0] = min((RandomRange(256) + 128) * i->production_rate[0] >> 8, 255);
- i->production_rate[1] = min((RandomRange(256) + 128) * i->production_rate[1] >> 8, 255);
+ i->production_rate[0] = min((RandomRange(256) + 128) * i->production_rate[0] >> 8, 255u);
+ i->production_rate[1] = min((RandomRange(256) + 128) * i->production_rate[1] >> 8, 255u);
}
i->town = t;
@@ -2021,7 +2022,7 @@ static uint GetNumberOfIndustries()
assert(lengthof(numof_industry_table) == ID_END);
uint difficulty = (_game_mode != GM_EDITOR) ? _settings_game.difficulty.industry_density : (uint)ID_VERY_LOW;
- return min(IndustryPool::MAX_SIZE, ScaleByMapSize(numof_industry_table[difficulty]));
+ return min<uint>(IndustryPool::MAX_SIZE, ScaleByMapSize(numof_industry_table[difficulty]));
}
/**
@@ -2188,8 +2189,8 @@ void Industry::RecomputeProductionMultipliers()
assert(!indspec->UsesSmoothEconomy());
/* Rates are rounded up, so e.g. oilrig always produces some passengers */
- this->production_rate[0] = min(CeilDiv(indspec->production_rate[0] * this->prod_level, PRODLEVEL_DEFAULT), 0xFF);
- this->production_rate[1] = min(CeilDiv(indspec->production_rate[1] * this->prod_level, PRODLEVEL_DEFAULT), 0xFF);
+ this->production_rate[0] = min(CeilDiv(indspec->production_rate[0] * this->prod_level, PRODLEVEL_DEFAULT), 0xFFu);
+ this->production_rate[1] = min(CeilDiv(indspec->production_rate[1] * this->prod_level, PRODLEVEL_DEFAULT), 0xFFu);
}
@@ -2588,7 +2589,7 @@ static void ChangeIndustryProduction(Industry *i, bool monthly)
/* Increase if needed */
while (mul-- != 0 && i->prod_level < PRODLEVEL_MAXIMUM) {
- i->prod_level = min(i->prod_level * 2, PRODLEVEL_MAXIMUM);
+ i->prod_level = min(i->prod_level * 2, (int)PRODLEVEL_MAXIMUM);
recalculate_multipliers = true;
if (str == STR_NULL) str = indspec->production_up_text;
}
diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp
index 41b3c573f..ac70efe7c 100644
--- a/src/industry_gui.cpp
+++ b/src/industry_gui.cpp
@@ -926,7 +926,7 @@ public:
i->prod_level = max<uint>(i->prod_level / 2, PRODLEVEL_MINIMUM);
} else {
if (i->prod_level >= PRODLEVEL_MAXIMUM) return;
- i->prod_level = minu(i->prod_level * 2, PRODLEVEL_MAXIMUM);
+ i->prod_level = min<uint>(i->prod_level * 2, PRODLEVEL_MAXIMUM);
}
break;
@@ -938,7 +938,7 @@ public:
if (i->production_rate[line - IL_RATE1] >= 255) return;
/* a zero production industry is unlikely to give anything but zero, so push it a little bit */
int new_prod = i->production_rate[line - IL_RATE1] == 0 ? 1 : i->production_rate[line - IL_RATE1] * 2;
- i->production_rate[line - IL_RATE1] = minu(new_prod, 255);
+ i->production_rate[line - IL_RATE1] = min(new_prod, 255);
}
break;
diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp
index 1fe34fe79..7d067aed2 100644
--- a/src/linkgraph/linkgraph_gui.cpp
+++ b/src/linkgraph/linkgraph_gui.cpp
@@ -246,7 +246,7 @@ void LinkGraphOverlay::DrawStationDots(const DrawPixelInfo *dpi) const
Point pt = this->GetStationMiddle(st);
if (!this->IsPointVisible(pt, dpi, 3 * this->scale)) continue;
- uint r = this->scale * 2 + this->scale * 2 * min(200, i->second) / 200;
+ uint r = this->scale * 2 + this->scale * 2 * min(200u, i->second) / 200;
LinkGraphOverlay::DrawVertex(pt.x, pt.y, r,
_colour_gradient[st->owner != OWNER_NONE ?
diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp
index 03500c2a2..1ac907763 100644
--- a/src/misc_gui.cpp
+++ b/src/misc_gui.cpp
@@ -692,7 +692,7 @@ struct TooltipsWindow : public Window
/* There is only one widget. */
for (uint i = 0; i != this->paramcount; i++) SetDParam(i, this->params[i]);
- size->width = min(GetStringBoundingBox(this->string_id).width, ScaleGUITrad(194));
+ size->width = min(GetStringBoundingBox(this->string_id).width, (uint)ScaleGUITrad(194));
size->height = GetStringHeight(this->string_id, size->width);
/* Increase slightly to have some space around the box. */
diff --git a/src/network/core/tcp_http.cpp b/src/network/core/tcp_http.cpp
index a8bb64080..442bd1717 100644
--- a/src/network/core/tcp_http.cpp
+++ b/src/network/core/tcp_http.cpp
@@ -255,7 +255,7 @@ int NetworkHTTPSocketHandler::Receive()
/* Wait till we read the end-of-header identifier */
if (this->recv_length == 0) {
int read = this->recv_pos + res;
- int end = min(read, lengthof(this->recv_buffer) - 1);
+ int end = min<uint>(read, lengthof(this->recv_buffer) - 1);
/* Do a 'safe' search for the end of the header. */
char prev = this->recv_buffer[end];
@@ -285,7 +285,7 @@ int NetworkHTTPSocketHandler::Receive()
this->recv_pos = 0;
}
} else {
- res = min(this->recv_length, res);
+ res = min<ssize_t>(this->recv_length, res);
/* Receive whatever we're expecting. */
this->callback->OnReceiveData(this->recv_buffer, res);
this->recv_length -= res;
diff --git a/src/network/network_admin.cpp b/src/network/network_admin.cpp
index c1ca3d3bb..b801e0225 100644
--- a/src/network/network_admin.cpp
+++ b/src/network/network_admin.cpp
@@ -419,13 +419,13 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyEconomy()
p->Send_uint64(company->money);
p->Send_uint64(company->current_loan);
p->Send_uint64(income);
- p->Send_uint16(min(UINT16_MAX, company->cur_economy.delivered_cargo.GetSum<OverflowSafeInt64>()));
+ p->Send_uint16(min<int64>(UINT16_MAX, company->cur_economy.delivered_cargo.GetSum<OverflowSafeInt64>()));
/* Send stats for the last 2 quarters. */
for (uint i = 0; i < 2; i++) {
p->Send_uint64(company->old_economy[i].company_value);
p->Send_uint16(company->old_economy[i].performance_history);
- p->Send_uint16(min(UINT16_MAX, company->old_economy[i].delivered_cargo.GetSum<OverflowSafeInt64>()));
+ p->Send_uint16(min<int64>(UINT16_MAX, company->old_economy[i].delivered_cargo.GetSum<OverflowSafeInt64>()));
}
this->SendPacket(p);
diff --git a/src/network/network_chat_gui.cpp b/src/network/network_chat_gui.cpp
index 68e148987..5691eb84a 100644
--- a/src/network/network_chat_gui.cpp
+++ b/src/network/network_chat_gui.cpp
@@ -233,7 +233,7 @@ void NetworkDrawChatMessage()
_cur_dpi = &_screen; // switch to _screen painting
- int string_height = 0;
+ uint string_height = 0;
for (uint i = 0; i < count; i++) {
SetDParamStr(0, _chatmsg_list[i].message);
string_height += GetStringLineCount(STR_JUST_RAW_STRING, width - 1) * FONT_HEIGHT_NORMAL + NETWORK_CHAT_LINE_SPACING;
diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp
index e998aaeaf..277844d87 100644
--- a/src/network/network_content.cpp
+++ b/src/network/network_content.cpp
@@ -222,7 +222,7 @@ void ClientNetworkContentSocketHandler::RequestContentList(uint count, const Con
* A packet begins with the packet size and a byte for the type.
* Then this packet adds a uint16 for the count in this packet.
* The rest of the packet can be used for the IDs. */
- uint p_count = min(count, (SEND_MTU - sizeof(PacketSize) - sizeof(byte) - sizeof(uint16)) / sizeof(uint32));
+ uint p_count = min<uint>(count, (SEND_MTU - sizeof(PacketSize) - sizeof(byte) - sizeof(uint16)) / sizeof(uint32));
Packet *p = new Packet(PACKET_CONTENT_CLIENT_INFO_ID);
p->Send_uint16(p_count);
@@ -361,7 +361,7 @@ void ClientNetworkContentSocketHandler::DownloadSelectedContentFallback(const Co
* A packet begins with the packet size and a byte for the type.
* Then this packet adds a uint16 for the count in this packet.
* The rest of the packet can be used for the IDs. */
- uint p_count = min(count, (SEND_MTU - sizeof(PacketSize) - sizeof(byte) - sizeof(uint16)) / sizeof(uint32));
+ uint p_count = min<uint>(count, (SEND_MTU - sizeof(PacketSize) - sizeof(byte) - sizeof(uint16)) / sizeof(uint32));
Packet *p = new Packet(PACKET_CONTENT_CLIENT_CONTENT);
p->Send_uint16(p_count);
diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp
index bcee40852..a071699d8 100644
--- a/src/network/network_server.cpp
+++ b/src/network/network_server.cpp
@@ -176,7 +176,7 @@ struct PacketWriter : SaveFilter {
byte *bufe = buf + size;
while (buf != bufe) {
- size_t to_write = min(SEND_MTU - this->current->size, bufe - buf);
+ size_t to_write = min<int>(SEND_MTU - this->current->size, bufe - buf);
memcpy(this->current->buffer + this->current->size, buf, to_write);
this->current->size += (PacketSize)to_write;
buf += to_write;
@@ -1821,7 +1821,7 @@ void NetworkServer_Tick(bool send_frame)
FOR_ALL_CLIENT_SOCKETS(cs) {
/* We allow a number of bytes per frame, but only to the burst amount
* to be available for packet receiving at any particular time. */
- cs->receive_limit = min(cs->receive_limit + _settings_client.network.bytes_per_frame,
+ cs->receive_limit = min<uint16>(cs->receive_limit + _settings_client.network.bytes_per_frame,
_settings_client.network.bytes_per_frame_burst);
/* Check if the speed of the client is what we can expect from a client */
diff --git a/src/newgrf.cpp b/src/newgrf.cpp
index 1e5ccca92..a5cf348d7 100644
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -662,7 +662,7 @@ static Engine *GetNewEngine(const GRFFile *file, VehicleType type, uint16 intern
eid->type = type;
eid->grfid = scope_grfid; // Note: this is INVALID_GRFID if dynamic_engines is disabled, so no reservation
eid->internal_id = internal_id;
- eid->substitute_id = min(internal_id, _engine_counts[type]); // substitute_id == _engine_counts[subtype] means "no substitute"
+ eid->substitute_id = min(internal_id, (uint16)_engine_counts[type]); // substitute_id == _engine_counts[subtype] means "no substitute"
if (engine_pool_size != Engine::GetPoolSize()) {
/* Resize temporary engine data ... */
@@ -2449,7 +2449,7 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt
}
case 0x16: // Periodic refresh multiplier
- housespec->processing_time = min(buf->ReadByte(), 63);
+ housespec->processing_time = min<byte>(buf->ReadByte(), 63);
break;
case 0x17: // Four random colours to use
@@ -7285,7 +7285,7 @@ static bool ChangeGRFNumUsedParams(size_t len, ByteReader *buf)
grfmsg(2, "StaticGRFInfo: expected only 1 byte for 'INFO'->'NPAR' but got " PRINTF_SIZE ", ignoring this field", len);
buf->Skip(len);
} else {
- _cur.grfconfig->num_valid_params = min(buf->ReadByte(), lengthof(_cur.grfconfig->param));
+ _cur.grfconfig->num_valid_params = min<byte>(buf->ReadByte(), lengthof(_cur.grfconfig->param));
}
return true;
}
@@ -7433,8 +7433,8 @@ static bool ChangeGRFParamMask(size_t len, ByteReader *buf)
buf->Skip(len - 1);
} else {
_cur_parameter->param_nr = param_nr;
- if (len >= 2) _cur_parameter->first_bit = min(buf->ReadByte(), 31);
- if (len >= 3) _cur_parameter->num_bit = min(buf->ReadByte(), 32 - _cur_parameter->first_bit);
+ if (len >= 2) _cur_parameter->first_bit = min<byte>(buf->ReadByte(), 31);
+ if (len >= 3) _cur_parameter->num_bit = min<byte>(buf->ReadByte(), 32 - _cur_parameter->first_bit);
}
}
diff --git a/src/newgrf_industries.cpp b/src/newgrf_industries.cpp
index e8486e760..ab3761695 100644
--- a/src/newgrf_industries.cpp
+++ b/src/newgrf_industries.cpp
@@ -143,7 +143,7 @@ static uint32 GetCountAndDistanceOfClosestInstance(byte param_setID, byte layout
/* If the filter is 0, it could be because none was specified as well as being really a 0.
* In either case, just do the regular var67 */
closest_dist = GetClosestIndustry(current->location.tile, ind_index, current);
- count = min(Industry::GetIndustryTypeCount(ind_index), UINT8_MAX); // clamp to 8 bit
+ count = min<uint16>(Industry::GetIndustryTypeCount(ind_index), UINT8_MAX); // clamp to 8 bit
} else {
/* Count only those who match the same industry type and layout filter
* Unfortunately, we have to do it manually */
@@ -184,7 +184,7 @@ static uint32 GetCountAndDistanceOfClosestInstance(byte param_setID, byte layout
case 0x88: return GetTownRadiusGroup(this->industry->town, this->tile);
/* Manhattan distance of the closest town */
- case 0x89: return min(DistanceManhattan(this->industry->town->xy, this->tile), 255);
+ case 0x89: return min(DistanceManhattan(this->industry->town->xy, this->tile), 255u);
/* Lowest height of the tile */
case 0x8A: return Clamp(GetTileZ(this->tile) * (this->ro.grffile->grf_version >= 8 ? 1 : TILE_HEIGHT), 0, 0xFF);
@@ -193,7 +193,7 @@ static uint32 GetCountAndDistanceOfClosestInstance(byte param_setID, byte layout
case 0x8B: return GetClosestWaterDistance(this->tile, (GetIndustrySpec(this->industry->type)->behaviour & INDUSTRYBEH_BUILT_ONWATER) == 0);
/* Square of Euclidian distance from town */
- case 0x8D: return min(DistanceSquare(this->industry->town->xy, this->tile), 65535);
+ case 0x8D: return min(DistanceSquare(this->industry->town->xy, this->tile), 65535u);
/* 32 random bits */
case 0x8F: return this->random_bits;
@@ -217,9 +217,9 @@ static uint32 GetCountAndDistanceOfClosestInstance(byte param_setID, byte layout
if (HasBit(callback, CBM_IND_PRODUCTION_CARGO_ARRIVAL) || HasBit(callback, CBM_IND_PRODUCTION_256_TICKS)) {
if ((indspec->behaviour & INDUSTRYBEH_PROD_MULTI_HNDLING) != 0) {
if (this->industry->prod_level == 0) return 0;
- return min(this->industry->incoming_cargo_waiting[variable - 0x40] / this->industry->prod_level, (uint16)0xFFFF);
+ return min<uint16>(this->industry->incoming_cargo_waiting[variable - 0x40] / this->industry->prod_level, 0xFFFF);
} else {
- return min(this->industry->incoming_cargo_waiting[variable - 0x40], (uint16)0xFFFF);
+ return min<uint16>(this->industry->incoming_cargo_waiting[variable - 0x40], 0xFFFF);
}
} else {
return 0;
@@ -284,11 +284,11 @@ static uint32 GetCountAndDistanceOfClosestInstance(byte param_setID, byte layout
/* Get town zone and Manhattan distance of closest town */
case 0x65:
if (this->tile == INVALID_TILE) break;
- return GetTownRadiusGroup(this->industry->town, this->tile) << 16 | min(DistanceManhattan(this->tile, this->industry->town->xy), 0xFFFF);
+ return GetTownRadiusGroup(this->industry->town, this->tile) << 16 | min(DistanceManhattan(this->tile, this->industry->town->xy), 0xFFFFu);
/* Get square of Euclidian distance of closes town */
case 0x66:
if (this->tile == INVALID_TILE) break;
- return GetTownRadiusGroup(this->industry->town, this->tile) << 16 | min(DistanceSquare(this->tile, this->industry->town->xy), 0xFFFF);
+ return GetTownRadiusGroup(this->industry->town, this->tile) << 16 | min(DistanceSquare(this->tile, this->industry->town->xy), 0xFFFFu);
/* Count of industry, distance of closest instance
* 68 is the same as 67, but with a filtering on selected layout */
diff --git a/src/newgrf_object.cpp b/src/newgrf_object.cpp
index 058d5e0c0..3d6806a80 100644
--- a/src/newgrf_object.cpp
+++ b/src/newgrf_object.cpp
@@ -242,7 +242,7 @@ static uint32 GetCountAndDistanceOfClosestInstance(byte local_id, uint32 grfid,
/* If the object type is invalid, there is none and the closest is far away. */
if (idx >= NUM_OBJECTS) return 0 | 0xFFFF;
- return Object::GetTypeCount(idx) << 16 | min(GetClosestObject(tile, idx, current), 0xFFFF);
+ return Object::GetTypeCount(idx) << 16 | min(GetClosestObject(tile, idx, current), 0xFFFFu);
}
/** Used by the resolver to get values for feature 0F deterministic spritegroups. */
@@ -317,10 +317,10 @@ static uint32 GetCountAndDistanceOfClosestInstance(byte local_id, uint32 grfid,
case 0x44: return GetTileOwner(this->tile);
/* Get town zone and Manhattan distance of closest town */
- case 0x45: return GetTownRadiusGroup(t, this->tile) << 16 | min(DistanceManhattan(this->tile, t->xy), 0xFFFF);
+ case 0x45: return GetTownRadiusGroup(t, this->tile) << 16 | min(DistanceManhattan(this->tile, t->xy), 0xFFFFu);
/* Get square of Euclidian distance of closes town */
- case 0x46: return GetTownRadiusGroup(t, this->tile) << 16 | min(DistanceSquare(this->tile, t->xy), 0xFFFF);
+ case 0x46: return GetTownRadiusGroup(t, this->tile) << 16 | min(DistanceSquare(this->tile, t->xy), 0xFFFFu);
/* Object colour */
case 0x47: return this->obj->colour;
diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp
index cd5dad7b4..716a8607e 100644
--- a/src/newgrf_station.cpp
+++ b/src/newgrf_station.cpp
@@ -423,7 +423,7 @@ uint32 Station::GetNewGRFVariable(const ResolverObject &object, byte variable, b
const GoodsEntry *ge = &this->goods[c];
switch (variable) {
- case 0x60: return min(ge->cargo.TotalCount(), 4095);
+ case 0x60: return min(ge->cargo.TotalCount(), 0xFFFu);
case 0x61: return ge->HasVehicleEverTriedLoading() ? ge->time_since_pickup : 0;
case 0x62: return ge->HasRating() ? ge->rating : 0xFFFFFFFF;
case 0x63: return ge->cargo.DaysInTransit();
@@ -443,7 +443,7 @@ uint32 Station::GetNewGRFVariable(const ResolverObject &object, byte variable, b
const GoodsEntry *g = &this->goods[GB(variable - 0x8C, 3, 4)];
switch (GB(variable - 0x8C, 0, 3)) {
case 0: return g->cargo.TotalCount();
- case 1: return GB(min(g->cargo.TotalCount(), 4095), 0, 4) | (GB(g->status, GoodsEntry::GES_ACCEPTANCE, 1) << 7);
+ case 1: return GB(min(g->cargo.TotalCount(), 0xFFFu), 0, 4) | (GB(g->status, GoodsEntry::GES_ACCEPTANCE, 1) << 7);
case 2: return g->time_since_pickup;
case 3: return g->rating;
case 4: return g->cargo.Source();
@@ -519,7 +519,7 @@ uint32 Waypoint::GetNewGRFVariable(const ResolverObject &object, byte variable,
}
if (HasBit(this->station_scope.statspec->flags, SSF_DIV_BY_STATION_SIZE)) cargo /= (st->train_station.w + st->train_station.h);
- cargo = min(0xfff, cargo);
+ cargo = min(cargo, 0xFFFu);
if (cargo > this->station_scope.statspec->cargo_threshold) {
if (group->num_loading > 0) {
diff --git a/src/object_gui.cpp b/src/object_gui.cpp
index 57c45d09c..36b0e0179 100644
--- a/src/object_gui.cpp
+++ b/src/object_gui.cpp
@@ -276,7 +276,7 @@ public:
DrawOrigTileSeqInGUI((r.right - r.left) / 2 - 1, r.bottom - r.top - OBJECT_MARGIN - ScaleGUITrad(TILE_PIXELS), dts, PAL_NONE);
} else {
DrawNewObjectTileInGUI((r.right - r.left) / 2 - 1, r.bottom - r.top - OBJECT_MARGIN - ScaleGUITrad(TILE_PIXELS), spec,
- min(_selected_object_view, spec->views - 1));
+ min<uint8>(_selected_object_view, spec->views - 1));
}
_cur_dpi = old_dpi;
}
@@ -334,7 +334,7 @@ public:
_selected_object_index = object_index;
if (_selected_object_index != -1) {
const ObjectSpec *spec = ObjectClass::Get(_selected_object_class)->GetSpec(_selected_object_index);
- _selected_object_view = min(_selected_object_view, spec->views - 1);
+ _selected_object_view = min<uint8>(_selected_object_view, spec->views - 1);
this->ReInit();
} else {
_selected_object_view = 0;
diff --git a/src/pathfinder/follow_track.hpp b/src/pathfinder/follow_track.hpp
index 9f19b029c..6115eefef 100644
--- a/src/pathfinder/follow_track.hpp
+++ b/src/pathfinder/follow_track.hpp
@@ -456,10 +456,7 @@ public:
if (max_speed > spd) max_speed = spd;
}
/* Check for speed limit imposed by railtype */
- if (IsRailTT()) {
- uint16 rail_speed = GetRailTypeInfo(GetRailType(m_old_tile))->max_speed;
- if (rail_speed > 0) max_speed = min(max_speed, rail_speed);
- }
+ if (IsRailTT()) max_speed = min<uint16>(max_speed, GetRailTypeInfo(GetRailType(m_old_tile))->max_speed);
/* if min speed was requested, return it */
if (pmin_speed != NULL) *pmin_speed = min_speed;
diff --git a/src/pathfinder/opf/opf_ship.cpp b/src/pathfinder/opf/opf_ship.cpp
index 023c6a4a0..ebf938467 100644
--- a/src/pathfinder/opf/opf_ship.cpp
+++ b/src/pathfinder/opf/opf_ship.cpp
@@ -38,13 +38,13 @@ static bool ShipTrackFollower(TileIndex tile, TrackPathFinder *pfs, uint length)
if (tile == pfs->dest_coords) {
pfs->best_bird_dist = 0;
- pfs->best_length = minu(pfs->best_length, length);
+ pfs->best_length = min(pfs->best_length, length);
return true;
}
/* Skip this tile in the calculation */
if (tile != pfs->skiptile) {
- pfs->best_bird_dist = minu(pfs->best_bird_dist, DistanceMaxPlusManhattan(pfs->dest_coords, tile));
+ pfs->best_bird_dist = min(pfs->best_bird_dist, DistanceMaxPlusManhattan(pfs->dest_coords, tile));
}
return false;
diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp
index 9f284fc30..51b57fce3 100644
--- a/src/rail_cmd.cpp
+++ b/src/rail_cmd.cpp
@@ -2831,7 +2831,7 @@ static void GetTileDesc_Track(TileIndex tile, TileDesc *td)
td->str = STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT;
if (_settings_game.vehicle.train_acceleration_model != AM_ORIGINAL) {
if (td->rail_speed > 0) {
- td->rail_speed = min(td->rail_speed, 61);
+ td->rail_speed = min<uint16>(td->rail_speed, 61);
} else {
td->rail_speed = 61;
}
diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp
index 73fe29da0..08f66bfbe 100644
--- a/src/rail_gui.cpp
+++ b/src/rail_gui.cpp
@@ -974,7 +974,7 @@ public:
}
if (newstation) {
_railstation.station_count = StationClass::Get(_railstation.station_class)->GetSpecCount();
- _railstation.station_type = min(_railstation.station_type, _railstation.station_count - 1);
+ _railstation.station_type = min<byte>(_railstation.station_type, _railstation.station_count - 1);
int count = 0;
for (uint i = 0; i < StationClass::GetClassCount(); i++) {
diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp
index d5d9bc3a4..5f645dddc 100644
--- a/src/saveload/afterload.cpp
+++ b/src/saveload/afterload.cpp
@@ -2423,7 +2423,7 @@ bool AfterLoadGame()
uint per_proc = _me[t].m7;
_me[t].m7 = GB(_me[t].m6, 2, 6) | (GB(_m[t].m3, 5, 1) << 6);
SB(_m[t].m3, 5, 1, 0);
- SB(_me[t].m6, 2, 6, min(per_proc, 63));
+ SB(_me[t].m6, 2, 6, min(per_proc, 63u));
}
break;
diff --git a/src/saveload/misc_sl.cpp b/src/saveload/misc_sl.cpp
index c7bd31e81..13db43e74 100644
--- a/src/saveload/misc_sl.cpp
+++ b/src/saveload/misc_sl.cpp
@@ -53,7 +53,7 @@ void ResetViewportAfterLoadGame()
w->viewport->dest_scrollpos_y = _saved_scrollpos_y;
ViewPort *vp = w->viewport;
- vp->zoom = (ZoomLevel)min(_saved_scrollpos_zoom, ZOOM_LVL_MAX);
+ vp->zoom = min<ZoomLevel>(_saved_scrollpos_zoom, ZOOM_LVL_MAX);
vp->virtual_width = ScaleByZoom(vp->width, vp->zoom);
vp->virtual_height = ScaleByZoom(vp->height, vp->zoom);
diff --git a/src/script/api/script_rail.cpp b/src/script/api/script_rail.cpp
index af68a3edc..9ac7f7164 100644
--- a/src/script/api/script_rail.cpp
+++ b/src/script/api/script_rail.cpp
@@ -180,7 +180,9 @@
if (station_id != ScriptStation::STATION_JOIN_ADJACENT) p1 |= (1 << 24);
const GRFFile *file;
- uint16 res = GetAiPurchaseCallbackResult(GSF_STATIONS, cargo_id, 0, source_industry, goal_industry, min(255, distance / 2), AICE_STATION_GET_STATION_ID, source_station ? 0 : 1, min(15, num_platforms) << 4 | min(15, platform_length), &file);
+ uint16 res = GetAiPurchaseCallbackResult(GSF_STATIONS, cargo_id, 0, source_industry, goal_industry, min(255, distance / 2),
+ AICE_STATION_GET_STATION_ID, source_station ? 0 : 1,
+ min(15u, num_platforms) << 4 | min(15u, platform_length), &file);
uint32 p2 = (ScriptStation::IsValidStation(station_id) ? station_id : INVALID_STATION) << 16;
if (res != CALLBACK_FAILED) {
int index = 0;
diff --git a/src/ship.h b/src/ship.h
index c94cbcddb..6f824712b 100644
--- a/src/ship.h
+++ b/src/ship.h
@@ -37,7 +37,7 @@ struct Ship FINAL : public SpecializedVehicle<Ship, VEH_SHIP> {
void GetImage(Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) const;
int GetDisplaySpeed() const { return this->cur_speed / 2; }
int GetDisplayMaxSpeed() const { return this->vcache.cached_max_speed / 2; }
- int GetCurrentMaxSpeed() const { return min(this->vcache.cached_max_speed, this->current_order.GetMaxSpeed() * 2); }
+ int GetCurrentMaxSpeed() const { return min(this->vcache.cached_max_speed, (uint16)(this->current_order.GetMaxSpeed() * 2)); }
Money GetRunningCost() const;
bool IsInDepot() const { return this->state == TRACK_BIT_DEPOT; }
bool Tick();
diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp
index 771863a24..58d773ba2 100644
--- a/src/ship_cmd.cpp
+++ b/src/ship_cmd.cpp
@@ -383,8 +383,8 @@ static bool ShipAccelerate(Vehicle *v)
uint spd;
byte t;
- spd = min(v->cur_speed + 1, v->vcache.cached_max_speed);
- spd = min(spd, v->current_order.GetMaxSpeed() * 2);
+ spd = min<uint16>(v->cur_speed + 1, v->vcache.cached_max_speed);
+ spd = min(spd, v->current_order.GetMaxSpeed() * 2u);
/* updates statusbar only if speed have changed to save CPU time */
if (spd != v->cur_speed) {
diff --git a/src/spriteloader/grf.cpp b/src/spriteloader/grf.cpp
index b21e70b1d..8d43501f5 100644
--- a/src/spriteloader/grf.cpp
+++ b/src/spriteloader/grf.cpp
@@ -166,7 +166,7 @@ bool DecodeSingleSprite(SpriteLoader::Sprite *sprite, uint8 file_slot, size_t fi
if (colour_fmt & SCC_PAL) {
switch (sprite_type) {
case ST_NORMAL: data->m = _palette_remap_grf[file_slot] ? _palmap_w2d[*dest] : *dest; break;
- case ST_FONT: data->m = min(*dest, 2u); break;
+ case ST_FONT: data->m = min<byte>(*dest, 2); break;
default: data->m = *dest; break;
}
/* Magic blue. */
@@ -202,7 +202,7 @@ bool DecodeSingleSprite(SpriteLoader::Sprite *sprite, uint8 file_slot, size_t fi
if (colour_fmt & SCC_PAL) {
switch (sprite_type) {
case ST_NORMAL: sprite->data[i].m = _palette_remap_grf[file_slot] ? _palmap_w2d[*pixel] : *pixel; break;
- case ST_FONT: sprite->data[i].m = min(*pixel, 2u); break;
+ case ST_FONT: sprite->data[i].m = min<byte>(*pixel, 2); break;
default: sprite->data[i].m = *pixel; break;
}
/* Magic blue. */
diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp
index 5fd865a0d..f633c9e5f 100644
--- a/src/station_cmd.cpp
+++ b/src/station_cmd.cpp
@@ -480,10 +480,10 @@ CargoArray GetProductionAroundTiles(TileIndex tile, int w, int h, int rad)
/* expand the region by rad tiles on each side
* while making sure that we remain inside the board. */
- int x2 = min(x + w + rad, MapSizeX());
+ int x2 = min(x + w + rad, (int)MapSizeX());
int x1 = max(x - rad, 0);
- int y2 = min(y + h + rad, MapSizeY());
+ int y2 = min(y + h + rad, (int)MapSizeY());
int y1 = max(y - rad, 0);
assert(x1 < x2);
@@ -534,8 +534,8 @@ CargoArray GetAcceptanceAroundTiles(TileIndex tile, int w, int h, int rad, uint3
/* expand the region by rad tiles on each side
* while making sure that we remain inside the board. */
- int x2 = min(x + w + rad, MapSizeX());
- int y2 = min(y + h + rad, MapSizeY());
+ int x2 = min(x + w + rad, (int)MapSizeX());
+ int y2 = min(y + h + rad, (int)MapSizeY());
int x1 = max(x - rad, 0);
int y1 = max(y - rad, 0);
@@ -3311,7 +3311,7 @@ static void UpdateStationRating(Station *st)
/* NewGRFs expect last speed to be 0xFF when no vehicle has arrived yet. */
uint last_speed = ge->HasVehicleEverTriedLoading() ? ge->last_speed : 0xFF;
- uint32 var18 = min(ge->time_since_pickup, 0xFF) | (min(ge->max_waiting_cargo, 0xFFFF) << 8) | (min(last_speed, 0xFF) << 24);
+ uint32 var18 = min<byte>(ge->time_since_pickup, 0xFF) | (min(ge->max_waiting_cargo, 0xFFFFu) << 8) | (min<byte>(last_speed, 0xFF) << 24);
/* Convert to the 'old' vehicle types */
uint32 var10 = (st->last_vehicle_type == VEH_INVALID) ? 0x0 : (st->last_vehicle_type + 0x10);
uint16 callback = GetCargoCallback(CBID_CARGO_STATION_RATING_CALC, var10, var18, cs);
@@ -3603,7 +3603,7 @@ void IncreaseStats(Station *st, const Vehicle *front, StationID next_station_id)
* As usage is not such an important figure anyway we just
* ignore the additional cargo then.*/
IncreaseStats(st, v->cargo_type, next_station_id, v->refit_cap,
- min(v->refit_cap, v->cargo.StoredCount()), EUM_INCREASE);
+ min(v->refit_cap, (uint16)v->cargo.StoredCount()), EUM_INCREASE);
}
}
}
diff --git a/src/station_gui.cpp b/src/station_gui.cpp
index aa2017018..dd454c13b 100644
--- a/src/station_gui.cpp
+++ b/src/station_gui.cpp
@@ -111,14 +111,14 @@ void CheckRedrawStationCoverage(const Window *w)
static void StationsWndShowStationRating(int left, int right, int y, CargoID type, uint amount, byte rating)
{
static const uint units_full = 576; ///< number of units to show station as 'full'
- static const uint rating_full = 224; ///< rating needed so it is shown as 'full'
+ static const byte rating_full = 224; ///< rating needed so it is shown as 'full'
const CargoSpec *cs = CargoSpec::Get(type);
if (!cs->IsValid()) return;
int colour = cs->rating_colour;
TextColour tc = GetContrastColour(colour);
- uint w = (minu(amount, units_full) + 5) / 36;
+ uint w = (min(amount, units_full) + 5) / 36;
int height = GetCharacterHeight(FS_SMALL);
@@ -140,7 +140,7 @@ static void StationsWndShowStationRating(int left, int right, int y, CargoID typ
/* Draw green/red ratings bar (fits into 14 pixels) */
y += height + 2;
GfxFillRect(left + 1, y, left + 14, y, PC_RED);
- rating = minu(rating, rating_full) / 16;
+ rating = min(rating, rating_full) / 16;
if (rating != 0) GfxFillRect(left + 1, y, left + rating, y, PC_GREEN);
}
@@ -411,7 +411,7 @@ public:
case WID_STL_LIST: {
bool rtl = _current_text_dir == TD_RTL;
- int max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->stations.Length());
+ int max = min<uint>(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->stations.Length());
int y = r.top + WD_FRAMERECT_TOP;
for (int i = this->vscroll->GetPosition(); i < max; ++i) { // do until max number of stations of owner
const Station *st = this->stations[i];
@@ -807,7 +807,7 @@ static const NWidgetPart _nested_station_view_widgets[] = {
static void DrawCargoIcons(CargoID i, uint waiting, int left, int right, int y)
{
int width = ScaleGUITrad(10);
- uint num = min((waiting + (width / 2)) / width, (right - left) / width); // maximum is width / 10 icons so it won't overflow
+ uint num = min<uint>(waiting + (width / 2), right - left) / width; // maximum is width / 10 icons so it won't overflow
if (num == 0) return;
SpriteID sprite = CargoSpec::Get(i)->GetCargoIcon();
diff --git a/src/strings.cpp b/src/strings.cpp
index 1c539d934..94496ea71 100644
--- a/src/strings.cpp
+++ b/src/strings.cpp
@@ -1647,7 +1647,7 @@ static char *GetSpecialNameString(char *buff, int ind, StringParameters *args, c
{
switch (ind) {
case 1: // not used
- return strecpy(buff, _silly_company_names[min(args->GetInt32() & 0xFFFF, lengthof(_silly_company_names) - 1)], last);
+ return strecpy(buff, _silly_company_names[min<uint>(args->GetInt32() & 0xFFFF, lengthof(_silly_company_names) - 1)], last);
case 2: // used for Foobar & Co company names
return GenAndCoName(buff, args->GetInt32(), last);
diff --git a/src/tgp.cpp b/src/tgp.cpp
index 436870b41..3d002d019 100644
--- a/src/tgp.cpp
+++ b/src/tgp.cpp
@@ -227,7 +227,7 @@ static height_t TGPGetMaxHeight()
* raised land 24 times in the center of the map) will leave only a ring of about 10 tiles
* around the mountain to build on. On a 4096x4096 map, it won't cover any major part of the map.
*/
- static const int max_height[5][MAX_MAP_SIZE_BITS - MIN_MAP_SIZE_BITS + 1] = {
+ static const uint8 max_height[5][MAX_MAP_SIZE_BITS - MIN_MAP_SIZE_BITS + 1] = {
/* 64 128 256 512 1024 2048 4096 */
{ 3, 3, 3, 3, 4, 5, 7 }, ///< Very flat
{ 5, 7, 8, 9, 14, 19, 31 }, ///< Flat
@@ -236,7 +236,7 @@ static height_t TGPGetMaxHeight()
{ 12, 19, 25, 31, 67, 75, 87 }, ///< Alpinist
};
- int max_height_from_table = max_height[_settings_game.difficulty.terrain_type][min(MapLogX(), MapLogY()) - MIN_MAP_SIZE_BITS];
+ uint8 max_height_from_table = max_height[_settings_game.difficulty.terrain_type][min(MapLogX(), MapLogY()) - MIN_MAP_SIZE_BITS];
return I2H(min(max_height_from_table, _settings_game.construction.max_heightlevel));
}
@@ -737,7 +737,7 @@ static void HeightMapCoastLines(uint8 water_borders)
for (y = 0; y <= _height_map.size_y; y++) {
if (HasBit(water_borders, BORDER_NE)) {
/* Top right */
- max_x = abs((perlin_coast_noise_2D(_height_map.size_y - y, y, 0.9, 53) + 0.25) * 5 + (perlin_coast_noise_2D(y, y, 0.35, 179) + 1) * 12);
+ max_x = fabs((perlin_coast_noise_2D(_height_map.size_y - y, y, 0.9, 53) + 0.25) * 5 + (perlin_coast_noise_2D(y, y, 0.35, 179) + 1) * 12);
max_x = max((smallest_size * smallest_size / 64) + max_x, (smallest_size * smallest_size / 64) + margin - max_x);
if (smallest_size < 8 && max_x > 5) max_x /= 1.5;
for (x = 0; x < max_x; x++) {
@@ -747,7 +747,7 @@ static void HeightMapCoastLines(uint8 water_borders)
if (HasBit(water_borders, BORDER_SW)) {
/* Bottom left */
- max_x = abs((perlin_coast_noise_2D(_height_map.size_y - y, y, 0.85, 101) + 0.3) * 6 + (perlin_coast_noise_2D(y, y, 0.45, 67) + 0.75) * 8);
+ max_x = fabs((perlin_coast_noise_2D(_height_map.size_y - y, y, 0.85, 101) + 0.3) * 6 + (perlin_coast_noise_2D(y, y, 0.45, 67) + 0.75) * 8);
max_x = max((smallest_size * smallest_size / 64) + max_x, (smallest_size * smallest_size / 64) + margin - max_x);
if (smallest_size < 8 && max_x > 5) max_x /= 1.5;
for (x = _height_map.size_x; x > (_height_map.size_x - 1 - max_x); x--) {
@@ -760,7 +760,7 @@ static void HeightMapCoastLines(uint8 water_borders)
for (x = 0; x <= _height_map.size_x; x++) {
if (HasBit(water_borders, BORDER_NW)) {
/* Top left */
- max_y = abs((perlin_coast_noise_2D(x, _height_map.size_y / 2, 0.9, 167) + 0.4) * 5 + (perlin_coast_noise_2D(x, _height_map.size_y / 3, 0.4, 211) + 0.7) * 9);
+ max_y = fabs((perlin_coast_noise_2D(x, _height_map.size_y / 2, 0.9, 167) + 0.4) * 5 + (perlin_coast_noise_2D(x, _height_map.size_y / 3, 0.4, 211) + 0.7) * 9);
max_y = max((smallest_size * smallest_size / 64) + max_y, (smallest_size * smallest_size / 64) + margin - max_y);
if (smallest_size < 8 && max_y > 5) max_y /= 1.5;
for (y = 0; y < max_y; y++) {
@@ -770,7 +770,7 @@ static void HeightMapCoastLines(uint8 water_borders)
if (HasBit(water_borders, BORDER_SE)) {
/* Bottom right */
- max_y = abs((perlin_coast_noise_2D(x, _height_map.size_y / 3, 0.85, 71) + 0.25) * 6 + (perlin_coast_noise_2D(x, _height_map.size_y / 3, 0.35, 193) + 0.75) * 12);
+ max_y = fabs((perlin_coast_noise_2D(x, _height_map.size_y / 3, 0.85, 71) + 0.25) * 6 + (perlin_coast_noise_2D(x, _height_map.size_y / 3, 0.35, 193) + 0.75) * 12);
max_y = max((smallest_size * smallest_size / 64) + max_y, (smallest_size * smallest_size / 64) + margin - max_y);
if (smallest_size < 8 && max_y > 5) max_y /= 1.5;
for (y = _height_map.size_y; y > (_height_map.size_y - 1 - max_y); y--) {
@@ -811,7 +811,7 @@ static void HeightMapSmoothCoastInDirection(int org_x, int org_y, int dir_x, int
* Soften the coast slope */
for (depth = 0; IsValidXY(x, y) && depth <= max_coast_Smooth_depth; depth++, x += dir_x, y += dir_y) {
h = _height_map.height(x, y);
- h = min(h, h_prev + (4 + depth)); // coast softening formula
+ h = min<height_t>(h, h_prev + (4 + depth)); // coast softening formula
_height_map.height(x, y) = h;
h_prev = h;
}
diff --git a/src/tile_map.cpp b/src/tile_map.cpp
index c566ad02c..3da742859 100644
--- a/src/tile_map.cpp
+++ b/src/tile_map.cpp
@@ -183,7 +183,7 @@ int GetTileZ(TileIndex tile)
{
if (TileX(tile) == MapMaxX() || TileY(tile) == MapMaxY()) return 0;
- int h = TileHeight(tile); // N corner
+ uint h = TileHeight(tile); // N corner
h = min(h, TileHeight(tile + TileDiffXY(1, 0))); // W corner
h = min(h, TileHeight(tile + TileDiffXY(0, 1))); // E corner
h = min(h, TileHeight(tile + TileDiffXY(1, 1))); // S corner
@@ -216,7 +216,7 @@ int GetTileMaxZ(TileIndex t)
{
if (TileX(t) == MapMaxX() || TileY(t) == MapMaxY()) return TileHeightOutsideMap(TileX(t), TileY(t));
- int h = TileHeight(t); // N corner
+ uint h = TileHeight(t); // N corner
h = max<int>(h, TileHeight(t + TileDiffXY(1, 0))); // W corner
h = max<int>(h, TileHeight(t + TileDiffXY(0, 1))); // E corner
h = max<int>(h, TileHeight(t + TileDiffXY(1, 1))); // S corner
diff --git a/src/tilearea.cpp b/src/tilearea.cpp
index ec3b9aafb..49da7f647 100644
--- a/src/tilearea.cpp
+++ b/src/tilearea.cpp
@@ -123,8 +123,8 @@ bool OrthogonalTileArea::Contains(TileIndex tile) const
void OrthogonalTileArea::ClampToMap()
{
assert(this->tile < MapSize());
- this->w = min(this->w, MapSizeX() - TileX(this->tile));
- this->h = min(this->h, MapSizeY() - TileY(this->tile));
+ this->w = min<uint16>(this->w, MapSizeX() - TileX(this->tile));
+ this->h = min<uint16>(this->h, MapSizeY() - TileY(this->tile));
}
/**
diff --git a/src/timetable_gui.cpp b/src/timetable_gui.cpp
index 664dc8034..2f2246705 100644
--- a/src/timetable_gui.cpp
+++ b/src/timetable_gui.cpp
@@ -629,7 +629,7 @@ struct TimetableWindow : Window {
if (!_settings_client.gui.timetable_in_ticks) val *= DAY_TICKS;
}
- uint32 p2 = minu(val, UINT16_MAX);
+ uint32 p2 = min<uint64>(val, UINT16_MAX);
DoCommandP(0, p1, p2, CMD_CHANGE_TIMETABLE | CMD_MSG(STR_ERROR_CAN_T_TIMETABLE_VEHICLE));
}
diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp
index daaad7e8d..7ac9302fd 100644
--- a/src/town_cmd.cpp
+++ b/src/town_cmd.cpp
@@ -344,11 +344,11 @@ static bool IsCloseToTown(TileIndex tile, uint dist)
/* On a large map with many towns, it may be faster to check the surroundings of the tile.
* An iteration in TILE_AREA_LOOP() is generally 2 times faster than one in FOR_ALL_TOWNS(). */
if (Town::GetNumItems() > (size_t) (dist * dist * 2)) {
- const int tx = TileX(tile);
- const int ty = TileY(tile);
+ const uint tx = TileX(tile);
+ const uint ty = TileY(tile);
TileArea tile_area = TileArea(
- TileXY(max(0, tx - (int) dist), max(0, ty - (int) dist)),
- TileXY(min(MapMaxX(), tx + (int) dist), min(MapMaxY(), ty + (int) dist))
+ TileXY(max<int>(0, tx - dist), max<int>(0, ty - dist)),
+ TileXY(min(MapMaxX(), tx + dist), min(MapMaxY(), ty + dist))
);
TILE_AREA_LOOP(atile, tile_area) {
if (GetTileType(atile) == MP_HOUSE) {
@@ -1951,7 +1951,7 @@ bool GenerateTowns(TownLayout layout)
uint current_number = 0;
uint difficulty = (_game_mode != GM_EDITOR) ? _settings_game.difficulty.number_towns : 0;
uint total = (difficulty == (uint)CUSTOM_TOWN_NUMBER_DIFFICULTY) ? _settings_game.game_creation.custom_town_number : ScaleByMapSize(_num_initial_towns[difficulty] + (Random() & 7));
- total = min(TownPool::MAX_SIZE, total);
+ total = min((uint)TownPool::MAX_SIZE, total);
uint32 townnameparts;
TownNames town_names;
diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp
index fb1d2b1ee..461ff1ccb 100644
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -391,7 +391,7 @@ int Train::GetCurveSpeedLimit() const
*/
int Train::GetCurrentMaxSpeed() const
{
- int max_speed = _settings_game.vehicle.train_acceleration_model == AM_ORIGINAL ?
+ uint16 max_speed = _settings_game.vehicle.train_acceleration_model == AM_ORIGINAL ?
this->gcache.cached_max_track_speed :
this->tcache.cached_max_curve_speed;
@@ -407,14 +407,14 @@ int Train::GetCurrentMaxSpeed() const
int distance_to_go = station_ahead / TILE_SIZE - (station_length - stop_at) / TILE_SIZE;
if (distance_to_go > 0) {
- int st_max_speed = 120;
+ uint16 st_max_speed = 120;
int delta_v = this->cur_speed / (distance_to_go + 1);
if (max_speed > (this->cur_speed - delta_v)) {
st_max_speed = this->cur_speed - (delta_v / 10);
}
- st_max_speed = max(st_max_speed, 25 * distance_to_go);
+ st_max_speed = max<uint16>(st_max_speed, 25 * distance_to_go);
max_speed = min(max_speed, st_max_speed);
}
}
@@ -422,7 +422,7 @@ int Train::GetCurrentMaxSpeed() const
for (const Train *u = this; u != NULL; u = u->Next()) {
if (_settings_game.vehicle.train_acceleration_model == AM_REALISTIC && u->track == TRACK_BIT_DEPOT) {
- max_speed = min(max_speed, 61);
+ max_speed = min(max_speed, (uint16)61);
break;
}
diff --git a/src/tree_cmd.cpp b/src/tree_cmd.cpp
index 7240cf86d..3e083598b 100644
--- a/src/tree_cmd.cpp
+++ b/src/tree_cmd.cpp
@@ -164,7 +164,7 @@ static void PlaceTree(TileIndex tile, uint32 r)
TreeType tree = GetRandomTreeType(tile, GB(r, 24, 8));
if (tree != TREE_INVALID) {
- PlantTreesOnTile(tile, tree, GB(r, 22, 2), min(GB(r, 16, 3), 6));
+ PlantTreesOnTile(tile, tree, GB(r, 22, 2), min(GB(r, 16, 3), 6u));
/* Rerandomize ground, if neither snow nor shore */
TreeGround ground = GetTreeGround(tile);
diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp
index 9670fa05d..8bf203257 100644
--- a/src/vehicle_cmd.cpp
+++ b/src/vehicle_cmd.cpp
@@ -394,14 +394,14 @@ static CommandCost RefitVehicle(Vehicle *v, bool only_this, uint8 num_vehicles,
/* Store the result */
for (RefitResult *result = refit_result.Begin(); result != refit_result.End(); result++) {
Vehicle *u = result->v;
- u->refit_cap = (u->cargo_type == new_cid) ? min(result->capacity, u->refit_cap) : 0;
+ u->refit_cap = (u->cargo_type == new_cid) ? min<uint16>(result->capacity, u->refit_cap) : 0;
if (u->cargo.TotalCount() > u->refit_cap) u->cargo.Truncate(u->cargo.TotalCount() - u->refit_cap);
u->cargo_type = new_cid;
u->cargo_cap = result->capacity;
u->cargo_subtype = result->subtype;
if (u->type == VEH_AIRCRAFT) {
Vehicle *w = u->Next();
- w->refit_cap = min(w->refit_cap, result->mail_capacity);
+ w->refit_cap = min<uint16>(w->refit_cap, result->mail_capacity);
w->cargo_cap = result->mail_capacity;
if (w->cargo.TotalCount() > w->refit_cap) w->cargo.Truncate(w->cargo.TotalCount() - w->refit_cap);
}
diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp
index 8ebd73a8a..a348df7a6 100644
--- a/src/vehicle_gui.cpp
+++ b/src/vehicle_gui.cpp
@@ -1388,7 +1388,7 @@ void BaseVehicleListWindow::DrawVehicleListItems(VehicleID selected_vehicle, int
int vehicle_button_x = rtl ? right - GetSpriteSize(SPR_PROFIT_LOT).width : left;
int y = r.top;
- uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->vehicles.Length());
+ uint max = min<uint>(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->vehicles.Length());
for (uint i = this->vscroll->GetPosition(); i < max; ++i) {
const Vehicle *v = this->vehicles[i];
StringID str;
diff --git a/src/viewport.cpp b/src/viewport.cpp
index df431ff3c..644da6a6a 100644
--- a/src/viewport.cpp
+++ b/src/viewport.cpp
@@ -1745,8 +1745,8 @@ static inline int ClampXYToMap(Point &curr_tile, int &iter, int iter_limit, int
/* Based on that heightlevel, calculate the limit. For the upper edge a tile with height zero would
* get a limit of zero, on the other side it depends on the number of tiles along the axis. */
return upper_edge ?
- max(vp_value, -max_heightlevel_at_edge * (int)(TILE_HEIGHT * 2 * ZOOM_LVL_BASE)) :
- min(vp_value, (other_limit * TILE_SIZE * 4 - max_heightlevel_at_edge * TILE_HEIGHT * 2) * ZOOM_LVL_BASE);
+ max<int>(vp_value, -max_heightlevel_at_edge * TILE_HEIGHT * 2 * ZOOM_LVL_BASE) :
+ min<int>(vp_value, (other_limit * TILE_SIZE * 4 - max_heightlevel_at_edge * TILE_HEIGHT * 2) * ZOOM_LVL_BASE);
}
static inline void ClampViewportToMap(const ViewPort *vp, int &x, int &y)
diff --git a/src/window.cpp b/src/window.cpp
index 6538caffd..93bc1b701 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -706,8 +706,8 @@ static void DispatchLeftClickEvent(Window *w, int x, int y, int click_count)
w->window_desc->pref_width = w->width;
w->window_desc->pref_height = w->height;
} else {
- int16 def_width = max<int16>(min(w->window_desc->GetDefaultWidth(), _screen.width), w->nested_root->smallest_x);
- int16 def_height = max<int16>(min(w->window_desc->GetDefaultHeight(), _screen.height - 50), w->nested_root->smallest_y);
+ int16 def_width = max<int16>(min<int16>(w->window_desc->GetDefaultWidth(), _screen.width), w->nested_root->smallest_x);
+ int16 def_height = max<int16>(min<int16>(w->window_desc->GetDefaultHeight(), _screen.height - 50), w->nested_root->smallest_y);
int dx = (w->resize.step_width == 0) ? 0 : def_width - w->width;
int dy = (w->resize.step_height == 0) ? 0 : def_height - w->height;
@@ -3427,7 +3427,7 @@ void ChangeVehicleViewports(VehicleID from_index, VehicleID to_index)
* @param neww New width of the game application screen
* @param newh New height of the game application screen.
*/
-void RelocateAllWindows(int neww, int newh)
+void RelocateAllWindows(uint neww, uint newh)
{
Window *w;
@@ -3479,11 +3479,11 @@ void RelocateAllWindows(int neww, int newh)
}
left = w->left;
- if (left + (w->width >> 1) >= neww) left = neww - w->width;
+ if (left + (w->width >> 1) >= (int)neww) left = neww - w->width;
if (left < 0) left = 0;
top = w->top;
- if (top + (w->height >> 1) >= newh) top = newh - w->height;
+ if (top + (w->height >> 1) >= (int)newh) top = newh - w->height;
break;
}
}
diff --git a/src/window_gui.h b/src/window_gui.h
index b81b06e39..de22be138 100644
--- a/src/window_gui.h
+++ b/src/window_gui.h
@@ -863,7 +863,7 @@ Wcls *AllocateWindowDescFront(WindowDesc *desc, int window_number, bool return_e
return new Wcls(desc, window_number);
}
-void RelocateAllWindows(int neww, int newh);
+void RelocateAllWindows(uint neww, uint newh);
/* misc_gui.cpp */
enum TooltipCloseCondition {
--
2.14.1
From 82098d956fbb6563d333199a1d084c08d67590e1 Mon Sep 17 00:00:00 2001
From: Charles Pigott <charlespigott@googlemail.com>
Date: Fri, 11 Aug 2017 21:54:54 +0100
Subject: [PATCH 4/4] Remove SmallMap type in favour of std::map
---
src/ai/ai_config.cpp | 2 +-
src/ai/ai_gui.cpp | 6 +-
src/base_media_base.h | 13 ++--
src/core/smallmap_type.hpp | 158 ------------------------------------------
src/fios.cpp | 1 +
src/fios.h | 3 +-
src/fios_gui.cpp | 11 +--
src/fontcache.cpp | 11 ++-
src/gamelog.cpp | 40 ++++++-----
src/gfx.cpp | 1 +
src/gfx_layout.cpp | 34 ++++-----
src/gfx_layout.h | 6 +-
src/linkgraph/linkgraph.h | 11 ++-
src/linkgraph/linkgraphjob.h | 4 +-
src/network/core/address.cpp | 16 ++---
src/network/core/address.h | 49 ++++++-------
src/network/core/tcp_listen.h | 12 ++--
src/network/core/udp.cpp | 12 ++--
src/newgrf.cpp | 6 +-
src/newgrf_config.cpp | 13 ++--
src/newgrf_config.h | 6 +-
src/newgrf_debug_gui.cpp | 14 ++--
src/newgrf_engine.cpp | 1 +
src/newgrf_gui.cpp | 7 +-
src/newgrf_text.cpp | 21 +++---
src/osk_gui.cpp | 4 +-
src/rail_cmd.cpp | 1 +
src/saveload/company_sl.cpp | 6 +-
src/script/script_config.hpp | 5 +-
src/script/script_info.cpp | 16 ++---
src/settings_gui.cpp | 1 +
src/town_cmd.cpp | 10 +--
src/vehicle.cpp | 20 +++---
src/vehicle_base.h | 3 +-
src/window.cpp | 11 +--
src/window_gui.h | 5 +-
36 files changed, 192 insertions(+), 348 deletions(-)
delete mode 100644 src/core/smallmap_type.hpp
diff --git a/src/ai/ai_config.cpp b/src/ai/ai_config.cpp
index f920d3101..4baeb2171 100644
--- a/src/ai/ai_config.cpp
+++ b/src/ai/ai_config.cpp
@@ -31,7 +31,7 @@ ScriptConfigItem _start_date_config = {
AI::START_NEXT_DEVIATION,
30,
SCRIPTCONFIG_NONE,
- NULL,
+ {},
false
};
diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp
index 101a97d0a..49a716e35 100644
--- a/src/ai/ai_gui.cpp
+++ b/src/ai/ai_gui.cpp
@@ -406,9 +406,9 @@ struct AISettingsWindow : public Window {
} else {
DrawArrowButtons(buttons_left, y + button_y_offset, COLOUR_YELLOW, (this->clicked_button == i) ? 1 + (this->clicked_increase != rtl) : 0, editable && current_value > config_item.min_value, editable && current_value < config_item.max_value);
}
- if (config_item.labels != NULL && config_item.labels->Contains(current_value)) {
+ if (config_item.labels.find(current_value) != config_item.labels.end()) {
SetDParam(idx++, STR_JUST_RAW_STRING);
- SetDParamStr(idx++, config_item.labels->Find(current_value)->second);
+ SetDParamStr(idx++, config_item.labels.find(current_value)->second);
} else {
SetDParam(idx++, STR_JUST_INT);
SetDParam(idx++, current_value);
@@ -480,7 +480,7 @@ struct AISettingsWindow : public Window {
DropDownList *list = new DropDownList();
for (int i = config_item.min_value; i <= config_item.max_value; i++) {
- *list->Append() = new DropDownListCharStringItem(config_item.labels->Find(i)->second, i, false);
+ *list->Append() = new DropDownListCharStringItem(config_item.labels.find(i)->second, i, false);
}
ShowDropDownListAt(this, list, old_val, -1, wi_rect, COLOUR_ORANGE, true);
diff --git a/src/base_media_base.h b/src/base_media_base.h
index 7614118b7..2e08b5338 100644
--- a/src/base_media_base.h
+++ b/src/base_media_base.h
@@ -13,11 +13,12 @@
#define BASE_MEDIA_BASE_H
#include "fileio_func.h"
-#include "core/smallmap_type.hpp"
#include "gfx_type.h"
#include "textfile_type.h"
#include "textfile_gui.h"
+#include <map>
+
/* Forward declare these; can't do 'struct X' in functions as older GCCs barf on that */
struct IniFile;
struct ContentInfo;
@@ -46,7 +47,7 @@ struct MD5File {
*/
template <class T, size_t Tnum_files, bool Tsearch_in_tars>
struct BaseSet {
- typedef SmallMap<const char *, const char *> TranslatedStrings;
+ typedef std::map<const char *, const char *> TranslatedStrings;
/** Number of files in this set */
static const size_t NUM_FILES = Tnum_files;
@@ -74,7 +75,7 @@ struct BaseSet {
{
free(this->name);
- for (TranslatedStrings::iterator iter = this->description.Begin(); iter != this->description.End(); iter++) {
+ for (TranslatedStrings::iterator iter = this->description.begin(); iter != this->description.end(); ++iter) {
free(iter->first);
free(iter->second);
}
@@ -120,16 +121,16 @@ struct BaseSet {
{
if (isocode != NULL) {
/* First the full ISO code */
- for (TranslatedStrings::const_iterator iter = this->description.Begin(); iter != this->description.End(); iter++) {
+ for (TranslatedStrings::const_iterator iter = this->description.begin(); iter != this->description.end(); ++iter) {
if (strcmp(iter->first, isocode) == 0) return iter->second;
}
/* Then the first two characters */
- for (TranslatedStrings::const_iterator iter = this->description.Begin(); iter != this->description.End(); iter++) {
+ for (TranslatedStrings::const_iterator iter = this->description.begin(); iter != this->description.end(); ++iter) {
if (strncmp(iter->first, isocode, 2) == 0) return iter->second;
}
}
/* Then fall back */
- return this->description.Begin()->second;
+ return this->description.begin()->second;
}
/**
diff --git a/src/core/smallmap_type.hpp b/src/core/smallmap_type.hpp
deleted file mode 100644
index dda0fc2a1..000000000
--- a/src/core/smallmap_type.hpp
+++ /dev/null
@@ -1,158 +0,0 @@
-/* $Id$ */
-
-/*
- * This file is part of OpenTTD.
- * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
- * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/** @file smallmap_type.hpp Simple mapping class targeted for small sets of data. Stored data shall be POD ("Plain Old Data")! */
-
-#ifndef SMALLMAP_TYPE_HPP
-#define SMALLMAP_TYPE_HPP
-
-#include "smallvec_type.hpp"
-#include "sort_func.hpp"
-
-/**
- * Simple pair of data. Both types have to be POD ("Plain Old Data")!
- * @tparam T Key type.
- * @tparam U Value type.
- */
-template <typename T, typename U>
-struct SmallPair {
- T first;
- U second;
-
- /** Initializes this Pair with data */
- inline SmallPair(const T &first, const U &second) : first(first), second(second) { }
-};
-
-/**
- * Implementation of simple mapping class. Both types have to be POD ("Plain Old Data")!
- * It has inherited accessors from SmallVector().
- * @tparam T Key type.
- * @tparam U Value type.
- * @tparam S Unit of allocation.
- *
- * @see SmallVector
- */
-template <typename T, typename U, uint S = 16>
-struct SmallMap : SmallVector<SmallPair<T, U>, S> {
- typedef ::SmallPair<T, U> Pair;
- typedef Pair *iterator;
- typedef const Pair *const_iterator;
-
- /** Creates new SmallMap. Data are initialized in SmallVector constructor */
- inline SmallMap() { }
- /** Data are freed in SmallVector destructor */
- inline ~SmallMap() { }
-
- /**
- * Finds given key in this map
- * @param key key to find
- * @return &Pair(key, data) if found, this->End() if not
- */
- inline const Pair *Find(const T &key) const
- {
- for (uint i = 0; i < this->items; i++) {
- if (key == this->data[i].first) return &this->data[i];
- }
- return this->End();
- }
-
- /**
- * Finds given key in this map
- * @param key key to find
- * @return &Pair(key, data) if found, this->End() if not
- */
- inline Pair *Find(const T &key)
- {
- for (uint i = 0; i < this->items; i++) {
- if (key == this->data[i].first) return &this->data[i];
- }
- return this->End();
- }
-
- /**
- * Tests whether a key is assigned in this map.
- * @param key key to test
- * @return true iff the item is present
- */
- inline bool Contains(const T &key) const
- {
- return this->Find(key) != this->End();
- }
-
- /**
- * Removes given pair from this map
- * @param pair pair to remove
- * @note it has to be pointer to pair in this map. It is overwritten by the last item.
- */
- inline void Erase(Pair *pair)
- {
- assert(pair >= this->Begin() && pair < this->End());
- *pair = this->data[--this->items];
- }
-
- /**
- * Removes given key from this map
- * @param key key to remove
- * @return true iff the key was found
- * @note last item is moved to its place, so don't increase your iterator if true is returned!
- */
- inline bool Erase(const T &key)
- {
- for (uint i = 0; i < this->items; i++) {
- if (key == this->data[i].first) {
- this->data[i] = this->data[--this->items];
- return true;
- }
- }
- return false;
- }
-
- /**
- * Adds new item to this map.
- * @param key key
- * @param data data
- * @return true iff the key wasn't already present
- */
- inline bool Insert(const T &key, const U &data)
- {
- if (this->Contains(key)) return false;
- Pair *n = this->Append();
- n->first = key;
- n->second = data;
- return true;
- }
-
- /**
- * Returns data belonging to this key
- * @param key key
- * @return data belonging to this key
- * @note if this key wasn't present, new entry is created
- */
- inline U &operator[](const T &key)
- {
- for (uint i = 0; i < this->items; i++) {
- if (key == this->data[i].first) return this->data[i].second;
- }
- Pair *n = this->Append();
- n->first = key;
- return n->second;
- }
-
- inline void SortByKey()
- {
- QSortT(this->Begin(), this->items, KeySorter);
- }
-
- static int CDECL KeySorter(const Pair *a, const Pair *b)
- {
- return a->first - b->first;
- }
-};
-
-#endif /* SMALLMAP_TYPE_HPP */
diff --git a/src/fios.cpp b/src/fios.cpp
index 5e78fb1b4..a35b68457 100644
--- a/src/fios.cpp
+++ b/src/fios.cpp
@@ -13,6 +13,7 @@
*/
#include "stdafx.h"
+#include "core/sort_func.hpp"
#include "fios.h"
#include "fileio_func.h"
#include "tar_type.h"
diff --git a/src/fios.h b/src/fios.h
index 5e17e8ee1..c61ec699b 100644
--- a/src/fios.h
+++ b/src/fios.h
@@ -17,8 +17,9 @@
#include "newgrf_config.h"
#include "network/core/tcp_content.h"
+#include <map>
-typedef SmallMap<uint, CompanyProperties *> CompanyPropertiesMap;
+typedef std::map<uint, CompanyProperties *> CompanyPropertiesMap;
/**
* Container for loading in mode SL_LOAD_CHECK.
diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp
index f20cfd792..bd719ed8e 100644
--- a/src/fios_gui.cpp
+++ b/src/fios_gui.cpp
@@ -27,6 +27,7 @@
#include "landscape_type.h"
#include "date_func.h"
#include "core/geometry_func.hpp"
+#include "core/sort_func.hpp"
#include "gamelog.h"
#include "widgets/fios_widget.h"
@@ -56,11 +57,11 @@ void LoadCheckData::Clear()
this->current_date = 0;
memset(&this->settings, 0, sizeof(this->settings));
- const CompanyPropertiesMap::iterator end = this->companies.End();
- for (CompanyPropertiesMap::iterator it = this->companies.Begin(); it != end; it++) {
+ const CompanyPropertiesMap::iterator end = this->companies.end();
+ for (CompanyPropertiesMap::iterator it = this->companies.begin(); it != end; it++) {
delete it->second;
}
- companies.Clear();
+ companies.clear();
GamelogFree(this->gamelog_action, this->gamelog_actions);
this->gamelog_action = NULL;
@@ -456,8 +457,8 @@ public:
if (y > y_max) break;
/* Companies / AIs */
- CompanyPropertiesMap::const_iterator end = _load_check_data.companies.End();
- for (CompanyPropertiesMap::const_iterator it = _load_check_data.companies.Begin(); it != end; it++) {
+ CompanyPropertiesMap::const_iterator end = _load_check_data.companies.end();
+ for (CompanyPropertiesMap::const_iterator it = _load_check_data.companies.begin(); it != end; it++) {
SetDParam(0, it->first + 1);
const CompanyProperties &c = *it->second;
if (c.name != NULL) {
diff --git a/src/fontcache.cpp b/src/fontcache.cpp
index 039409881..05c149f71 100644
--- a/src/fontcache.cpp
+++ b/src/fontcache.cpp
@@ -14,7 +14,6 @@
#include "fontdetection.h"
#include "blitter/factory.hpp"
#include "core/math_func.hpp"
-#include "core/smallmap_type.hpp"
#include "strings_func.h"
#include "zoom_type.h"
#include "gfx_layout.h"
@@ -209,7 +208,7 @@ class FreeTypeFontCache : public FontCache {
private:
FT_Face face; ///< The font face associated with this font.
- typedef SmallMap<uint32, SmallPair<size_t, const void*> > FontTable; ///< Table with font table cache
+ typedef std::map<uint32, std::pair<size_t, const void*> > FontTable; ///< Table with font table cache
FontTable font_tables; ///< Cached font tables.
/** Container for information about a glyph. */
@@ -395,7 +394,7 @@ FreeTypeFontCache::~FreeTypeFontCache()
FT_Done_Face(this->face);
this->ClearFontCache();
- for (FontTable::iterator iter = this->font_tables.Begin(); iter != this->font_tables.End(); iter++) {
+ for (FontTable::iterator iter = this->font_tables.begin(); iter != this->font_tables.end(); ++iter) {
free(iter->second.second);
}
}
@@ -613,8 +612,8 @@ GlyphID FreeTypeFontCache::MapCharToGlyph(WChar key)
const void *FreeTypeFontCache::GetFontTable(uint32 tag, size_t &length)
{
- const FontTable::iterator iter = this->font_tables.Find(tag);
- if (iter != this->font_tables.End()) {
+ const FontTable::iterator iter = this->font_tables.find(tag);
+ if (iter != this->font_tables.end()) {
length = iter->second.first;
return iter->second.second;
}
@@ -630,7 +629,7 @@ const void *FreeTypeFontCache::GetFontTable(uint32 tag, size_t &length)
}
length = len;
- this->font_tables.Insert(tag, SmallPair<size_t, const void *>(length, result));
+ this->font_tables.insert(std::pair<uint32, std::pair<size_t, const void *> >(tag, std::pair<size_t, const void *>(length, result)));
return result;
}
diff --git a/src/gamelog.cpp b/src/gamelog.cpp
index 400c0d22f..2fba50f24 100644
--- a/src/gamelog.cpp
+++ b/src/gamelog.cpp
@@ -155,7 +155,7 @@ struct GRFPresence{
GRFPresence(const GRFConfig *gc) : gc(gc), was_missing(false) {}
};
-typedef SmallMap<uint32, GRFPresence> GrfIDMapping;
+typedef std::map<uint32, GRFPresence> GrfIDMapping;
/**
* Prints active gamelog
@@ -239,24 +239,24 @@ void GamelogPrint(GamelogPrintProc *proc)
const GRFConfig *gc = FindGRFConfig(lc->grfadd.grfid, FGCM_EXACT, lc->grfadd.md5sum);
buf += seprintf(buf, lastof(buffer), "Added NewGRF: ");
buf = PrintGrfInfo(buf, lastof(buffer), lc->grfadd.grfid, lc->grfadd.md5sum, gc);
- GrfIDMapping::Pair *gm = grf_names.Find(lc->grfrem.grfid);
- if (gm != grf_names.End() && !gm->second.was_missing) buf += seprintf(buf, lastof(buffer), ". Gamelog inconsistency: GrfID was already added!");
- grf_names[lc->grfadd.grfid] = gc;
+ GrfIDMapping::iterator gm = grf_names.find(lc->grfrem.grfid);
+ if (gm != grf_names.end() && !gm->second.was_missing) buf += seprintf(buf, lastof(buffer), ". Gamelog inconsistency: GrfID was already added!");
+ grf_names.insert(std::pair<uint32, GRFPresence>(lc->grfadd.grfid, gc));
break;
}
case GLCT_GRFREM: {
- GrfIDMapping::Pair *gm = grf_names.Find(lc->grfrem.grfid);
+ GrfIDMapping::iterator gm = grf_names.find(lc->grfrem.grfid);
buf += seprintf(buf, lastof(buffer), la->at == GLAT_LOAD ? "Missing NewGRF: " : "Removed NewGRF: ");
- buf = PrintGrfInfo(buf, lastof(buffer), lc->grfrem.grfid, NULL, gm != grf_names.End() ? gm->second.gc : NULL);
- if (gm == grf_names.End()) {
+ buf = PrintGrfInfo(buf, lastof(buffer), lc->grfrem.grfid, NULL, gm != grf_names.end() ? gm->second.gc : NULL);
+ if (gm == grf_names.end()) {
buf += seprintf(buf, lastof(buffer), ". Gamelog inconsistency: GrfID was never added!");
} else {
if (la->at == GLAT_LOAD) {
/* Missing grfs on load are not removed from the configuration */
gm->second.was_missing = true;
} else {
- grf_names.Erase(gm);
+ grf_names.erase(gm);
}
}
break;
@@ -266,38 +266,40 @@ void GamelogPrint(GamelogPrintProc *proc)
const GRFConfig *gc = FindGRFConfig(lc->grfadd.grfid, FGCM_EXACT, lc->grfadd.md5sum);
buf += seprintf(buf, lastof(buffer), "Compatible NewGRF loaded: ");
buf = PrintGrfInfo(buf, lastof(buffer), lc->grfcompat.grfid, lc->grfcompat.md5sum, gc);
- if (!grf_names.Contains(lc->grfcompat.grfid)) buf += seprintf(buf, lastof(buffer), ". Gamelog inconsistency: GrfID was never added!");
- grf_names[lc->grfcompat.grfid] = gc;
+ if (grf_names.find(lc->grfcompat.grfid) == grf_names.end()) {
+ buf += seprintf(buf, lastof(buffer), ". Gamelog inconsistency: GrfID was never added!");
+ }
+ grf_names.insert(std::pair<uint32, GRFPresence>(lc->grfcompat.grfid, gc));
break;
}
case GLCT_GRFPARAM: {
- GrfIDMapping::Pair *gm = grf_names.Find(lc->grfrem.grfid);
+ GrfIDMapping::iterator gm = grf_names.find(lc->grfrem.grfid);
buf += seprintf(buf, lastof(buffer), "GRF parameter changed: ");
- buf = PrintGrfInfo(buf, lastof(buffer), lc->grfparam.grfid, NULL, gm != grf_names.End() ? gm->second.gc : NULL);
- if (gm == grf_names.End()) buf += seprintf(buf, lastof(buffer), ". Gamelog inconsistency: GrfID was never added!");
+ buf = PrintGrfInfo(buf, lastof(buffer), lc->grfparam.grfid, NULL, gm != grf_names.end() ? gm->second.gc : NULL);
+ if (gm == grf_names.end()) buf += seprintf(buf, lastof(buffer), ". Gamelog inconsistency: GrfID was never added!");
break;
}
case GLCT_GRFMOVE: {
- GrfIDMapping::Pair *gm = grf_names.Find(lc->grfrem.grfid);
+ GrfIDMapping::iterator gm = grf_names.find(lc->grfrem.grfid);
buf += seprintf(buf, lastof(buffer), "GRF order changed: %08X moved %d places %s",
BSWAP32(lc->grfmove.grfid), abs(lc->grfmove.offset), lc->grfmove.offset >= 0 ? "down" : "up" );
- buf = PrintGrfInfo(buf, lastof(buffer), lc->grfmove.grfid, NULL, gm != grf_names.End() ? gm->second.gc : NULL);
- if (gm == grf_names.End()) buf += seprintf(buf, lastof(buffer), ". Gamelog inconsistency: GrfID was never added!");
+ buf = PrintGrfInfo(buf, lastof(buffer), lc->grfmove.grfid, NULL, gm != grf_names.end() ? gm->second.gc : NULL);
+ if (gm == grf_names.end()) buf += seprintf(buf, lastof(buffer), ". Gamelog inconsistency: GrfID was never added!");
break;
}
case GLCT_GRFBUG: {
- GrfIDMapping::Pair *gm = grf_names.Find(lc->grfrem.grfid);
+ GrfIDMapping::iterator gm = grf_names.find(lc->grfrem.grfid);
switch (lc->grfbug.bug) {
default: NOT_REACHED();
case GBUG_VEH_LENGTH:
buf += seprintf(buf, lastof(buffer), "Rail vehicle changes length outside a depot: GRF ID %08X, internal ID 0x%X", BSWAP32(lc->grfbug.grfid), (uint)lc->grfbug.data);
break;
}
- buf = PrintGrfInfo(buf, lastof(buffer), lc->grfbug.grfid, NULL, gm != grf_names.End() ? gm->second.gc : NULL);
- if (gm == grf_names.End()) buf += seprintf(buf, lastof(buffer), ". Gamelog inconsistency: GrfID was never added!");
+ buf = PrintGrfInfo(buf, lastof(buffer), lc->grfbug.grfid, NULL, gm != grf_names.end() ? gm->second.gc : NULL);
+ if (gm == grf_names.end()) buf += seprintf(buf, lastof(buffer), ". Gamelog inconsistency: GrfID was never added!");
break;
}
diff --git a/src/gfx.cpp b/src/gfx.cpp
index 719505157..2495bf841 100644
--- a/src/gfx.cpp
+++ b/src/gfx.cpp
@@ -14,6 +14,7 @@
#include "progress.h"
#include "zoom_func.h"
#include "blitter/factory.hpp"
+#include "core/sort_func.hpp"
#include "video/video_driver.hpp"
#include "strings_func.h"
#include "settings_type.h"
diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp
index f5463d401..1a2bcc99b 100644
--- a/src/gfx_layout.cpp
+++ b/src/gfx_layout.cpp
@@ -192,12 +192,12 @@ static ParagraphLayouter *GetParagraphLayout(UChar *buff, UChar *buff_end, FontM
/* ICU's ParagraphLayout cannot handle empty strings, so fake one. */
buff[0] = ' ';
length = 1;
- fontMapping.End()[-1].first++;
+ fontMapping.rbegin()->first++;
}
/* Fill ICU's FontRuns with the right data. */
- FontRuns runs(fontMapping.Length());
- for (FontMap::iterator iter = fontMapping.Begin(); iter != fontMapping.End(); iter++) {
+ FontRuns runs(fontMapping.size());
+ for (FontMap::iterator iter = fontMapping.begin(); iter != fontMapping.end(); iter++) {
runs.add(iter->second, iter->first);
}
@@ -425,7 +425,7 @@ const ParagraphLayouter::VisualRun *FallbackParagraphLayout::FallbackLine::GetVi
*/
FallbackParagraphLayout::FallbackParagraphLayout(WChar *buffer, int length, FontMap &runs) : buffer_begin(buffer), buffer(buffer), runs(runs)
{
- assert(runs.End()[-1].first == length);
+ assert(runs.rbegin()->first == length);
}
/**
@@ -454,7 +454,7 @@ const ParagraphLayouter::Line *FallbackParagraphLayout::NextLine(int max_width)
if (*this->buffer == '\0') {
/* Only a newline. */
this->buffer = NULL;
- *l->Append() = new FallbackVisualRun(this->runs.Begin()->second, this->buffer, 0, 0);
+ *l->Append() = new FallbackVisualRun(this->runs.begin()->second, this->buffer, 0, 0);
return l;
}
@@ -464,10 +464,10 @@ const ParagraphLayouter::Line *FallbackParagraphLayout::NextLine(int max_width)
int width = 0;
int offset = this->buffer - this->buffer_begin;
- FontMap::iterator iter = this->runs.Begin();
+ FontMap::iterator iter = this->runs.begin();
while (iter->first <= offset) {
iter++;
- assert(iter != this->runs.End());
+ assert(iter != this->runs.end());
}
const FontCache *fc = iter->second->fc;
@@ -486,7 +486,7 @@ const ParagraphLayouter::Line *FallbackParagraphLayout::NextLine(int max_width)
int w = l->GetWidth();
*l->Append() = new FallbackVisualRun(iter->second, begin, this->buffer - begin, w);
iter++;
- assert(iter != this->runs.End());
+ assert(iter != this->runs.end());
next_run = this->buffer_begin + iter->first;
begin = this->buffer;
@@ -609,8 +609,8 @@ static inline void GetLayouter(Layouter::LineCacheItem &line, const char *&str,
continue;
}
- if (!fontMapping.Contains(buff - buff_begin)) {
- fontMapping.Insert(buff - buff_begin, f);
+ if (fontMapping.find(buff - buff_begin) == fontMapping.end()) {
+ fontMapping.insert(std::pair<int, Font *>(buff - buff_begin, f));
}
f = Layouter::GetFont(state.fontsize, state.cur_colour);
}
@@ -618,8 +618,8 @@ static inline void GetLayouter(Layouter::LineCacheItem &line, const char *&str,
/* Better safe than sorry. */
*buff = '\0';
- if (!fontMapping.Contains(buff - buff_begin)) {
- fontMapping.Insert(buff - buff_begin, f);
+ if (fontMapping.find(buff - buff_begin) == fontMapping.end()) {
+ fontMapping.insert(std::pair<int, Font *>(buff - buff_begin, f));
}
line.layout = GetParagraphLayout(buff_begin, buff, fontMapping);
line.state_after = state;
@@ -788,11 +788,11 @@ const char *Layouter::GetCharAtPosition(int x) const
*/
Font *Layouter::GetFont(FontSize size, TextColour colour)
{
- FontColourMap::iterator it = fonts[size].Find(colour);
- if (it != fonts[size].End()) return it->second;
+ FontColourMap::iterator it = fonts[size].find(colour);
+ if (it != fonts[size].end()) return it->second;
Font *f = new Font(size, colour);
- *fonts[size].Append() = FontColourMap::Pair(colour, f);
+ fonts[size].insert(std::pair<TextColour, Font *>(colour, f));
return f;
}
@@ -802,10 +802,10 @@ Font *Layouter::GetFont(FontSize size, TextColour colour)
*/
void Layouter::ResetFontCache(FontSize size)
{
- for (FontColourMap::iterator it = fonts[size].Begin(); it != fonts[size].End(); ++it) {
+ for (FontColourMap::iterator it = fonts[size].begin(); it != fonts[size].end(); ++it) {
delete it->second;
}
- fonts[size].Clear();
+ fonts[size].clear();
/* We must reset the linecache since it references the just freed fonts */
ResetLineCache();
diff --git a/src/gfx_layout.h b/src/gfx_layout.h
index 0a21d9b0c..51250bf70 100644
--- a/src/gfx_layout.h
+++ b/src/gfx_layout.h
@@ -14,7 +14,7 @@
#include "fontcache.h"
#include "gfx_func.h"
-#include "core/smallmap_type.hpp"
+#include "core/smallvec_type.hpp"
#include <map>
#include <string>
@@ -95,7 +95,7 @@ public:
};
/** Mapping from index to font. */
-typedef SmallMap<int, Font *> FontMap;
+typedef std::map<int, Font *> FontMap;
/**
* Interface to glue fallback and normal layouter into one.
@@ -172,7 +172,7 @@ private:
static LineCacheItem &GetCachedParagraphLayout(const char *str, size_t len, const FontState &state);
- typedef SmallMap<TextColour, Font *> FontColourMap;
+ typedef std::map<TextColour, Font *> FontColourMap;
static FontColourMap fonts[FS_END];
public:
static Font *GetFont(FontSize size, TextColour colour);
diff --git a/src/linkgraph/linkgraph.h b/src/linkgraph/linkgraph.h
index 799f22c78..f6f980a4d 100644
--- a/src/linkgraph/linkgraph.h
+++ b/src/linkgraph/linkgraph.h
@@ -13,7 +13,6 @@
#define LINKGRAPH_H
#include "../core/pool_type.hpp"
-#include "../core/smallmap_type.hpp"
#include "../core/smallmatrix_type.hpp"
#include "../station_base.h"
#include "../cargotype.h"
@@ -190,20 +189,20 @@ public:
* to return something that implements operator->, but isn't a pointer
* from operator->. A fake pointer.
*/
- class FakePointer : public SmallPair<NodeID, Tedge_wrapper> {
+ class FakePointer : public std::pair<NodeID, Tedge_wrapper> {
public:
/**
* Construct a fake pointer from a pair of NodeID and edge.
* @param pair Pair to be "pointed" to (in fact shallow-copied).
*/
- FakePointer(const SmallPair<NodeID, Tedge_wrapper> &pair) : SmallPair<NodeID, Tedge_wrapper>(pair) {}
+ FakePointer(const std::pair<NodeID, Tedge_wrapper> &pair) : std::pair<NodeID, Tedge_wrapper>(pair) {}
/**
* Retrieve the pair by operator->.
* @return Pair being "pointed" to.
*/
- SmallPair<NodeID, Tedge_wrapper> *operator->() { return this; }
+ std::pair<NodeID, Tedge_wrapper> *operator->() { return this; }
};
public:
@@ -268,9 +267,9 @@ public:
* Dereference with operator*.
* @return Pair of current target NodeID and edge object.
*/
- SmallPair<NodeID, Tedge_wrapper> operator*() const
+ std::pair<NodeID, Tedge_wrapper> operator*() const
{
- return SmallPair<NodeID, Tedge_wrapper>(this->current, Tedge_wrapper(this->base[this->current]));
+ return std::pair<NodeID, Tedge_wrapper>(this->current, Tedge_wrapper(this->base[this->current]));
}
/**
diff --git a/src/linkgraph/linkgraphjob.h b/src/linkgraph/linkgraphjob.h
index b4587a784..08e880457 100644
--- a/src/linkgraph/linkgraphjob.h
+++ b/src/linkgraph/linkgraphjob.h
@@ -162,9 +162,9 @@ public:
* @return Pair of the edge currently pointed to and the ID of its
* other end.
*/
- SmallPair<NodeID, Edge> operator*() const
+ std::pair<NodeID, Edge> operator*() const
{
- return SmallPair<NodeID, Edge>(this->current, Edge(this->base[this->current], this->base_anno[this->current]));
+ return std::pair<NodeID, Edge>(this->current, Edge(this->base[this->current], this->base_anno[this->current]));
}
/**
diff --git a/src/network/core/address.cpp b/src/network/core/address.cpp
index 62af3a40b..16946598b 100644
--- a/src/network/core/address.cpp
+++ b/src/network/core/address.cpp
@@ -23,7 +23,7 @@
* IPv4 dotted representation is given.
* @return the hostname
*/
-const char *NetworkAddress::GetHostname()
+const char *NetworkAddress::GetHostname() const
{
if (StrEmpty(this->hostname) && this->address.ss_family != AF_UNSPEC) {
assert(this->address_length != 0);
@@ -78,7 +78,7 @@ void NetworkAddress::SetPort(uint16 port)
* @param last the last element in the buffer
* @param with_family whether to add the family (e.g. IPvX).
*/
-void NetworkAddress::GetAddressAsString(char *buffer, const char *last, bool with_family)
+void NetworkAddress::GetAddressAsString(char *buffer, const char *last, bool with_family) const
{
if (this->GetAddress()->ss_family == AF_INET6) buffer = strecpy(buffer, "[", last);
buffer = strecpy(buffer, this->GetHostname(), last);
@@ -102,7 +102,7 @@ void NetworkAddress::GetAddressAsString(char *buffer, const char *last, bool wit
* @return the address
* @note NOT thread safe
*/
-const char *NetworkAddress::GetAddressAsString(bool with_family)
+const char *NetworkAddress::GetAddressAsString(bool with_family) const
{
/* 6 = for the : and 5 for the decimal port number */
static char buf[NETWORK_HOSTNAME_LENGTH + 6 + 7];
@@ -125,7 +125,7 @@ static SOCKET ResolveLoopProc(addrinfo *runp)
* Get the address in its internal representation.
* @return the address
*/
-const sockaddr_storage *NetworkAddress::GetAddress()
+const sockaddr_storage *NetworkAddress::GetAddress() const
{
if (!this->IsResolved()) {
/* Here we try to resolve a network address. We use SOCK_STREAM as
@@ -144,7 +144,7 @@ const sockaddr_storage *NetworkAddress::GetAddress()
* @param family the family to check against
* @return true if it is of the given family
*/
-bool NetworkAddress::IsFamily(int family)
+bool NetworkAddress::IsFamily(int family) const
{
if (!this->IsResolved()) {
this->Resolve(family, SOCK_STREAM, AI_ADDRCONFIG, NULL, ResolveLoopProc);
@@ -158,7 +158,7 @@ bool NetworkAddress::IsFamily(int family)
* @note netmask without /n assumes all bits need to match.
* @return true if this IP is within the netmask.
*/
-bool NetworkAddress::IsInNetmask(char *netmask)
+bool NetworkAddress::IsInNetmask(char *netmask) const
{
/* Resolve it if we didn't do it already */
if (!this->IsResolved()) this->GetAddress();
@@ -221,7 +221,7 @@ bool NetworkAddress::IsInNetmask(char *netmask)
* @param func the inner working while looping over the address info
* @return the resolved socket or INVALID_SOCKET.
*/
-SOCKET NetworkAddress::Resolve(int family, int socktype, int flags, SocketList *sockets, LoopProc func)
+SOCKET NetworkAddress::Resolve(int family, int socktype, int flags, SocketList *sockets, LoopProc func) const
{
struct addrinfo *ai;
struct addrinfo hints;
@@ -264,7 +264,7 @@ SOCKET NetworkAddress::Resolve(int family, int socktype, int flags, SocketList *
* of course totally unneeded ;) */
if (sockets != NULL) {
NetworkAddress address(runp->ai_addr, (int)runp->ai_addrlen);
- if (sockets->Contains(address)) continue;
+ if (sockets->find(address) != sockets->end()) continue;
}
sock = func(runp);
if (sock == INVALID_SOCKET) continue;
diff --git a/src/network/core/address.h b/src/network/core/address.h
index 9fd40eaee..2e398b626 100644
--- a/src/network/core/address.h
+++ b/src/network/core/address.h
@@ -14,14 +14,16 @@
#include "os_abstraction.h"
#include "config.h"
+#include "../../core/smallvec_type.hpp"
#include "../../string_func.h"
-#include "../../core/smallmap_type.hpp"
+
+#include <map>
#ifdef ENABLE_NETWORK
class NetworkAddress;
typedef SmallVector<NetworkAddress, 4> NetworkAddressList; ///< Type for a list of addresses.
-typedef SmallMap<NetworkAddress, SOCKET, 4> SocketList; ///< Type for a mapping between address and socket.
+typedef std::map<NetworkAddress, SOCKET> SocketList; ///< Type for a mapping between address and socket.
/**
* Wrapper for (un)resolved network addresses; there's no reason to transform
@@ -30,10 +32,10 @@ typedef SmallMap<NetworkAddress, SOCKET, 4> SocketList; ///< Type for a mappi
*/
class NetworkAddress {
private:
- char hostname[NETWORK_HOSTNAME_LENGTH]; ///< The hostname
- int address_length; ///< The length of the resolved address
- sockaddr_storage address; ///< The resolved address
- bool resolved; ///< Whether the address has been (tried to be) resolved
+ mutable char hostname[NETWORK_HOSTNAME_LENGTH]; ///< The hostname
+ mutable int address_length; ///< The length of the resolved address
+ mutable sockaddr_storage address; ///< The resolved address
+ mutable bool resolved; ///< Whether the address has been (tried to be) resolved
/**
* Helper function to resolve something to a socket.
@@ -42,7 +44,7 @@ private:
*/
typedef SOCKET (*LoopProc)(addrinfo *runp);
- SOCKET Resolve(int family, int socktype, int flags, SocketList *sockets, LoopProc func);
+ SOCKET Resolve(int family, int socktype, int flags, SocketList *sockets, LoopProc func) const;
public:
/**
* Create a network address based on a resolved IP and port.
@@ -102,16 +104,16 @@ public:
memcpy(this, &address, sizeof(*this));
}
- const char *GetHostname();
- void GetAddressAsString(char *buffer, const char *last, bool with_family = true);
- const char *GetAddressAsString(bool with_family = true);
- const sockaddr_storage *GetAddress();
+ const char *GetHostname() const;
+ void GetAddressAsString(char *buffer, const char *last, bool with_family = true) const;
+ const char *GetAddressAsString(bool with_family = true) const;
+ const sockaddr_storage *GetAddress() const;
/**
* Get the (valid) length of the address.
* @return the length
*/
- int GetAddressLength()
+ int GetAddressLength() const
{
/* Resolve it if we didn't do it already */
if (!this->IsResolved()) this->GetAddress();
@@ -130,15 +132,15 @@ public:
return this->resolved;
}
- bool IsFamily(int family);
- bool IsInNetmask(char *netmask);
+ bool IsFamily(int family) const;
+ bool IsInNetmask(char *netmask) const;
/**
* Compare the address of this class with the address of another.
* @param address the other address.
* @return < 0 if address is less, 0 if equal and > 0 if address is more
*/
- int CompareTo(NetworkAddress &address)
+ int CompareTo(const NetworkAddress &address) const
{
int r = this->GetAddressLength() - address.GetAddressLength();
if (r == 0) r = this->address.ss_family - address.address.ss_family;
@@ -152,35 +154,26 @@ public:
* @param address the other address.
* @return true if both match.
*/
- bool operator == (NetworkAddress &address)
+ bool operator == (const NetworkAddress &address) const
{
return this->CompareTo(address) == 0;
}
- /**
- * Compare the address of this class with the address of another.
- * @param address the other address.
- * @return true if both match.
- */
- bool operator == (NetworkAddress &address) const
- {
- return const_cast<NetworkAddress*>(this)->CompareTo(address) == 0;
- }
/**
* Compare the address of this class with the address of another.
* @param address the other address.
* @return true if both do not match.
*/
- bool operator != (NetworkAddress address) const
+ bool operator != (const NetworkAddress &address) const
{
- return const_cast<NetworkAddress*>(this)->CompareTo(address) != 0;
+ return this->CompareTo(address) != 0;
}
/**
* Compare the address of this class with the address of another.
* @param address the other address.
*/
- bool operator < (NetworkAddress &address)
+ bool operator < (const NetworkAddress &address) const
{
return this->CompareTo(address) < 0;
}
diff --git a/src/network/core/tcp_listen.h b/src/network/core/tcp_listen.h
index e6b589332..91e290004 100644
--- a/src/network/core/tcp_listen.h
+++ b/src/network/core/tcp_listen.h
@@ -113,7 +113,7 @@ public:
}
/* take care of listener port */
- for (SocketList::iterator s = sockets.Begin(); s != sockets.End(); s++) {
+ for (SocketList::iterator s = sockets.begin(); s != sockets.end(); ++s) {
FD_SET(s->second, &read_fd);
}
@@ -125,7 +125,7 @@ public:
#endif
/* accept clients.. */
- for (SocketList::iterator s = sockets.Begin(); s != sockets.End(); s++) {
+ for (SocketList::iterator s = sockets.begin(); s != sockets.end(); ++s) {
if (FD_ISSET(s->second, &read_fd)) AcceptClient(s->second);
}
@@ -146,7 +146,7 @@ public:
*/
static bool Listen(uint16 port)
{
- assert(sockets.Length() == 0);
+ assert(sockets.size() == 0);
NetworkAddressList addresses;
GetBindAddresses(&addresses, port);
@@ -155,7 +155,7 @@ public:
address->Listen(SOCK_STREAM, &sockets);
}
- if (sockets.Length() == 0) {
+ if (sockets.size() == 0) {
DEBUG(net, 0, "[server] could not start network: could not create listening socket");
NetworkError(STR_NETWORK_ERROR_SERVER_START);
return false;
@@ -167,10 +167,10 @@ public:
/** Close the sockets we're listening on. */
static void CloseListeners()
{
- for (SocketList::iterator s = sockets.Begin(); s != sockets.End(); s++) {
+ for (SocketList::iterator s = sockets.begin(); s != sockets.end(); ++s) {
closesocket(s->second);
}
- sockets.Clear();
+ sockets.clear();
DEBUG(net, 1, "[%s] closed listeners", Tsocket::GetName());
}
};
diff --git a/src/network/core/udp.cpp b/src/network/core/udp.cpp
index 20b1ce119..625ce232b 100644
--- a/src/network/core/udp.cpp
+++ b/src/network/core/udp.cpp
@@ -53,7 +53,7 @@ bool NetworkUDPSocketHandler::Listen()
addr->Listen(SOCK_DGRAM, &this->sockets);
}
- return this->sockets.Length() != 0;
+ return this->sockets.size() != 0;
}
/**
@@ -61,10 +61,10 @@ bool NetworkUDPSocketHandler::Listen()
*/
void NetworkUDPSocketHandler::Close()
{
- for (SocketList::iterator s = this->sockets.Begin(); s != this->sockets.End(); s++) {
+ for (SocketList::iterator s = this->sockets.begin(); s != this->sockets.end(); ++s) {
closesocket(s->second);
}
- this->sockets.Clear();
+ this->sockets.clear();
}
NetworkRecvStatus NetworkUDPSocketHandler::CloseConnection(bool error)
@@ -82,9 +82,9 @@ NetworkRecvStatus NetworkUDPSocketHandler::CloseConnection(bool error)
*/
void NetworkUDPSocketHandler::SendPacket(Packet *p, NetworkAddress *recv, bool all, bool broadcast)
{
- if (this->sockets.Length() == 0) this->Listen();
+ if (this->sockets.size() == 0) this->Listen();
- for (SocketList::iterator s = this->sockets.Begin(); s != this->sockets.End(); s++) {
+ for (SocketList::iterator s = this->sockets.begin(); s != this->sockets.end(); ++s) {
/* Make a local copy because if we resolve it we cannot
* easily unresolve it so we can resolve it later again. */
NetworkAddress send(*recv);
@@ -120,7 +120,7 @@ void NetworkUDPSocketHandler::SendPacket(Packet *p, NetworkAddress *recv, bool a
*/
void NetworkUDPSocketHandler::ReceivePackets()
{
- for (SocketList::iterator s = this->sockets.Begin(); s != this->sockets.End(); s++) {
+ for (SocketList::iterator s = this->sockets.begin(); s != this->sockets.end(); ++s) {
for (int i = 0; i < 1000; i++) { // Do not infinitely loop when DoSing with UDP
struct sockaddr_storage client_addr;
memset(&client_addr, 0, sizeof(client_addr));
diff --git a/src/newgrf.cpp b/src/newgrf.cpp
index a5cf348d7..aced6eba1 100644
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -7561,13 +7561,13 @@ static bool ChangeGRFParamValueNames(ByteReader *buf)
byte langid = buf->ReadByte();
const char *name_string = buf->ReadString();
- SmallPair<uint32, GRFText *> *val_name = _cur_parameter->value_names.Find(id);
- if (val_name != _cur_parameter->value_names.End()) {
+ std::map<uint32, GRFText *>::iterator val_name = _cur_parameter->value_names.find(id);
+ if (val_name != _cur_parameter->value_names.end()) {
AddGRFTextToList(&val_name->second, langid, _cur.grfconfig->ident.grfid, false, name_string);
} else {
GRFText *list = NULL;
AddGRFTextToList(&list, langid, _cur.grfconfig->ident.grfid, false, name_string);
- _cur_parameter->value_names.Insert(id, list);
+ _cur_parameter->value_names.insert(std::pair<uint32, GRFText *>(id, list));
}
type = buf->ReadByte();
diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp
index 593851e28..e323c85a5 100644
--- a/src/newgrf_config.cpp
+++ b/src/newgrf_config.cpp
@@ -13,6 +13,7 @@
#include "debug.h"
#include "3rdparty/md5/md5.h"
#include "newgrf.h"
+#include "core/sort_func.hpp"
#include "network/network_func.h"
#include "gfx_func.h"
#include "newgrf_text.h"
@@ -261,9 +262,8 @@ GRFParameterInfo::GRFParameterInfo(GRFParameterInfo &info) :
num_bit(info.num_bit),
complete_labels(info.complete_labels)
{
- for (uint i = 0; i < info.value_names.Length(); i++) {
- SmallPair<uint32, GRFText *> *data = info.value_names.Get(i);
- this->value_names.Insert(data->first, DuplicateGRFText(data->second));
+ for (std::map<uint32, GRFText *>::const_iterator iter = info.value_names.begin(); iter != info.value_names.end(); ++iter) {
+ this->value_names.insert(std::pair<uint32, GRFText *>(iter->first, DuplicateGRFText(iter->second)));
}
}
@@ -272,9 +272,8 @@ GRFParameterInfo::~GRFParameterInfo()
{
CleanUpGRFText(this->name);
CleanUpGRFText(this->desc);
- for (uint i = 0; i < this->value_names.Length(); i++) {
- SmallPair<uint32, GRFText *> *data = this->value_names.Get(i);
- CleanUpGRFText(data->second);
+ for (std::map<uint32, GRFText *>::const_iterator iter = this->value_names.begin(); iter != this->value_names.end(); ++iter) {
+ CleanUpGRFText(iter->second);
}
}
@@ -314,7 +313,7 @@ void GRFParameterInfo::Finalize()
{
this->complete_labels = true;
for (uint32 value = this->min_value; value <= this->max_value; value++) {
- if (!this->value_names.Contains(value)) {
+ if (this->value_names.find(value) == this->value_names.end()) {
this->complete_labels = false;
break;
}
diff --git a/src/newgrf_config.h b/src/newgrf_config.h
index dc3b884dd..08e8b2e43 100644
--- a/src/newgrf_config.h
+++ b/src/newgrf_config.h
@@ -14,11 +14,13 @@
#include "strings_type.h"
#include "core/alloc_type.hpp"
-#include "core/smallmap_type.hpp"
+#include "core/smallvec_type.hpp"
#include "misc/countedptr.hpp"
#include "fileio_type.h"
#include "textfile_type.h"
+#include <map>
+
/** GRF config bit flags */
enum GCF_Flags {
GCF_SYSTEM, ///< GRF file is an openttd-internal system grf
@@ -133,7 +135,7 @@ struct GRFParameterInfo {
byte param_nr; ///< GRF parameter to store content in
byte first_bit; ///< First bit to use in the GRF parameter
byte num_bit; ///< Number of bits to use for this parameter
- SmallMap<uint32, struct GRFText *, 8> value_names; ///< Names for each value.
+ std::map<uint32, GRFText *> value_names; ///< Names for each value.
bool complete_labels; ///< True if all values have a label.