Performance improvement: Use std::list instead of std::vector for request_media,...
authorLoic Blot <loic.blot@unix-experience.fr>
Thu, 5 Mar 2015 09:43:08 +0000 (10:43 +0100)
committerLoic Blot <loic.blot@unix-experience.fr>
Thu, 5 Mar 2015 09:44:48 +0000 (10:44 +0100)
* Also remove unused Server::m_modspaths

src/client.cpp
src/client.h
src/clientmedia.cpp
src/environment.cpp
src/environment.h
src/script/lua_api/l_server.cpp
src/server.cpp
src/server.h

index d476f920d5b29d3546bab95c684dd8b2eefb25db..a1ae1e6abd6c9402de20c642d84c992a045e4ffd 100644 (file)
@@ -778,7 +778,7 @@ void Client::deletingPeer(con::Peer *peer, bool timeout)
                string name
        }
 */
-void Client::request_media(const std::list<std::string> &file_requests)
+void Client::request_media(const std::vector<std::string> &file_requests)
 {
        std::ostringstream os(std::ios_base::binary);
        writeU16(os, TOSERVER_REQUEST_MEDIA);
@@ -790,7 +790,7 @@ void Client::request_media(const std::list<std::string> &file_requests)
 
        *pkt << (u16) (file_requests_size & 0xFFFF);
 
-       for(std::list<std::string>::const_iterator i = file_requests.begin();
+       for(std::vector<std::string>::const_iterator i = file_requests.begin();
                        i != file_requests.end(); ++i) {
                *pkt << (*i);
        }
index afa519d16cf59434cffbdbe440a172ec3e4e5f86..c0146911de8ea7556967c1b5ba3990a1ae599db3 100644 (file)
@@ -516,7 +516,7 @@ public:
        // Insert a media file appropriately into the appropriate manager
        bool loadMedia(const std::string &data, const std::string &filename);
        // Send a request for conventional media transfer
-       void request_media(const std::list<std::string> &file_requests);
+       void request_media(const std::vector<std::string> &file_requests);
        // Send a notification that no conventional media transfer is needed
        void received_media();
 
index 7eb505314b0b5116a232cef88a86b88893ed2794..1d825c14316b7069852969b82b39435747842b01 100644 (file)
@@ -488,7 +488,7 @@ void ClientMediaDownloader::startConventionalTransfers(Client *client)
        if (m_uncached_received_count != m_uncached_count) {
                // Some media files have not been received yet, use the
                // conventional slow method (minetest protocol) to get them
-               std::list<std::string> file_requests;
+               std::vector<std::string> file_requests;
                for (std::map<std::string, FileStatus*>::iterator
                                it = m_files.begin();
                                it != m_files.end(); ++it) {
index 6cabc0dbc2dcea733bbeab361709c9340fcae4af..b1372431f958da32769a68a0de7e1e109199c6d3 100644 (file)
@@ -2025,9 +2025,8 @@ ClientEnvironment::~ClientEnvironment()
                delete i->second;
        }
 
-       for(std::list<ClientSimpleObject*>::iterator
-                       i = m_simple_objects.begin(); i != m_simple_objects.end(); ++i)
-       {
+       for(std::vector<ClientSimpleObject*>::iterator
+                       i = m_simple_objects.begin(); i != m_simple_objects.end(); ++i) {
                delete *i;
        }
 
@@ -2382,11 +2381,10 @@ void ClientEnvironment::step(float dtime)
                Step and handle simple objects
        */
        g_profiler->avg("CEnv: num of simple objects", m_simple_objects.size());
-       for(std::list<ClientSimpleObject*>::iterator
-                       i = m_simple_objects.begin(); i != m_simple_objects.end();)
-       {
+       for(std::vector<ClientSimpleObject*>::iterator
+                       i = m_simple_objects.begin(); i != m_simple_objects.end();) {
                ClientSimpleObject *simple = *i;
-               std::list<ClientSimpleObject*>::iterator cur = i;
+               std::vector<ClientSimpleObject*>::iterator cur = i;
                ++i;
                simple->step(dtime);
                if(simple->m_to_be_removed){
index 386289307afbf40b9708c5f782f4ed2124f49984..c9c3744139648d82f07bd85ae1a27d5cc7ce5635 100644 (file)
@@ -521,7 +521,7 @@ private:
        IGameDef *m_gamedef;
        IrrlichtDevice *m_irr;
        std::map<u16, ClientActiveObject*> m_active_objects;
-       std::list<ClientSimpleObject*> m_simple_objects;
+       std::vector<ClientSimpleObject*> m_simple_objects;
        std::list<ClientEnvEvent> m_client_event_queue;
        IntervalLimiter m_active_object_light_update_interval;
        IntervalLimiter m_lava_hurt_interval;
index 8d7f6512e1cbc695ca20e1a51ac04987b7b38c88..16331a933be2a999a15a1d89f26657b4b8b51d8e 100644 (file)
@@ -367,13 +367,14 @@ int ModApiServer::l_get_modnames(lua_State *L)
        NO_MAP_LOCK_REQUIRED;
 
        // Get a list of mods
-       std::list<std::string> mods_unsorted, mods_sorted;
+       std::vector<std::string> mods_unsorted;
+       std::list<std::string> mods_sorted;
        getServer(L)->getModNames(mods_unsorted);
 
        // Take unsorted items from mods_unsorted and sort them into
        // mods_sorted; not great performance but the number of mods on a
        // server will likely be small.
-       for(std::list<std::string>::iterator i = mods_unsorted.begin();
+       for(std::vector<std::string>::iterator i = mods_unsorted.begin();
                        i != mods_unsorted.end(); ++i) {
                bool added = false;
                for(std::list<std::string>::iterator x = mods_sorted.begin();
index 444fbc751223e665fde009eaf174fe2c757cdc7b..92dbc0370a502233d15e37dbaefab31e99b9d3f7 100644 (file)
@@ -3188,10 +3188,9 @@ const ModSpec* Server::getModSpec(const std::string &modname)
        }
        return NULL;
 }
-void Server::getModNames(std::list<std::string> &modlist)
+void Server::getModNames(std::vector<std::string> &modlist)
 {
-       for(std::vector<ModSpec>::iterator i = m_mods.begin(); i != m_mods.end(); i++)
-       {
+       for(std::vector<ModSpec>::iterator i = m_mods.begin(); i != m_mods.end(); i++) {
                modlist.push_back(i->name);
        }
 }
index ee9199da7e3a8064db3b8e5ddb6791e3e39ce279..50a8861fa608b87521334aa85465b73a4da60856 100644 (file)
@@ -327,7 +327,7 @@ public:
        IWritableCraftDefManager* getWritableCraftDefManager();
 
        const ModSpec* getModSpec(const std::string &modname);
-       void getModNames(std::list<std::string> &modlist);
+       void getModNames(std::vector<std::string> &modlist);
        std::string getBuiltinLuaPath();
        inline std::string getWorldPath()
                        { return m_path_world; }
@@ -588,9 +588,6 @@ private:
                Random stuff
        */
 
-       // Mod parent directory paths
-       std::list<std::string> m_modspaths;
-
        bool m_shutdown_requested;
 
        /*