Skip to content

Commit 5f084cd

Browse files
committedOct 5, 2016
Make some maps unordered to improve performance
* This permit to improve performance on C++11 builds * use some existing typedefs in tools maps * minor code style changes
1 parent d4c7625 commit 5f084cd

File tree

5 files changed

+38
-48
lines changed

5 files changed

+38
-48
lines changed
 

Diff for: ‎src/script/common/c_content.cpp

+8-10
Original file line numberDiff line numberDiff line change
@@ -829,20 +829,18 @@ void push_tool_capabilities(lua_State *L,
829829
// Create groupcaps table
830830
lua_newtable(L);
831831
// For each groupcap
832-
for(std::map<std::string, ToolGroupCap>::const_iterator
833-
i = toolcap.groupcaps.begin(); i != toolcap.groupcaps.end(); i++){
832+
for (ToolGCMap::const_iterator i = toolcap.groupcaps.begin();
833+
i != toolcap.groupcaps.end(); i++) {
834834
// Create groupcap table
835835
lua_newtable(L);
836836
const std::string &name = i->first;
837837
const ToolGroupCap &groupcap = i->second;
838838
// Create subtable "times"
839839
lua_newtable(L);
840-
for(std::map<int, float>::const_iterator
841-
i = groupcap.times.begin(); i != groupcap.times.end(); i++){
842-
int rating = i->first;
843-
float time = i->second;
844-
lua_pushinteger(L, rating);
845-
lua_pushnumber(L, time);
840+
for (UNORDERED_MAP<int, float>::const_iterator
841+
i = groupcap.times.begin(); i != groupcap.times.end(); i++) {
842+
lua_pushinteger(L, i->first);
843+
lua_pushnumber(L, i->second);
846844
lua_settable(L, -3);
847845
}
848846
// Set subtable "times"
@@ -858,8 +856,8 @@ void push_tool_capabilities(lua_State *L,
858856
//Create damage_groups table
859857
lua_newtable(L);
860858
// For each damage group
861-
for(std::map<std::string, s16>::const_iterator
862-
i = toolcap.damageGroups.begin(); i != toolcap.damageGroups.end(); i++){
859+
for (DamageGroup::const_iterator i = toolcap.damageGroups.begin();
860+
i != toolcap.damageGroups.end(); i++) {
863861
// Create damage group table
864862
lua_pushinteger(L, i->second);
865863
lua_setfield(L, -2, i->first.c_str());

Diff for: ‎src/settings.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
2424
#include "util/string.h"
2525
#include "threading/mutex.h"
2626
#include <string>
27-
#include <map>
27+
#include "util/cpp11_container.h"
2828
#include <list>
2929
#include <set>
3030

@@ -45,7 +45,7 @@ typedef std::vector<
4545
>
4646
> SettingsCallbackList;
4747

48-
typedef std::map<std::string, SettingsCallbackList> SettingsCallbackMap;
48+
typedef UNORDERED_MAP<std::string, SettingsCallbackList> SettingsCallbackMap;
4949

5050
enum ValueType {
5151
VALUETYPE_STRING,

Diff for: ‎src/sound_openal.cpp

+11-15
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ with this program; ifnot, write to the Free Software Foundation, Inc.,
4141
#include "log.h"
4242
#include "util/numeric.h" // myrand()
4343
#include "porting.h"
44-
#include <map>
4544
#include <vector>
4645
#include <fstream>
46+
#include "util/cpp11_container.h"
4747

4848
#define BUFFER_SIZE 30000
4949

@@ -271,8 +271,8 @@ class OpenALSoundManager: public ISoundManager
271271
ALCdevice *m_device;
272272
ALCcontext *m_context;
273273
int m_next_id;
274-
std::map<std::string, std::vector<SoundBuffer*> > m_buffers;
275-
std::map<int, PlayingSound*> m_sounds_playing;
274+
UNORDERED_MAP<std::string, std::vector<SoundBuffer*> > m_buffers;
275+
UNORDERED_MAP<int, PlayingSound*> m_sounds_playing;
276276
v3f m_listener_pos;
277277
public:
278278
bool m_is_initialized;
@@ -337,7 +337,7 @@ class OpenALSoundManager: public ISoundManager
337337
alcCloseDevice(m_device);
338338
m_device = NULL;
339339

340-
for (std::map<std::string, std::vector<SoundBuffer*> >::iterator i = m_buffers.begin();
340+
for (UNORDERED_MAP<std::string, std::vector<SoundBuffer*> >::iterator i = m_buffers.begin();
341341
i != m_buffers.end(); ++i) {
342342
for (std::vector<SoundBuffer*>::iterator iter = (*i).second.begin();
343343
iter != (*i).second.end(); ++iter) {
@@ -351,7 +351,7 @@ class OpenALSoundManager: public ISoundManager
351351

352352
void addBuffer(const std::string &name, SoundBuffer *buf)
353353
{
354-
std::map<std::string, std::vector<SoundBuffer*> >::iterator i =
354+
UNORDERED_MAP<std::string, std::vector<SoundBuffer*> >::iterator i =
355355
m_buffers.find(name);
356356
if(i != m_buffers.end()){
357357
i->second.push_back(buf);
@@ -365,7 +365,7 @@ class OpenALSoundManager: public ISoundManager
365365

366366
SoundBuffer* getBuffer(const std::string &name)
367367
{
368-
std::map<std::string, std::vector<SoundBuffer*> >::iterator i =
368+
UNORDERED_MAP<std::string, std::vector<SoundBuffer*> >::iterator i =
369369
m_buffers.find(name);
370370
if(i == m_buffers.end())
371371
return NULL;
@@ -443,8 +443,7 @@ class OpenALSoundManager: public ISoundManager
443443

444444
void deleteSound(int id)
445445
{
446-
std::map<int, PlayingSound*>::iterator i =
447-
m_sounds_playing.find(id);
446+
UNORDERED_MAP<int, PlayingSound*>::iterator i = m_sounds_playing.find(id);
448447
if(i == m_sounds_playing.end())
449448
return;
450449
PlayingSound *sound = i->second;
@@ -484,10 +483,8 @@ class OpenALSoundManager: public ISoundManager
484483
<<m_sounds_playing.size()<<" playing sounds, "
485484
<<m_buffers.size()<<" sound names loaded"<<std::endl;
486485
std::set<int> del_list;
487-
for(std::map<int, PlayingSound*>::iterator
488-
i = m_sounds_playing.begin();
489-
i != m_sounds_playing.end(); ++i)
490-
{
486+
for(UNORDERED_MAP<int, PlayingSound*>::iterator i = m_sounds_playing.begin();
487+
i != m_sounds_playing.end(); ++i) {
491488
int id = i->first;
492489
PlayingSound *sound = i->second;
493490
// If not playing, remove it
@@ -583,9 +580,8 @@ class OpenALSoundManager: public ISoundManager
583580
}
584581
void updateSoundPosition(int id, v3f pos)
585582
{
586-
std::map<int, PlayingSound*>::iterator i =
587-
m_sounds_playing.find(id);
588-
if(i == m_sounds_playing.end())
583+
UNORDERED_MAP<int, PlayingSound*>::iterator i = m_sounds_playing.find(id);
584+
if (i == m_sounds_playing.end())
589585
return;
590586
PlayingSound *sound = i->second;
591587

Diff for: ‎src/tool.cpp

+11-12
Original file line numberDiff line numberDiff line change
@@ -34,24 +34,23 @@ void ToolCapabilities::serialize(std::ostream &os, u16 protocol_version) const
3434
writeF1000(os, full_punch_interval);
3535
writeS16(os, max_drop_level);
3636
writeU32(os, groupcaps.size());
37-
for(std::map<std::string, ToolGroupCap>::const_iterator
38-
i = groupcaps.begin(); i != groupcaps.end(); ++i){
37+
for (ToolGCMap::const_iterator i = groupcaps.begin(); i != groupcaps.end(); ++i) {
3938
const std::string *name = &i->first;
4039
const ToolGroupCap *cap = &i->second;
4140
os<<serializeString(*name);
4241
writeS16(os, cap->uses);
4342
writeS16(os, cap->maxlevel);
4443
writeU32(os, cap->times.size());
45-
for(std::map<int, float>::const_iterator
46-
i = cap->times.begin(); i != cap->times.end(); ++i){
44+
for (UNORDERED_MAP<int, float>::const_iterator
45+
i = cap->times.begin(); i != cap->times.end(); ++i) {
4746
writeS16(os, i->first);
4847
writeF1000(os, i->second);
4948
}
5049
}
5150
if(protocol_version > 17){
5251
writeU32(os, damageGroups.size());
53-
for(std::map<std::string, s16>::const_iterator
54-
i = damageGroups.begin(); i != damageGroups.end(); ++i){
52+
for (DamageGroup::const_iterator i = damageGroups.begin();
53+
i != damageGroups.end(); ++i) {
5554
os<<serializeString(i->first);
5655
writeS16(os, i->second);
5756
}
@@ -106,7 +105,7 @@ DigParams getDigParams(const ItemGroupList &groups,
106105
default:
107106
break;
108107
}
109-
108+
110109
// Values to be returned (with a bit of conversion)
111110
bool result_diggable = false;
112111
float result_time = 0.0;
@@ -115,8 +114,8 @@ DigParams getDigParams(const ItemGroupList &groups,
115114

116115
int level = itemgroup_get(groups, "level");
117116
//infostream<<"level="<<level<<std::endl;
118-
for(std::map<std::string, ToolGroupCap>::const_iterator
119-
i = tp->groupcaps.begin(); i != tp->groupcaps.end(); ++i){
117+
for (ToolGCMap::const_iterator i = tp->groupcaps.begin();
118+
i != tp->groupcaps.end(); ++i) {
120119
const std::string &name = i->first;
121120
//infostream<<"group="<<name<<std::endl;
122121
const ToolGroupCap &cap = i->second;
@@ -163,8 +162,8 @@ HitParams getHitParams(const ItemGroupList &armor_groups,
163162
s16 damage = 0;
164163
float full_punch_interval = tp->full_punch_interval;
165164

166-
for(std::map<std::string, s16>::const_iterator
167-
i = tp->damageGroups.begin(); i != tp->damageGroups.end(); ++i){
165+
for (DamageGroup::const_iterator i = tp->damageGroups.begin();
166+
i != tp->damageGroups.end(); ++i) {
168167
s16 armor = itemgroup_get(armor_groups, i->first);
169168
damage += i->second * rangelim(time_from_last_punch / full_punch_interval, 0.0, 1.0)
170169
* armor / 100.0;
@@ -197,7 +196,7 @@ PunchDamageResult getPunchDamage(
197196
do_hit = false;
198197
}
199198
}
200-
199+
201200
PunchDamageResult result;
202201
if(do_hit)
203202
{

Diff for: ‎src/tool.h

+6-9
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
2323
#include "irrlichttypes.h"
2424
#include <string>
2525
#include <iostream>
26-
#include <map>
26+
#include "util/cpp11_container.h"
2727
#include "itemgroup.h"
2828

2929
struct ToolGroupCap
3030
{
31-
std::map<int, float> times;
31+
UNORDERED_MAP<int, float> times;
3232
int maxlevel;
3333
int uses;
3434

@@ -39,8 +39,8 @@ struct ToolGroupCap
3939

4040
bool getTime(int rating, float *time) const
4141
{
42-
std::map<int, float>::const_iterator i = times.find(rating);
43-
if(i == times.end()){
42+
UNORDERED_MAP<int, float>::const_iterator i = times.find(rating);
43+
if (i == times.end()) {
4444
*time = 0;
4545
return false;
4646
}
@@ -50,22 +50,19 @@ struct ToolGroupCap
5050
};
5151

5252

53-
// CLANG SUCKS DONKEY BALLS
54-
typedef std::map<std::string, struct ToolGroupCap> ToolGCMap;
55-
typedef std::map<std::string, s16> DamageGroup;
53+
typedef UNORDERED_MAP<std::string, struct ToolGroupCap> ToolGCMap;
54+
typedef UNORDERED_MAP<std::string, s16> DamageGroup;
5655

5756
struct ToolCapabilities
5857
{
5958
float full_punch_interval;
6059
int max_drop_level;
61-
// CLANG SUCKS DONKEY BALLS
6260
ToolGCMap groupcaps;
6361
DamageGroup damageGroups;
6462

6563
ToolCapabilities(
6664
float full_punch_interval_=1.4,
6765
int max_drop_level_=1,
68-
// CLANG SUCKS DONKEY BALLS
6966
ToolGCMap groupcaps_=ToolGCMap(),
7067
DamageGroup damageGroups_=DamageGroup()
7168
):

0 commit comments

Comments
 (0)
Please sign in to comment.