summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoic Blot <loic.blot@unix-experience.fr>2016-10-06 08:48:20 +0200
committersfan5 <sfan5@live.de>2016-10-06 12:33:35 +0200
commit667975fe3adee935a3f4d2b1a421a295771c664d (patch)
tree9cbc5505b0aa528eabe103e49cbe0ff205f87527
parent997fc59c7e29a4d2b3f19df9972f3a7d4ac894e3 (diff)
downloadminetest-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.cpp9
-rw-r--r--src/client.h6
-rw-r--r--src/clientobject.cpp10
-rw-r--r--src/clientobject.h3
-rw-r--r--src/content_cao.cpp2
-rw-r--r--src/network/clientpackethandler.cpp4
-rw-r--r--src/script/lua_api/l_mapgen.cpp4
-rw-r--r--src/server.cpp8
-rw-r--r--src/util/string.h3
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;