diff --git a/src/cargopacket.h b/src/cargopacket.h index 42c12fbb5b..b50c91dcbd 100644 --- a/src/cargopacket.h +++ b/src/cargopacket.h @@ -24,7 +24,7 @@ typedef uint32_t CargoPacketID; struct CargoPacket; /** Type of the pool for cargo packets for a little over 16 million packets. */ -typedef Pool CargoPacketPool; +using CargoPacketPool = Pool; /** The actual pool with cargo packets. */ extern CargoPacketPool _cargopacket_pool; diff --git a/src/core/pool_func.cpp b/src/core/pool_func.cpp index 8bf7c91d79..c021596a89 100644 --- a/src/core/pool_func.cpp +++ b/src/core/pool_func.cpp @@ -27,9 +27,9 @@ * Clean all pools of given type. * @param pt pool types to clean. */ -/* static */ void PoolBase::Clean(PoolType pt) +/* static */ void PoolBase::Clean(PoolTypes pt) { for (PoolBase *pool : *PoolBase::GetPools()) { - if (pool->type & pt) pool->CleanPool(); + if (pt.Test(pool->type)) pool->CleanPool(); } } diff --git a/src/core/pool_type.hpp b/src/core/pool_type.hpp index 49644a7375..b4c7cdb794 100644 --- a/src/core/pool_type.hpp +++ b/src/core/pool_type.hpp @@ -13,15 +13,14 @@ #include "enum_type.hpp" /** Various types of a pool. */ -enum PoolType : uint8_t { - PT_NONE = 0x00, ///< No pool is selected. - PT_NORMAL = 0x01, ///< Normal pool containing game objects. - PT_NCLIENT = 0x02, ///< Network client pools. - PT_NADMIN = 0x04, ///< Network admin pool. - PT_DATA = 0x08, ///< NewGRF or other data, that is not reset together with normal pools. - PT_ALL = 0x0F, ///< All pool types. +enum class PoolType : uint8_t { + Normal, ///< Normal pool containing game objects. + NetworkClient, ///< Network client pools. + NetworkAdmin, ///< Network admin pool. + Data, ///< NewGRF or other data, that is not reset together with normal pools. }; -DECLARE_ENUM_AS_BIT_SET(PoolType) +using PoolTypes = EnumBitSet; +static constexpr PoolTypes PT_ALL = {PoolType::Normal, PoolType::NetworkClient, PoolType::NetworkAdmin, PoolType::Data}; typedef std::vector PoolVector; ///< Vector of pointers to PoolBase @@ -39,7 +38,7 @@ struct PoolBase { return pools; } - static void Clean(PoolType); + static void Clean(PoolTypes); /** * Constructor registers this object in the pool vector. @@ -76,7 +75,7 @@ private: * @tparam Tzero Whether to zero the memory * @warning when Tcache is enabled *all* instances of this pool's item must be of the same size. */ -template +template struct Pool : PoolBase { private: /** Some helper functions to get the maximum value of the provided index. */ diff --git a/src/misc.cpp b/src/misc.cpp index fc3285dcf6..01349b8aa5 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -121,7 +121,7 @@ void InitializeGame(uint size_x, uint size_y, bool reset_date, bool reset_settin } LinkGraphSchedule::Clear(); - PoolBase::Clean(PT_NORMAL); + PoolBase::Clean(PoolType::Normal); RebuildStationKdtree(); RebuildTownKdtree(); diff --git a/src/network/network.cpp b/src/network/network.cpp index 1c5b101e02..ed8fd1b4a4 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -582,7 +582,9 @@ NetworkAddress ParseConnectionString(const std::string &connection_string, uint1 */ static void InitializeNetworkPools(bool close_admins = true) { - PoolBase::Clean(PT_NCLIENT | (close_admins ? PT_NADMIN : PT_NONE)); + PoolTypes to_clean{PoolType::NetworkClient}; + if (close_admins) to_clean.Set(PoolType::NetworkAdmin); + PoolBase::Clean(to_clean); } /** diff --git a/src/network/network_admin.h b/src/network/network_admin.h index 39279edfac..9beaf8eeff 100644 --- a/src/network/network_admin.h +++ b/src/network/network_admin.h @@ -18,7 +18,7 @@ extern AdminID _redirect_console_to_admin; class ServerNetworkAdminSocketHandler; /** Pool with all admin connections. */ -typedef Pool NetworkAdminSocketPool; +using NetworkAdminSocketPool = Pool; extern NetworkAdminSocketPool _networkadminsocket_pool; /** Class for handling the server side of the game connection. */ diff --git a/src/network/network_base.h b/src/network/network_base.h index cd5a6f684f..c5ba8cf68f 100644 --- a/src/network/network_base.h +++ b/src/network/network_base.h @@ -17,7 +17,7 @@ #include "../timer/timer_game_economy.h" /** Type for the pool with client information. */ -using NetworkClientInfoPool = Pool; +using NetworkClientInfoPool = Pool; extern NetworkClientInfoPool _networkclientinfo_pool; /** Container for all information known about a client. */ diff --git a/src/network/network_server.h b/src/network/network_server.h index 6e9a8ba874..91ccb3c27f 100644 --- a/src/network/network_server.h +++ b/src/network/network_server.h @@ -17,7 +17,7 @@ class ServerNetworkGameSocketHandler; /** Make the code look slightly nicer/simpler. */ typedef ServerNetworkGameSocketHandler NetworkClientSocket; /** Pool with all client sockets. */ -using NetworkClientSocketPool = Pool; +using NetworkClientSocketPool = Pool; extern NetworkClientSocketPool _networkclientsocket_pool; /** Class for handling the server side of the game connection. */ diff --git a/src/newgrf_spritegroup.h b/src/newgrf_spritegroup.h index 662fb92922..32eba6af32 100644 --- a/src/newgrf_spritegroup.h +++ b/src/newgrf_spritegroup.h @@ -50,7 +50,7 @@ struct ResolverObject; /* SPRITE_WIDTH is 24. ECS has roughly 30 sprite groups per real sprite. * Adding an 'extra' margin would be assuming 64 sprite groups per real * sprite. 64 = 2^6, so 2^30 should be enough (for now) */ -typedef Pool SpriteGroupPool; +using SpriteGroupPool = Pool; extern SpriteGroupPool _spritegroup_pool; /* Common wrapper for all the different sprite group types */