forked from Mirrorlandia_minetest/minetest
Use more unordered_maps to improve performance in c++11 builds
This commit is contained in:
parent
997fc59c7e
commit
667975fe3a
@ -623,10 +623,8 @@ void Client::step(float dtime)
|
|||||||
Update positions of sounds attached to objects
|
Update positions of sounds attached to objects
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
for(std::map<int, u16>::iterator
|
for(UNORDERED_MAP<int, u16>::iterator i = m_sounds_to_objects.begin();
|
||||||
i = m_sounds_to_objects.begin();
|
i != m_sounds_to_objects.end(); ++i) {
|
||||||
i != m_sounds_to_objects.end(); ++i)
|
|
||||||
{
|
|
||||||
int client_id = i->first;
|
int client_id = i->first;
|
||||||
u16 object_id = i->second;
|
u16 object_id = i->second;
|
||||||
ClientActiveObject *cao = m_env.getActiveObject(object_id);
|
ClientActiveObject *cao = m_env.getActiveObject(object_id);
|
||||||
@ -645,8 +643,7 @@ void Client::step(float dtime)
|
|||||||
m_removed_sounds_check_timer = 0;
|
m_removed_sounds_check_timer = 0;
|
||||||
// Find removed sounds and clear references to them
|
// Find removed sounds and clear references to them
|
||||||
std::vector<s32> removed_server_ids;
|
std::vector<s32> removed_server_ids;
|
||||||
for(std::map<s32, int>::iterator
|
for(UNORDERED_MAP<s32, int>::iterator i = m_sounds_server_to_client.begin();
|
||||||
i = m_sounds_server_to_client.begin();
|
|
||||||
i != m_sounds_server_to_client.end();) {
|
i != m_sounds_server_to_client.end();) {
|
||||||
s32 server_id = i->first;
|
s32 server_id = i->first;
|
||||||
int client_id = i->second;
|
int client_id = i->second;
|
||||||
|
@ -663,11 +663,11 @@ private:
|
|||||||
// Sounds
|
// Sounds
|
||||||
float m_removed_sounds_check_timer;
|
float m_removed_sounds_check_timer;
|
||||||
// Mapping from server sound ids to our sound ids
|
// 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!
|
// 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
|
// And relations to objects
|
||||||
std::map<int, u16> m_sounds_to_objects;
|
UNORDERED_MAP<int, u16> m_sounds_to_objects;
|
||||||
|
|
||||||
// Privileges
|
// Privileges
|
||||||
UNORDERED_SET<std::string> m_privileges;
|
UNORDERED_SET<std::string> m_privileges;
|
||||||
|
@ -43,12 +43,11 @@ ClientActiveObject* ClientActiveObject::create(ActiveObjectType type,
|
|||||||
IGameDef *gamedef, ClientEnvironment *env)
|
IGameDef *gamedef, ClientEnvironment *env)
|
||||||
{
|
{
|
||||||
// Find factory function
|
// Find factory function
|
||||||
std::map<u16, Factory>::iterator n;
|
UNORDERED_MAP<u16, Factory>::iterator n = m_types.find(type);
|
||||||
n = m_types.find(type);
|
|
||||||
if(n == m_types.end()) {
|
if(n == m_types.end()) {
|
||||||
// If factory is not found, just return.
|
// If factory is not found, just return.
|
||||||
warningstream<<"ClientActiveObject: No factory for type="
|
warningstream << "ClientActiveObject: No factory for type="
|
||||||
<<(int)type<<std::endl;
|
<< (int)type << std::endl;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,8 +58,7 @@ ClientActiveObject* ClientActiveObject::create(ActiveObjectType type,
|
|||||||
|
|
||||||
void ClientActiveObject::registerType(u16 type, Factory f)
|
void ClientActiveObject::registerType(u16 type, Factory f)
|
||||||
{
|
{
|
||||||
std::map<u16, Factory>::iterator n;
|
UNORDERED_MAP<u16, Factory>::iterator n = m_types.find(type);
|
||||||
n = m_types.find(type);
|
|
||||||
if(n != m_types.end())
|
if(n != m_types.end())
|
||||||
return;
|
return;
|
||||||
m_types[type] = f;
|
m_types[type] = f;
|
||||||
|
@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#include "irrlichttypes_extrabloated.h"
|
#include "irrlichttypes_extrabloated.h"
|
||||||
#include "activeobject.h"
|
#include "activeobject.h"
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include "util/cpp11_container.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
@ -103,7 +104,7 @@ protected:
|
|||||||
ClientEnvironment *m_env;
|
ClientEnvironment *m_env;
|
||||||
private:
|
private:
|
||||||
// Used for creating objects based on type
|
// Used for creating objects based on type
|
||||||
static std::map<u16, Factory> m_types;
|
static UNORDERED_MAP<u16, Factory> m_types;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct DistanceSortedActiveObject
|
struct DistanceSortedActiveObject
|
||||||
|
@ -51,7 +51,7 @@ struct ToolCapabilities;
|
|||||||
|
|
||||||
#define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")"
|
#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():
|
SmoothTranslator::SmoothTranslator():
|
||||||
vect_old(0,0,0),
|
vect_old(0,0,0),
|
||||||
|
@ -812,9 +812,7 @@ void Client::handleCommand_StopSound(NetworkPacket* pkt)
|
|||||||
|
|
||||||
*pkt >> server_id;
|
*pkt >> server_id;
|
||||||
|
|
||||||
std::map<s32, int>::iterator i =
|
UNORDERED_MAP<s32, int>::iterator i = m_sounds_server_to_client.find(server_id);
|
||||||
m_sounds_server_to_client.find(server_id);
|
|
||||||
|
|
||||||
if (i != m_sounds_server_to_client.end()) {
|
if (i != m_sounds_server_to_client.end()) {
|
||||||
int client_id = i->second;
|
int client_id = i->second;
|
||||||
m_sound->stopSound(client_id);
|
m_sound->stopSound(client_id);
|
||||||
|
@ -244,7 +244,7 @@ bool read_schematic_def(lua_State *L, int index,
|
|||||||
schem->schemdata = new MapNode[numnodes];
|
schem->schemdata = new MapNode[numnodes];
|
||||||
|
|
||||||
size_t names_base = names->size();
|
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;
|
u32 i = 0;
|
||||||
for (lua_pushnil(L); lua_next(L, -2); i++, lua_pop(L, 1)) {
|
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);
|
u8 param2 = getintfield_default(L, -1, "param2", 0);
|
||||||
|
|
||||||
//// Find or add new nodename-to-ID mapping
|
//// 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;
|
content_t name_index;
|
||||||
if (it != name_id_map.end()) {
|
if (it != name_id_map.end()) {
|
||||||
name_index = it->second;
|
name_index = it->second;
|
||||||
|
@ -794,7 +794,7 @@ void Server::AsyncRunStep(bool initial_step)
|
|||||||
|
|
||||||
// Key = object id
|
// Key = object id
|
||||||
// Value = data sent by object
|
// 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
|
// Get active object messages from environment
|
||||||
for(;;) {
|
for(;;) {
|
||||||
@ -803,7 +803,7 @@ void Server::AsyncRunStep(bool initial_step)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
std::vector<ActiveObjectMessage>* message_list = NULL;
|
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);
|
n = buffered_messages.find(aom.id);
|
||||||
if (n == buffered_messages.end()) {
|
if (n == buffered_messages.end()) {
|
||||||
message_list = new std::vector<ActiveObjectMessage>;
|
message_list = new std::vector<ActiveObjectMessage>;
|
||||||
@ -824,7 +824,7 @@ void Server::AsyncRunStep(bool initial_step)
|
|||||||
std::string reliable_data;
|
std::string reliable_data;
|
||||||
std::string unreliable_data;
|
std::string unreliable_data;
|
||||||
// Go through all objects in message buffer
|
// 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.begin();
|
||||||
j != buffered_messages.end(); ++j) {
|
j != buffered_messages.end(); ++j) {
|
||||||
// If object is not known by client, skip it
|
// If object is not known by client, skip it
|
||||||
@ -868,7 +868,7 @@ void Server::AsyncRunStep(bool initial_step)
|
|||||||
m_clients.unlock();
|
m_clients.unlock();
|
||||||
|
|
||||||
// Clear buffered_messages
|
// 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.begin();
|
||||||
i != buffered_messages.end(); ++i) {
|
i != buffered_messages.end(); ++i) {
|
||||||
delete i->second;
|
delete i->second;
|
||||||
|
@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#define UTIL_STRING_HEADER
|
#define UTIL_STRING_HEADER
|
||||||
|
|
||||||
#include "irrlichttypes_bloated.h"
|
#include "irrlichttypes_bloated.h"
|
||||||
|
#include "cpp11_container.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <cstring>
|
#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) < 0xe0) ? 2 : \
|
||||||
(((unsigned char)(x) < 0xf0) ? 3 : 4))
|
(((unsigned char)(x) < 0xf0) ? 3 : 4))
|
||||||
|
|
||||||
typedef std::map<std::string, std::string> StringMap;
|
typedef UNORDERED_MAP<std::string, std::string> StringMap;
|
||||||
|
|
||||||
struct FlagDesc {
|
struct FlagDesc {
|
||||||
const char *name;
|
const char *name;
|
||||||
|
Loading…
Reference in New Issue
Block a user