From 155288ee981c70f505526347cb2bcda4df1c8e6b Mon Sep 17 00:00:00 2001
From: Loic Blot <loic.blot@unix-experience.fr>
Date: Thu, 6 Oct 2016 19:20:12 +0200
Subject: [PATCH] use unordered containers where possible (patch 4 on X)

Also remove some unused parameters/functions
---
 src/content_sao.cpp                 | 28 ++++++++++++++--------
 src/content_sao.h                   |  5 ++--
 src/guiFormSpecMenu.h               |  4 +---
 src/map.h                           |  1 +
 src/mapblock_mesh.cpp               | 24 ++++++++-----------
 src/mapblock_mesh.h                 | 15 ++++++------
 src/network/serverpackethandler.cpp |  4 +---
 src/script/cpp_api/s_async.cpp      |  3 ++-
 src/script/cpp_api/s_async.h        |  2 +-
 src/server.cpp                      | 21 +++++++---------
 src/server.h                        | 16 +++++--------
 src/util/numeric.cpp                |  2 +-
 src/util/numeric.h                  | 37 ++---------------------------
 13 files changed, 63 insertions(+), 99 deletions(-)

diff --git a/src/content_sao.cpp b/src/content_sao.cpp
index 1e7e788e9..895c26044 100644
--- a/src/content_sao.cpp
+++ b/src/content_sao.cpp
@@ -347,8 +347,10 @@ void LuaEntitySAO::step(float dtime, bool send_recommended)
 
 	if(m_bone_position_sent == false){
 		m_bone_position_sent = true;
-		for(std::map<std::string, core::vector2d<v3f> >::const_iterator ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii){
-			std::string str = gob_cmd_update_bone_position((*ii).first, (*ii).second.X, (*ii).second.Y);
+		for (UNORDERED_MAP<std::string, core::vector2d<v3f> >::const_iterator
+				ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii){
+			std::string str = gob_cmd_update_bone_position((*ii).first,
+					(*ii).second.X, (*ii).second.Y);
 			// create message and add to list
 			ActiveObjectMessage aom(getId(), true, str);
 			m_messages_out.push(aom);
@@ -383,8 +385,10 @@ std::string LuaEntitySAO::getClientInitializationData(u16 protocol_version)
 		os<<serializeLongString(gob_cmd_update_armor_groups(m_armor_groups)); // 2
 		os<<serializeLongString(gob_cmd_update_animation(
 			m_animation_range, m_animation_speed, m_animation_blend, m_animation_loop)); // 3
-		for(std::map<std::string, core::vector2d<v3f> >::const_iterator ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii){
-			os<<serializeLongString(gob_cmd_update_bone_position((*ii).first, (*ii).second.X, (*ii).second.Y)); // m_bone_position.size
+		for (UNORDERED_MAP<std::string, core::vector2d<v3f> >::const_iterator
+				ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii) {
+			os << serializeLongString(gob_cmd_update_bone_position((*ii).first,
+					(*ii).second.X, (*ii).second.Y)); // m_bone_position.size
 		}
 		os<<serializeLongString(gob_cmd_update_attachment(m_attachment_parent_id, m_attachment_bone, m_attachment_position, m_attachment_rotation)); // 4
 	}
@@ -862,7 +866,8 @@ std::string PlayerSAO::getClientInitializationData(u16 protocol_version)
 		os<<serializeLongString(gob_cmd_update_armor_groups(m_armor_groups)); // 2
 		os<<serializeLongString(gob_cmd_update_animation(
 			m_animation_range, m_animation_speed, m_animation_blend, m_animation_loop)); // 3
-		for(std::map<std::string, core::vector2d<v3f> >::const_iterator ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii){
+		for (UNORDERED_MAP<std::string, core::vector2d<v3f> >::const_iterator
+				ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii) {
 			os<<serializeLongString(gob_cmd_update_bone_position((*ii).first, (*ii).second.X, (*ii).second.Y)); // m_bone_position.size
 		}
 		os<<serializeLongString(gob_cmd_update_attachment(m_attachment_parent_id, m_attachment_bone, m_attachment_position, m_attachment_rotation)); // 4
@@ -1007,19 +1012,22 @@ void PlayerSAO::step(float dtime, bool send_recommended)
 		m_messages_out.push(aom);
 	}
 
-	if(m_bone_position_sent == false){
+	if (!m_bone_position_sent) {
 		m_bone_position_sent = true;
-		for(std::map<std::string, core::vector2d<v3f> >::const_iterator ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii){
-			std::string str = gob_cmd_update_bone_position((*ii).first, (*ii).second.X, (*ii).second.Y);
+		for (UNORDERED_MAP<std::string, core::vector2d<v3f> >::const_iterator
+				ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii) {
+			std::string str = gob_cmd_update_bone_position((*ii).first,
+					(*ii).second.X, (*ii).second.Y);
 			// create message and add to list
 			ActiveObjectMessage aom(getId(), true, str);
 			m_messages_out.push(aom);
 		}
 	}
 
-	if(m_attachment_sent == false){
+	if (!m_attachment_sent){
 		m_attachment_sent = true;
-		std::string str = gob_cmd_update_attachment(m_attachment_parent_id, m_attachment_bone, m_attachment_position, m_attachment_rotation);
+		std::string str = gob_cmd_update_attachment(m_attachment_parent_id,
+				m_attachment_bone, m_attachment_position, m_attachment_rotation);
 		// create message and add to list
 		ActiveObjectMessage aom(getId(), true, str);
 		m_messages_out.push(aom);
diff --git a/src/content_sao.h b/src/content_sao.h
index 44d40d332..ccae90b77 100644
--- a/src/content_sao.h
+++ b/src/content_sao.h
@@ -112,7 +112,7 @@ class LuaEntitySAO : public ServerActiveObject
 	bool m_animation_loop;
 	bool m_animation_sent;
 
-	std::map<std::string, core::vector2d<v3f> > m_bone_position;
+	UNORDERED_MAP<std::string, core::vector2d<v3f> > m_bone_position;
 	bool m_bone_position_sent;
 
 	int m_attachment_parent_id;
@@ -321,7 +321,8 @@ class PlayerSAO : public ServerActiveObject
 	bool m_animation_loop;
 	bool m_animation_sent;
 
-	std::map<std::string, core::vector2d<v3f> > m_bone_position; // Stores position and rotation for each bone name
+	// Stores position and rotation for each bone name
+	UNORDERED_MAP<std::string, core::vector2d<v3f> > m_bone_position;
 	bool m_bone_position_sent;
 
 	int m_attachment_parent_id;
diff --git a/src/guiFormSpecMenu.h b/src/guiFormSpecMenu.h
index 21054b725..153720975 100644
--- a/src/guiFormSpecMenu.h
+++ b/src/guiFormSpecMenu.h
@@ -409,8 +409,6 @@ class GUIFormSpecMenu : public GUIModalMenu
 	std::vector<std::pair<FieldSpec, std::vector<std::string> > > m_dropdowns;
 
 	ItemSpec *m_selected_item;
-	f32 m_timer1;
-	f32 m_timer2;
 	u32 m_selected_amount;
 	bool m_selected_dragging;
 
@@ -462,7 +460,7 @@ class GUIFormSpecMenu : public GUIModalMenu
 		GUITable::TableOptions table_options;
 		GUITable::TableColumns table_columns;
 		// used to restore table selection/scroll/treeview state
-		std::map<std::string, GUITable::DynamicData> table_dyndata;
+		UNORDERED_MAP<std::string, GUITable::DynamicData> table_dyndata;
 	} parserData;
 
 	typedef struct {
diff --git a/src/map.h b/src/map.h
index 13775fde1..c73fa92bf 100644
--- a/src/map.h
+++ b/src/map.h
@@ -32,6 +32,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "voxel.h"
 #include "modifiedstate.h"
 #include "util/container.h"
+#include "util/cpp11_container.h"
 #include "nodetimer.h"
 #include "map_settings_manager.h"
 
diff --git a/src/mapblock_mesh.cpp b/src/mapblock_mesh.cpp
index a11fb5887..00f83e7ab 100644
--- a/src/mapblock_mesh.cpp
+++ b/src/mapblock_mesh.cpp
@@ -1033,7 +1033,7 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
 	m_enable_shaders = data->m_use_shaders;
 	m_use_tangent_vertices = data->m_use_tangent_vertices;
 	m_enable_vbo = g_settings->getBool("enable_vbo");
-	
+
 	if (g_settings->getBool("enable_minimap")) {
 		m_minimap_mapblock = new MinimapMapblock;
 		m_minimap_mapblock->getMinimapNodes(
@@ -1298,10 +1298,8 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat
 	// Cracks
 	if(crack != m_last_crack)
 	{
-		for(std::map<u32, std::string>::iterator
-				i = m_crack_materials.begin();
-				i != m_crack_materials.end(); ++i)
-		{
+		for (UNORDERED_MAP<u32, std::string>::iterator i = m_crack_materials.begin();
+				i != m_crack_materials.end(); ++i) {
 			scene::IMeshBuffer *buf = m_mesh->getMeshBuffer(i->first);
 			std::string basename = i->second;
 
@@ -1315,9 +1313,9 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat
 
 			// If the current material is also animated,
 			// update animation info
-			std::map<u32, TileSpec>::iterator anim_iter =
-				m_animation_tiles.find(i->first);
-			if(anim_iter != m_animation_tiles.end()){
+			UNORDERED_MAP<u32, TileSpec>::iterator anim_iter =
+					m_animation_tiles.find(i->first);
+			if (anim_iter != m_animation_tiles.end()){
 				TileSpec &tile = anim_iter->second;
 				tile.texture = new_texture;
 				tile.texture_id = new_texture_id;
@@ -1330,10 +1328,8 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat
 	}
 
 	// Texture animation
-	for(std::map<u32, TileSpec>::iterator
-			i = m_animation_tiles.begin();
-			i != m_animation_tiles.end(); ++i)
-	{
+	for (UNORDERED_MAP<u32, TileSpec>::iterator i = m_animation_tiles.begin();
+			i != m_animation_tiles.end(); ++i) {
 		const TileSpec &tile = i->second;
 		// Figure out current frame
 		int frameoffset = m_animation_frame_offsets[i->first];
@@ -1443,7 +1439,7 @@ void MeshCollector::append(const TileSpec &tile,
 				vertices[i].Color, vertices[i].TCoords);
 			p->vertices.push_back(vert);
 		}
-	} 
+	}
 
 	for (u32 i = 0; i < numIndices; i++) {
 		u32 j = indices[i] + vertex_count;
@@ -1499,7 +1495,7 @@ void MeshCollector::append(const TileSpec &tile,
 				vertices[i].Normal, c, vertices[i].TCoords);
 			p->vertices.push_back(vert);
 		}
-	} 
+	}
 
 	for (u32 i = 0; i < numIndices; i++) {
 		u32 j = indices[i] + vertex_count;
diff --git a/src/mapblock_mesh.h b/src/mapblock_mesh.h
index f89fbe669..8376468da 100644
--- a/src/mapblock_mesh.h
+++ b/src/mapblock_mesh.h
@@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "irrlichttypes_extrabloated.h"
 #include "client/tile.h"
 #include "voxel.h"
+#include "util/cpp11_container.h"
 #include <map>
 
 class IGameDef;
@@ -121,7 +122,7 @@ class MapBlockMesh
 		if(m_animation_force_timer > 0)
 			m_animation_force_timer--;
 	}
-	
+
 	void updateCameraOffset(v3s16 camera_offset);
 
 private:
@@ -144,20 +145,20 @@ class MapBlockMesh
 	// Last crack value passed to animate()
 	int m_last_crack;
 	// Maps mesh buffer (i.e. material) indices to base texture names
-	std::map<u32, std::string> m_crack_materials;
+	UNORDERED_MAP<u32, std::string> m_crack_materials;
 
 	// Animation info: texture animationi
 	// Maps meshbuffers to TileSpecs
-	std::map<u32, TileSpec> m_animation_tiles;
-	std::map<u32, int> m_animation_frames; // last animation frame
-	std::map<u32, int> m_animation_frame_offsets;
-	
+	UNORDERED_MAP<u32, TileSpec> m_animation_tiles;
+	UNORDERED_MAP<u32, int> m_animation_frames; // last animation frame
+	UNORDERED_MAP<u32, int> m_animation_frame_offsets;
+
 	// Animation info: day/night transitions
 	// Last daynight_ratio value passed to animate()
 	u32 m_last_daynight_ratio;
 	// For each meshbuffer, maps vertex indices to (day,night) pairs
 	std::map<u32, std::map<u32, std::pair<u8, u8> > > m_daynight_diffs;
-	
+
 	// Camera offset info -> do we have to translate the mesh?
 	v3s16 m_camera_offset;
 };
diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp
index a8bfd9068..f9061cc4f 100644
--- a/src/network/serverpackethandler.cpp
+++ b/src/network/serverpackethandler.cpp
@@ -1693,9 +1693,7 @@ void Server::handleCommand_RemovedSounds(NetworkPacket* pkt)
 
 		*pkt >> id;
 
-		std::map<s32, ServerPlayingSound>::iterator i =
-			m_playing_sounds.find(id);
-
+		UNORDERED_MAP<s32, ServerPlayingSound>::iterator i = m_playing_sounds.find(id);
 		if (i == m_playing_sounds.end())
 			continue;
 
diff --git a/src/script/cpp_api/s_async.cpp b/src/script/cpp_api/s_async.cpp
index 9bf3fcf49..1fb84fab6 100644
--- a/src/script/cpp_api/s_async.cpp
+++ b/src/script/cpp_api/s_async.cpp
@@ -81,6 +81,7 @@ bool AsyncEngine::registerFunction(const char* name, lua_CFunction func)
 	if (initDone) {
 		return false;
 	}
+
 	functionList[name] = func;
 	return true;
 }
@@ -203,7 +204,7 @@ void AsyncEngine::pushFinishedJobs(lua_State* L) {
 /******************************************************************************/
 void AsyncEngine::prepareEnvironment(lua_State* L, int top)
 {
-	for (std::map<std::string, lua_CFunction>::iterator it = functionList.begin();
+	for (UNORDERED_MAP<std::string, lua_CFunction>::iterator it = functionList.begin();
 			it != functionList.end(); it++) {
 		lua_pushstring(L, it->first.c_str());
 		lua_pushcfunction(L, it->second);
diff --git a/src/script/cpp_api/s_async.h b/src/script/cpp_api/s_async.h
index 8d612d58c..016381e5f 100644
--- a/src/script/cpp_api/s_async.h
+++ b/src/script/cpp_api/s_async.h
@@ -132,7 +132,7 @@ class AsyncEngine {
 	bool initDone;
 
 	// Internal store for registred functions
-	std::map<std::string, lua_CFunction> functionList;
+	UNORDERED_MAP<std::string, lua_CFunction> functionList;
 
 	// Internal counter to create job IDs
 	unsigned int jobIdCounter;
diff --git a/src/server.cpp b/src/server.cpp
index 639e6462a..2dd070b1a 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -868,7 +868,7 @@ void Server::AsyncRunStep(bool initial_step)
 		m_clients.unlock();
 
 		// Clear buffered_messages
-		for(UNORDERED_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;
@@ -2016,16 +2016,15 @@ s32 Server::playSound(const SimpleSoundSpec &spec,
 void Server::stopSound(s32 handle)
 {
 	// Get sound reference
-	std::map<s32, ServerPlayingSound>::iterator i =
-			m_playing_sounds.find(handle);
-	if(i == m_playing_sounds.end())
+	UNORDERED_MAP<s32, ServerPlayingSound>::iterator i = m_playing_sounds.find(handle);
+	if (i == m_playing_sounds.end())
 		return;
 	ServerPlayingSound &psound = i->second;
 
 	NetworkPacket pkt(TOCLIENT_STOP_SOUND, 4);
 	pkt << handle;
 
-	for(std::set<u16>::iterator i = psound.clients.begin();
+	for (UNORDERED_SET<u16>::iterator i = psound.clients.begin();
 			i != psound.clients.end(); ++i) {
 		// Send as reliable
 		m_clients.send(*i, 0, &pkt, true);
@@ -2322,7 +2321,7 @@ void Server::sendMediaAnnouncement(u16 peer_id)
 	NetworkPacket pkt(TOCLIENT_ANNOUNCE_MEDIA, 0, peer_id);
 	pkt << (u16) m_media.size();
 
-	for (std::map<std::string, MediaInfo>::iterator i = m_media.begin();
+	for (UNORDERED_MAP<std::string, MediaInfo>::iterator i = m_media.begin();
 			i != m_media.end(); ++i) {
 		pkt << i->first << i->second.sha1_digest;
 	}
@@ -2367,7 +2366,7 @@ void Server::sendRequestedMedia(u16 peer_id,
 			i != tosend.end(); ++i) {
 		const std::string &name = *i;
 
-		if(m_media.find(name) == m_media.end()) {
+		if (m_media.find(name) == m_media.end()) {
 			errorstream<<"Server::sendRequestedMedia(): Client asked for "
 					<<"unknown file \""<<(name)<<"\""<<std::endl;
 			continue;
@@ -2628,13 +2627,11 @@ void Server::DeleteClient(u16 peer_id, ClientDeletionReason reason)
 		/*
 			Clear references to playing sounds
 		*/
-		for(std::map<s32, ServerPlayingSound>::iterator
-				i = m_playing_sounds.begin();
-				i != m_playing_sounds.end();)
-		{
+		for (UNORDERED_MAP<s32, ServerPlayingSound>::iterator
+				 i = m_playing_sounds.begin(); i != m_playing_sounds.end();) {
 			ServerPlayingSound &psound = i->second;
 			psound.clients.erase(peer_id);
-			if(psound.clients.empty())
+			if (psound.clients.empty())
 				m_playing_sounds.erase(i++);
 			else
 				++i;
diff --git a/src/server.h b/src/server.h
index 3ad894b38..34427a71a 100644
--- a/src/server.h
+++ b/src/server.h
@@ -157,7 +157,7 @@ struct ServerSoundParams
 struct ServerPlayingSound
 {
 	ServerSoundParams params;
-	std::set<u16> clients; // peer ids
+	UNORDERED_SET<u16> clients; // peer ids
 };
 
 class Server : public con::PeerHandler, public MapEventReceiver,
@@ -243,11 +243,9 @@ class Server : public con::PeerHandler, public MapEventReceiver,
 	std::wstring getStatusString();
 
 	// read shutdown state
-	inline bool getShutdownRequested()
-			{ return m_shutdown_requested; }
+	inline bool getShutdownRequested() const { return m_shutdown_requested; }
 
 	// request server to shutdown
-	inline void requestShutdown() { m_shutdown_requested = true; }
 	void requestShutdown(const std::string &msg, bool reconnect)
 	{
 		m_shutdown_requested = true;
@@ -323,8 +321,7 @@ class Server : public con::PeerHandler, public MapEventReceiver,
 	const ModSpec* getModSpec(const std::string &modname) const;
 	void getModNames(std::vector<std::string> &modlist);
 	std::string getBuiltinLuaPath();
-	inline std::string getWorldPath() const
-			{ return m_path_world; }
+	inline std::string getWorldPath() const { return m_path_world; }
 
 	inline bool isSingleplayer()
 			{ return m_simple_singleplayer_mode; }
@@ -356,8 +353,7 @@ class Server : public con::PeerHandler, public MapEventReceiver,
 	bool setSky(Player *player, const video::SColor &bgcolor,
 			const std::string &type, const std::vector<std::string> &params);
 
-	bool overrideDayNightRatio(Player *player, bool do_override,
-			float brightness);
+	bool overrideDayNightRatio(Player *player, bool do_override, float brightness);
 
 	/* con::PeerHandler implementation. */
 	void peerAdded(con::Peer *peer);
@@ -654,12 +650,12 @@ class Server : public con::PeerHandler, public MapEventReceiver,
 	u16 m_ignore_map_edit_events_peer_id;
 
 	// media files known to server
-	std::map<std::string,MediaInfo> m_media;
+	UNORDERED_MAP<std::string, MediaInfo> m_media;
 
 	/*
 		Sounds
 	*/
-	std::map<s32, ServerPlayingSound> m_playing_sounds;
+	UNORDERED_MAP<s32, ServerPlayingSound> m_playing_sounds;
 	s32 m_next_sound_id;
 
 	/*
diff --git a/src/util/numeric.cpp b/src/util/numeric.cpp
index 42ebd9022..6a7bfcac9 100644
--- a/src/util/numeric.cpp
+++ b/src/util/numeric.cpp
@@ -27,7 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include <string.h>
 #include <iostream>
 
-std::map<u16, std::vector<v3s16> > FacePositionCache::m_cache;
+UNORDERED_MAP<u16, std::vector<v3s16> > FacePositionCache::m_cache;
 Mutex FacePositionCache::m_cache_mutex;
 // Calculate the borders of a "d-radius" cube
 // TODO: Make it work without mutex and data races, probably thread-local
diff --git a/src/util/numeric.h b/src/util/numeric.h
index 615327864..4cdc254c3 100644
--- a/src/util/numeric.h
+++ b/src/util/numeric.h
@@ -26,8 +26,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "../irr_v3d.h"
 #include "../irr_aabb3d.h"
 #include "../threading/mutex.h"
+#include "cpp11_container.h"
 #include <list>
-#include <map>
 #include <vector>
 
 
@@ -41,26 +41,10 @@ class FacePositionCache
 	static std::vector<v3s16> getFacePositions(u16 d);
 private:
 	static void generateFacePosition(u16 d);
-	static std::map<u16, std::vector<v3s16> > m_cache;
+	static UNORDERED_MAP<u16, std::vector<v3s16> > m_cache;
 	static Mutex m_cache_mutex;
 };
 
-class IndentationRaiser
-{
-public:
-	IndentationRaiser(u16 *indentation)
-	{
-		m_indentation = indentation;
-		(*m_indentation)++;
-	}
-	~IndentationRaiser()
-	{
-		(*m_indentation)--;
-	}
-private:
-	u16 *m_indentation;
-};
-
 inline s16 getContainerPos(s16 p, s16 d)
 {
 	return (p>=0 ? p : p-d+1) / d;
@@ -149,23 +133,6 @@ inline bool isInArea(v3s16 p, v3s16 d)
 #define rangelim(d, min, max) ((d) < (min) ? (min) : ((d)>(max)?(max):(d)))
 #define myfloor(x) ((x) > 0.0 ? (int)(x) : (int)(x) - 1)
 
-inline v3s16 arealim(v3s16 p, s16 d)
-{
-	if(p.X < 0)
-		p.X = 0;
-	if(p.Y < 0)
-		p.Y = 0;
-	if(p.Z < 0)
-		p.Z = 0;
-	if(p.X > d-1)
-		p.X = d-1;
-	if(p.Y > d-1)
-		p.Y = d-1;
-	if(p.Z > d-1)
-		p.Z = d-1;
-	return p;
-}
-
 // The naive swap performs better than the xor version
 #define SWAP(t, x, y) do { \
 	t temp = x;            \
-- 
GitLab