Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Enhancement] Replace all std::unordered with phmap::flat_hash #420

Merged
merged 2 commits into from
Jul 28, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,7 @@ if (MSVC)
${Boost_INCLUDE_DIRS}
${PUGIXML_INCLUDE_DIR}
${CURL_INCLUDE_DIRS}
${PARALLEL_HASHMAP_INCLUDE_DIRS}
${Protobuf_INCLUDE_DIRS}
${SPDLOG_INCLUDE_DIR}
${GMP_INCLUDE_DIR}
Expand Down Expand Up @@ -335,6 +336,7 @@ else()
PRIVATE
${CMAKE_SOURCE_DIR}/src
${LUAJIT_INCLUDE_DIRS}
${PARALLEL_HASHMAP_INCLUDE_DIRS}
${Protobuf_INCLUDE_DIRS}
${GMP_INCLUDE_DIRS}
)
Expand Down
2 changes: 1 addition & 1 deletion src/creatures/monsters/monster.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class Creature;
class Game;
class Spawn;

using CreatureHashSet = std::unordered_set<Creature*>;
using CreatureHashSet = phmap::flat_hash_set<Creature*>;
using CreatureList = std::list<Creature*>;

class Monster final : public Creature
Expand Down
2 changes: 1 addition & 1 deletion src/creatures/monsters/monsters.h
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ class MonsterType
bool targetPreferMaster = false;

Faction_t faction = FACTION_DEFAULT;
std::unordered_set<Faction_t> enemyFactions;
phmap::flat_hash_set<Faction_t> enemyFactions;

bool canPushItems = false;
bool canPushCreatures = false;
Expand Down
8 changes: 4 additions & 4 deletions src/creatures/players/grouping/groups.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
#include "utils/pugicast.h"
#include "utils/tools.h"

const std::unordered_map<std::string, PlayerFlags> ParsePlayerFlagMap = {
const phmap::flat_hash_map<std::string, PlayerFlags> ParsePlayerFlagMap = {
{"cannotusecombat", PlayerFlag_CannotUseCombat},
{"cannotattackplayer", PlayerFlag_CannotAttackPlayer},
{"cannotattackmonster", PlayerFlag_CannotAttackMonster},
Expand Down Expand Up @@ -65,9 +65,9 @@ const std::unordered_map<std::string, PlayerFlags> ParsePlayerFlagMap = {
{"isalwayspremium", PlayerFlag_IsAlwaysPremium}
};

const std::unordered_map<std::string, PlayerCustomFlags> ParsePlayerCustomFlagMap = {
{"canmapclickteleport", PlayerCustomFlag_CanMapClickTeleport},
{"ignoredbynpcs", PlayerCustomFlag_IgnoredByNpcs}
const phmap::flat_hash_map<std::string, PlayerCustomFlags> ParsePlayerCustomFlagMap = {
{"canmapclickteleport", PlayerCustomFlag_CanMapClickTeleport},
{"ignoredbynpcs", PlayerCustomFlag_IgnoredByNpcs}
};

bool Groups::load()
Expand Down
2 changes: 1 addition & 1 deletion src/creatures/players/player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5456,7 +5456,7 @@ uint16_t Player::getHelpers() const
uint16_t helpers;

if (guild && party) {
std::unordered_set<Player*> helperSet;
phmap::flat_hash_set<Player*> helperSet;

const auto& guildMembers = guild->getMembersOnline();
helperSet.insert(guildMembers.begin(), guildMembers.end());
Expand Down
4 changes: 2 additions & 2 deletions src/creatures/players/player.h
Original file line number Diff line number Diff line change
Expand Up @@ -2154,9 +2154,9 @@ class Player final : public Creature, public Cylinder
void internalAddThing(Thing* thing) override;
void internalAddThing(uint32_t index, Thing* thing) override;

std::unordered_set<uint32_t> attackedSet;
phmap::flat_hash_set<uint32_t> attackedSet;

std::unordered_set<uint32_t> VIPList;
phmap::flat_hash_set<uint32_t> VIPList;

std::map<uint8_t, OpenContainer> openContainers;
std::map<uint32_t, DepotLocker*> depotLockerMap;
Expand Down
18 changes: 9 additions & 9 deletions src/game/game.h
Original file line number Diff line number Diff line change
Expand Up @@ -471,7 +471,7 @@ class Game
void sendOfflineTrainingDialog(Player* player);

const std::map<uint16_t, uint32_t>& getItemsPrice() const { return itemsPriceMap; }
const std::unordered_map<uint32_t, Player*>& getPlayers() const { return players; }
const phmap::flat_hash_map<uint32_t, Player*>& getPlayers() const { return players; }
const std::map<uint32_t, Npc*>& getNpcs() const { return npcs; }

const std::vector<ItemClassification*>& getItemsClassifications() const { return itemsClassifications; }
Expand All @@ -490,7 +490,7 @@ class Game
void removeGuild(uint32_t guildId);
void decreaseBrowseFieldRef(const Position& pos);

std::unordered_map<Tile*, Container*> browseFields;
phmap::flat_hash_map<Tile*, Container*> browseFields;

void internalRemoveItems(std::vector<Item*> itemList, uint32_t amount, bool stackable);

Expand All @@ -514,7 +514,7 @@ class Game
GameStore gameStore;
Canary::protobuf::appearances::Appearances appearances;

std::unordered_set<Tile*> getTilesToClean() const {
phmap::flat_hash_set<Tile*> getTilesToClean() const {
return tilesToClean;
}
void addTileToClean(Tile* tile) {
Expand Down Expand Up @@ -586,11 +586,11 @@ class Game
bool playerSpeakTo(Player* player, SpeakClasses type, const std::string& receiver, const std::string& text);
void playerSpeakToNpc(Player* player, const std::string& text);

std::unordered_map<uint32_t, Player*> players;
std::unordered_map<uint32_t, uint8_t> playersActiveImbuements;
std::unordered_map<std::string, Player*> mappedPlayerNames;
std::unordered_map<uint32_t, Guild*> guilds;
std::unordered_map<uint16_t, Item*> uniqueItems;
phmap::flat_hash_map<uint32_t, Player*> players;
phmap::flat_hash_map<uint32_t, uint8_t> playersActiveImbuements;
phmap::flat_hash_map<std::string, Player*> mappedPlayerNames;
phmap::flat_hash_map<uint32_t, Guild*> guilds;
phmap::flat_hash_map<uint16_t, Item*> uniqueItems;
std::map<uint32_t, uint32_t> stages;

/* Items stored from the lua scripts positions
Expand Down Expand Up @@ -626,7 +626,7 @@ class Game

std::map<uint32_t, BedItem*> bedSleepersMap;

std::unordered_set<Tile*> tilesToClean;
phmap::flat_hash_set<Tile*> tilesToClean;

ModalWindow offlineTrainingWindow { std::numeric_limits<uint32_t>::max(), "Choose a Skill", "Please choose a skill:" };

Expand Down
2 changes: 1 addition & 1 deletion src/game/scheduling/scheduler.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ class Scheduler : public ThreadHolder<Scheduler>

uint32_t lastEventId {0};
std::priority_queue<SchedulerTask*, std::deque<SchedulerTask*>, TaskComparator> eventList;
std::unordered_set<uint32_t> eventIds;
phmap::flat_hash_set<uint32_t> eventIds;
};

constexpr auto g_scheduler = &Scheduler::getInstance;
Expand Down
12 changes: 6 additions & 6 deletions src/items/functions/item_parse.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@

class ConditionDamage;

const std::unordered_map<std::string, ItemParseAttributes_t> ItemParseAttributesMap = {
const phmap::flat_hash_map<std::string, ItemParseAttributes_t> ItemParseAttributesMap = {
{"type", ITEM_PARSE_TYPE},
{"description", ITEM_PARSE_DESCRIPTION},
{"runespellname", ITEM_PARSE_RUNESPELLNAME},
Expand Down Expand Up @@ -149,7 +149,7 @@ const std::unordered_map<std::string, ItemParseAttributes_t> ItemParseAttributes
{"imbuementslot", ITEM_PARSE_IMBUEMENT},
};

const std::unordered_map<std::string, ItemTypes_t> ItemTypesMap = {
const phmap::flat_hash_map<std::string, ItemTypes_t> ItemTypesMap = {
{"key", ITEM_TYPE_KEY},
{"magicfield", ITEM_TYPE_MAGICFIELD},
{"container", ITEM_TYPE_CONTAINER},
Expand All @@ -169,7 +169,7 @@ const std::unordered_map<std::string, ItemTypes_t> ItemTypesMap = {
{"potion", ITEM_TYPE_POTION},
};

const std::unordered_map<std::string, TileFlags_t> TileStatesMap = {
const phmap::flat_hash_map<std::string, TileFlags_t> TileStatesMap = {
{"down", TILESTATE_FLOORCHANGE_DOWN},
{"north", TILESTATE_FLOORCHANGE_NORTH},
{"south", TILESTATE_FLOORCHANGE_SOUTH},
Expand All @@ -179,7 +179,7 @@ const std::unordered_map<std::string, TileFlags_t> TileStatesMap = {
{"eastalt", TILESTATE_FLOORCHANGE_EAST_ALT},
};

const std::unordered_map<std::string, Fluids_t> FluidTypesMap = {
const phmap::flat_hash_map<std::string, Fluids_t> FluidTypesMap = {
{"water", FLUID_WATER },
{"blood", FLUID_BLOOD},
{"beer", FLUID_BEER},
Expand All @@ -200,7 +200,7 @@ const std::unordered_map<std::string, Fluids_t> FluidTypesMap = {
{"ink", FLUID_INK },
};

const std::unordered_map<std::string, WeaponType_t> WeaponTypesMap = {
const phmap::flat_hash_map<std::string, WeaponType_t> WeaponTypesMap = {
{"sword", WEAPON_SWORD},
{"club", WEAPON_CLUB},
{"axe", WEAPON_AXE},
Expand All @@ -210,7 +210,7 @@ const std::unordered_map<std::string, WeaponType_t> WeaponTypesMap = {
{"ammunition", WEAPON_AMMO}
};

const std::unordered_map<std::string, ImbuementTypes_t> ImbuementsTypeMap = {
const phmap::flat_hash_map<std::string, ImbuementTypes_t> ImbuementsTypeMap = {
{"elemental damage", IMBUEMENT_ELEMENTAL_DAMAGE},
{"life leech", IMBUEMENT_LIFE_LEECH},
{"mana leech", IMBUEMENT_MANA_LEECH},
Expand Down
2 changes: 1 addition & 1 deletion src/items/item.h
Original file line number Diff line number Diff line change
Expand Up @@ -319,7 +319,7 @@ class ItemAttributes
static double emptyDouble;
static bool emptyBool;

typedef std::unordered_map<std::string, CustomAttribute> CustomAttributeMap;
typedef phmap::flat_hash_map<std::string, CustomAttribute> CustomAttributeMap;

struct Attribute {
union {
Expand Down
2 changes: 1 addition & 1 deletion src/items/items.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ void Items::clear()
nameToItems.clear();
}

using LootTypeNames = std::unordered_map<std::string, ItemTypes_t>;
using LootTypeNames = phmap::flat_hash_map<std::string, ItemTypes_t>;

LootTypeNames lootTypeNames = {
{"armor", ITEM_TYPE_ARMOR},
Expand Down
2 changes: 1 addition & 1 deletion src/items/tile.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class BedItem;

using CreatureVector = std::vector<Creature*>;
using ItemVector = std::vector<Item*>;
using SpectatorHashSet = std::unordered_set<Creature*>;
using SpectatorHashSet = phmap::flat_hash_set<Creature*>;

class TileItemVector : private ItemVector
{
Expand Down
10 changes: 5 additions & 5 deletions src/lua/scripts/lua_environment.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,16 +59,16 @@ class LuaEnvironment: public LuaScriptInterface {
private:
void executeTimerEvent(uint32_t eventIndex);

std::unordered_map < uint32_t,
phmap::flat_hash_map < uint32_t,
LuaTimerEventDesc > timerEvents;
std::unordered_map < uint32_t,
phmap::flat_hash_map < uint32_t,
Combat * > combatMap;
std::unordered_map < uint32_t,
phmap::flat_hash_map < uint32_t,
AreaCombat * > areaMap;

std::unordered_map < LuaScriptInterface * ,
phmap::flat_hash_map < LuaScriptInterface * ,
std::vector < uint32_t >> combatIdMap;
std::unordered_map < LuaScriptInterface * ,
phmap::flat_hash_map < LuaScriptInterface * ,
std::vector < uint32_t >> areaIdMap;

LuaScriptInterface * testInterface = nullptr;
Expand Down
2 changes: 1 addition & 1 deletion src/lua/scripts/script_environment.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ class ScriptEnvironment {
static std::multimap < ScriptEnvironment * , Item * > tempItems;

// local item map
std::unordered_map < uint32_t, Item * > localMap;
phmap::flat_hash_map < uint32_t, Item * > localMap;
uint32_t lastUID = std::numeric_limits < uint16_t > ::max();

// script file id
Expand Down
4 changes: 2 additions & 2 deletions src/map/house/house.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ class AccessList

private:
std::string list;
std::unordered_set<uint32_t> playerList;
std::unordered_set<uint32_t> guildRankList;
phmap::flat_hash_set<uint32_t> playerList;
phmap::flat_hash_set<uint32_t> guildRankList;
bool allowEveryone = false;
};

Expand Down
2 changes: 1 addition & 1 deletion src/map/map.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ class AStarNodes
private:
AStarNode nodes[MAX_NODES];
bool openNodes[MAX_NODES];
std::unordered_map<uint32_t, AStarNode*> nodeTable;
phmap::flat_hash_map<uint32_t, AStarNode*> nodeTable;
size_t curNode;
int_fast32_t closedNodes;
};
Expand Down
1 change: 1 addition & 0 deletions src/otpch.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,5 +46,6 @@
#include <pugixml.hpp>

#include "spdlog/spdlog.h"
#include "parallel_hashmap/phmap.h"

#endif // SRC_OTPCH_H_
2 changes: 1 addition & 1 deletion src/server/network/connection/connection.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ class ConnectionManager
private:
ConnectionManager() = default;

std::unordered_set<Connection_ptr> connections;
phmap::flat_hash_set<Connection_ptr> connections;
std::mutex connectionManagerLock;
};

Expand Down
4 changes: 2 additions & 2 deletions src/server/network/protocol/protocolgame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6707,7 +6707,7 @@ void ProtocolGame::openImbuementWindow(Item *item)
}

std::vector<Imbuement *> imbuements = g_imbuements().getImbuements(player, item);
std::unordered_map<uint16_t, uint16_t> needItems;
phmap::flat_hash_map<uint16_t, uint16_t> needItems;

msg.add<uint16_t>(imbuements.size());
for (const Imbuement *imbuement : imbuements)
Expand Down Expand Up @@ -7168,7 +7168,7 @@ void ProtocolGame::reloadCreature(const Creature *creature)

NetworkMessage msg;

std::unordered_set<uint32_t>::iterator it = std::find(knownCreatureSet.begin(), knownCreatureSet.end(), creature->getID());
phmap::flat_hash_set<uint32_t>::iterator it = std::find(knownCreatureSet.begin(), knownCreatureSet.end(), creature->getID());
if (it != knownCreatureSet.end())
{
msg.addByte(0x6B);
Expand Down
2 changes: 1 addition & 1 deletion src/server/network/protocol/protocolgame.h
Original file line number Diff line number Diff line change
Expand Up @@ -474,7 +474,7 @@ class ProtocolGame final : public Protocol

friend class Player;

std::unordered_set<uint32_t> knownCreatureSet;
phmap::flat_hash_set<uint32_t> knownCreatureSet;
Player *player = nullptr;

uint32_t eventConnect = 0;
Expand Down
2 changes: 1 addition & 1 deletion src/server/server.h
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ class ServiceManager
private:
void die();

std::unordered_map<uint16_t, ServicePort_ptr> acceptors;
phmap::flat_hash_map<uint16_t, ServicePort_ptr> acceptors;

boost::asio::io_service io_service;
Signals signals{io_service};
Expand Down
16 changes: 8 additions & 8 deletions src/utils/tools.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -503,19 +503,19 @@ Direction getDirectionTo(const Position& from, const Position& to)
return dir;
}

using MagicEffectNames = std::unordered_map<std::string, MagicEffectClasses>;
using ShootTypeNames = std::unordered_map<std::string, ShootType_t>;
using CombatTypeNames = std::unordered_map<CombatType_t, std::string, std::hash<int32_t>>;
using AmmoTypeNames = std::unordered_map<std::string, Ammo_t>;
using WeaponActionNames = std::unordered_map<std::string, WeaponAction_t>;
using SkullNames = std::unordered_map<std::string, Skulls_t>;
using ImbuementTypeNames = std::unordered_map<std::string, ImbuementTypes_t>;
using MagicEffectNames = phmap::flat_hash_map<std::string, MagicEffectClasses>;
using ShootTypeNames = phmap::flat_hash_map<std::string, ShootType_t>;
using CombatTypeNames = phmap::flat_hash_map<CombatType_t, std::string, std::hash<int32_t>>;
using AmmoTypeNames = phmap::flat_hash_map<std::string, Ammo_t>;
using WeaponActionNames = phmap::flat_hash_map<std::string, WeaponAction_t>;
using SkullNames = phmap::flat_hash_map<std::string, Skulls_t>;
using ImbuementTypeNames = phmap::flat_hash_map<std::string, ImbuementTypes_t>;

/**
* @Deprecated
* It will be dropped with monsters. Use RespawnPeriod_t instead.
*/
using SpawnTypeNames = std::unordered_map<std::string, SpawnType_t>;
using SpawnTypeNames = phmap::flat_hash_map<std::string, SpawnType_t>;

MagicEffectNames magicEffectNames = {
{"assassin", CONST_ME_ASSASSIN},
Expand Down
4 changes: 2 additions & 2 deletions src/utils/utils_definitions.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -683,7 +683,7 @@ enum item_t : uint16_t {
};

// A map which contains items that, when on creating, should be transformed to the default type.
const std::unordered_map<item_t, item_t> ItemTransformationMap = {
const phmap::flat_hash_map<item_t, item_t> ItemTransformationMap = {
{ITEM_SWORD_RING_ACTIVATED, ITEM_SWORD_RING},
{ITEM_CLUB_RING_ACTIVATED, ITEM_CLUB_RING},
{ITEM_DWARVEN_RING_ACTIVATED, ITEM_DWARVEN_RING},
Expand Down Expand Up @@ -753,7 +753,7 @@ enum Blessings_t : uint8_t {
HEARTH_OF_THE_MOUNTAIN = 8,
};

const std::unordered_map<Blessings_t, std::string> BlessingNames = {
const phmap::flat_hash_map<Blessings_t, std::string> BlessingNames = {
{TWIST_OF_FATE, "Twist of Fate"},
{WISDOM_OF_SOLITUDE, "The Wisdom of Solitude"},
{SPARK_OF_THE_PHOENIX, "The Spark of the Phoenix"},
Expand Down
1 change: 1 addition & 0 deletions vcpkg.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
"curl",
"jsoncpp",
"protobuf",
"parallel-hashmap",
{
"name": "luajit",
"platform": "!arm"
Expand Down