diff options
author | Loic Blot <loic.blot@unix-experience.fr> | 2016-10-06 08:48:20 +0200 |
---|---|---|
committer | sfan5 <sfan5@live.de> | 2016-10-06 12:33:35 +0200 |
commit | 667975fe3adee935a3f4d2b1a421a295771c664d (patch) | |
tree | 9cbc5505b0aa528eabe103e49cbe0ff205f87527 | |
parent | 997fc59c7e29a4d2b3f19df9972f3a7d4ac894e3 (diff) | |
download | minetest-667975fe3adee935a3f4d2b1a421a295771c664d.tar.gz minetest-667975fe3adee935a3f4d2b1a421a295771c664d.tar.bz2 minetest-667975fe3adee935a3f4d2b1a421a295771c664d.zip |
Use more unordered_maps to improve performance in c++11 builds
-rw-r--r-- | src/client.cpp | 9 | ||||
-rw-r--r-- | src/client.h | 6 | ||||
-rw-r--r-- | src/clientobject.cpp | 10 | ||||
-rw-r--r-- | src/clientobject.h | 3 | ||||
-rw-r--r-- | src/content_cao.cpp | 2 | ||||
-rw-r--r-- | src/network/clientpackethandler.cpp | 4 | ||||
-rw-r--r-- | src/script/lua_api/l_mapgen.cpp | 4 | ||||
-rw-r--r-- | src/server.cpp | 8 | ||||
-rw-r--r-- | src/util/string.h | 3 |
9 files changed, 22 insertions, 27 deletions
diff --git a/src/client.cpp b/src/client.cpp index a599e21dc..63653998a 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -623,10 +623,8 @@ void Client::step(float dtime) Update positions of sounds attached to objects */ { - for(std::map<int, u16>::iterator - i = m_sounds_to_objects.begin(); - i != m_sounds_to_objects.end(); ++i) - { + for(UNORDERED_MAP<int, u16>::iterator i = m_sounds_to_objects.begin(); + i != m_sounds_to_objects.end(); ++i) { int client_id = i->first; u16 object_id = i->second; ClientActiveObject *cao = m_env.getActiveObject(object_id); @@ -645,8 +643,7 @@ void Client::step(float dtime) m_removed_sounds_check_timer = 0; // Find removed sounds and clear references to them std::vector<s32> removed_server_ids; - for(std::map<s32, int>::iterator - i = m_sounds_server_to_client.begin(); + for(UNORDERED_MAP<s32, int>::iterator i = m_sounds_server_to_client.begin(); i != m_sounds_server_to_client.end();) { s32 server_id = i->first; int client_id = i->second; diff --git a/src/client.h b/src/client.h index fb479068f..a71c1dcbc 100644 --- a/src/client.h +++ b/src/client.h @@ -663,11 +663,11 @@ private: // Sounds float m_removed_sounds_check_timer; // Mapping from server sound ids to our sound ids - std::map<s32, int> m_sounds_server_to_client; + UNORDERED_MAP<s32, int> m_sounds_server_to_client; // And the other way! - std::map<int, s32> m_sounds_client_to_server; + UNORDERED_MAP<int, s32> m_sounds_client_to_server; // And relations to objects - std::map<int, u16> m_sounds_to_objects; + UNORDERED_MAP<int, u16> m_sounds_to_objects; // Privileges UNORDERED_SET<std::string> m_privileges; diff --git a/src/clientobject.cpp b/src/clientobject.cpp index a11757ea6..ff3f47187 100644 --- a/src/clientobject.cpp +++ b/src/clientobject.cpp @@ -43,12 +43,11 @@ ClientActiveObject* ClientActiveObject::create(ActiveObjectType type, IGameDef *gamedef, ClientEnvironment *env) { // Find factory function - std::map<u16, Factory>::iterator n; - n = m_types.find(type); + UNORDERED_MAP<u16, Factory>::iterator n = m_types.find(type); if(n == m_types.end()) { // If factory is not found, just return. - warningstream<<"ClientActiveObject: No factory for type=" - <<(int)type<<std::endl; + warningstream << "ClientActiveObject: No factory for type=" + << (int)type << std::endl; return NULL; } @@ -59,8 +58,7 @@ ClientActiveObject* ClientActiveObject::create(ActiveObjectType type, void ClientActiveObject::registerType(u16 type, Factory f) { - std::map<u16, Factory>::iterator n; - n = m_types.find(type); + UNORDERED_MAP<u16, Factory>::iterator n = m_types.find(type); if(n != m_types.end()) return; m_types[type] = f; diff --git a/src/clientobject.h b/src/clientobject.h index 3cc7c2391..c4e1a634b 100644 --- a/src/clientobject.h +++ b/src/clientobject.h @@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "irrlichttypes_extrabloated.h" #include "activeobject.h" #include <map> +#include "util/cpp11_container.h" /* @@ -103,7 +104,7 @@ protected: ClientEnvironment *m_env; private: // Used for creating objects based on type - static std::map<u16, Factory> m_types; + static UNORDERED_MAP<u16, Factory> m_types; }; struct DistanceSortedActiveObject diff --git a/src/content_cao.cpp b/src/content_cao.cpp index a141690f6..33dae6822 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -51,7 +51,7 @@ struct ToolCapabilities; #define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")" -std::map<u16, ClientActiveObject::Factory> ClientActiveObject::m_types; +UNORDERED_MAP<u16, ClientActiveObject::Factory> ClientActiveObject::m_types; SmoothTranslator::SmoothTranslator(): vect_old(0,0,0), diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp index 48c573da5..6d42edd7d 100644 --- a/src/network/clientpackethandler.cpp +++ b/src/network/clientpackethandler.cpp @@ -812,9 +812,7 @@ void Client::handleCommand_StopSound(NetworkPacket* pkt) *pkt >> server_id; - std::map<s32, int>::iterator i = - m_sounds_server_to_client.find(server_id); - + UNORDERED_MAP<s32, int>::iterator i = m_sounds_server_to_client.find(server_id); if (i != m_sounds_server_to_client.end()) { int client_id = i->second; m_sound->stopSound(client_id); diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index a176f4f52..da8e71cdc 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -244,7 +244,7 @@ bool read_schematic_def(lua_State *L, int index, schem->schemdata = new MapNode[numnodes]; size_t names_base = names->size(); - std::map<std::string, content_t> name_id_map; + UNORDERED_MAP<std::string, content_t> name_id_map; u32 i = 0; for (lua_pushnil(L); lua_next(L, -2); i++, lua_pop(L, 1)) { @@ -266,7 +266,7 @@ bool read_schematic_def(lua_State *L, int index, u8 param2 = getintfield_default(L, -1, "param2", 0); //// Find or add new nodename-to-ID mapping - std::map<std::string, content_t>::iterator it = name_id_map.find(name); + UNORDERED_MAP<std::string, content_t>::iterator it = name_id_map.find(name); content_t name_index; if (it != name_id_map.end()) { name_index = it->second; diff --git a/src/server.cpp b/src/server.cpp index a8494f76e..e9983ba11 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -794,7 +794,7 @@ void Server::AsyncRunStep(bool initial_step) // Key = object id // Value = data sent by object - std::map<u16, std::vector<ActiveObjectMessage>* > buffered_messages; + UNORDERED_MAP<u16, std::vector<ActiveObjectMessage>* > buffered_messages; // Get active object messages from environment for(;;) { @@ -803,7 +803,7 @@ void Server::AsyncRunStep(bool initial_step) break; std::vector<ActiveObjectMessage>* message_list = NULL; - std::map<u16, std::vector<ActiveObjectMessage>* >::iterator n; + UNORDERED_MAP<u16, std::vector<ActiveObjectMessage>* >::iterator n; n = buffered_messages.find(aom.id); if (n == buffered_messages.end()) { message_list = new std::vector<ActiveObjectMessage>; @@ -824,7 +824,7 @@ void Server::AsyncRunStep(bool initial_step) std::string reliable_data; std::string unreliable_data; // Go through all objects in message buffer - for (std::map<u16, std::vector<ActiveObjectMessage>* >::iterator + for (UNORDERED_MAP<u16, std::vector<ActiveObjectMessage>* >::iterator j = buffered_messages.begin(); j != buffered_messages.end(); ++j) { // If object is not known by client, skip it @@ -868,7 +868,7 @@ void Server::AsyncRunStep(bool initial_step) m_clients.unlock(); // Clear buffered_messages - for(std::map<u16, std::vector<ActiveObjectMessage>* >::iterator + for(UNORDERED_MAP<u16, std::vector<ActiveObjectMessage>* >::iterator i = buffered_messages.begin(); i != buffered_messages.end(); ++i) { delete i->second; diff --git a/src/util/string.h b/src/util/string.h index 724543a36..572c37150 100644 --- a/src/util/string.h +++ b/src/util/string.h @@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #define UTIL_STRING_HEADER #include "irrlichttypes_bloated.h" +#include "cpp11_container.h" #include <stdlib.h> #include <string> #include <cstring> @@ -54,7 +55,7 @@ with this program; if not, write to the Free Software Foundation, Inc., (((unsigned char)(x) < 0xe0) ? 2 : \ (((unsigned char)(x) < 0xf0) ? 3 : 4)) -typedef std::map<std::string, std::string> StringMap; +typedef UNORDERED_MAP<std::string, std::string> StringMap; struct FlagDesc { const char *name; |