]> git.lizzy.rs Git - minetest.git/commitdiff
Store `MapEditEvent` blocks in a vector (#13071)
authorJude Melton-Houghton <jwmhjwmh@gmail.com>
Sat, 24 Dec 2022 17:21:59 +0000 (12:21 -0500)
committerGitHub <noreply@github.com>
Sat, 24 Dec 2022 17:21:59 +0000 (12:21 -0500)
src/emerge.cpp
src/map.cpp
src/map.h
src/mapgen/mg_schematic.cpp
src/mapgen/treegen.cpp
src/script/lua_api/l_env.cpp
src/script/lua_api/l_vmanip.cpp
src/server.cpp

index 34c13cbd5200b17973c45efc921099d45eeae3f7..123b44b54425b129f1a88e8f61a4da2f36e2eb17 100644 (file)
@@ -725,9 +725,7 @@ void *EmergeThread::run()
                if (!modified_blocks.empty()) {
                        MapEditEvent event;
                        event.type = MEET_OTHER;
-                       for (const auto &pair : modified_blocks) {
-                               event.modified_blocks.insert(pair.first);
-                       }
+                       event.setModifiedBlocks(modified_blocks);
                        MutexAutoLock envlock(m_server->m_env_mutex);
                        m_map->dispatchEvent(event);
                }
index 21a5620308a368900c4e90bb37cf72a57c18c475..cfe5f126dd2d6530aa87b849a94096ddce6ca56e 100644 (file)
@@ -262,10 +262,7 @@ bool Map::addNodeWithEvent(v3s16 p, MapNode n, bool remove_metadata)
                std::map<v3s16, MapBlock*> modified_blocks;
                addNodeAndUpdate(p, n, modified_blocks, remove_metadata);
 
-               // Copy modified_blocks to event
-               for (auto &modified_block : modified_blocks) {
-                       event.modified_blocks.insert(modified_block.first);
-               }
+               event.setModifiedBlocks(modified_blocks);
        }
        catch(InvalidPositionException &e){
                succeeded = false;
@@ -287,10 +284,7 @@ bool Map::removeNodeWithEvent(v3s16 p)
                std::map<v3s16, MapBlock*> modified_blocks;
                removeNodeAndUpdate(p, modified_blocks);
 
-               // Copy modified_blocks to event
-               for (auto &modified_block : modified_blocks) {
-                       event.modified_blocks.insert(modified_block.first);
-               }
+               event.setModifiedBlocks(modified_blocks);
        }
        catch(InvalidPositionException &e){
                succeeded = false;
@@ -1873,10 +1867,7 @@ MapBlock* ServerMap::loadBlock(v3s16 blockpos)
                        //Modified lighting, send event
                        MapEditEvent event;
                        event.type = MEET_OTHER;
-                       std::map<v3s16, MapBlock *>::iterator it;
-                       for (it = modified_blocks.begin();
-                                       it != modified_blocks.end(); ++it)
-                               event.modified_blocks.insert(it->first);
+                       event.setModifiedBlocks(modified_blocks);
                        dispatchEvent(event);
                }
        }
index e049588713fcaacff9b32745a72d1a0c09b4b682..9a9586fc6a33a334588b6cff7aa1c22de7061591 100644 (file)
--- a/src/map.h
+++ b/src/map.h
@@ -74,7 +74,7 @@ struct MapEditEvent
        MapEditEventType type = MEET_OTHER;
        v3s16 p;
        MapNode n = CONTENT_AIR;
-       std::set<v3s16> modified_blocks;
+       std::vector<v3s16> modified_blocks; // Represents a set
        bool is_private_change = false;
 
        MapEditEvent() = default;
@@ -82,8 +82,17 @@ struct MapEditEvent
        // Sets the event's position and marks the block as modified.
        void setPositionModified(v3s16 pos)
        {
+               assert(modified_blocks.empty()); // only meant for initialization (once)
                p = pos;
-               modified_blocks.insert(getNodeBlockPos(pos));
+               modified_blocks.push_back(getNodeBlockPos(pos));
+       }
+
+       void setModifiedBlocks(const std::map<v3s16, MapBlock *> blocks)
+       {
+               assert(modified_blocks.empty()); // only meant for initialization (once)
+               modified_blocks.reserve(blocks.size());
+               for (const auto &block : blocks)
+                       modified_blocks.push_back(block.first);
        }
 
        VoxelArea getArea() const
index 8fbbb821e1f6a0de03ff9508c5ae9dbb4142171a..1e44ae34e1d64d06183048d8eee6ff9775a54443 100644 (file)
@@ -273,8 +273,7 @@ void Schematic::placeOnMap(ServerMap *map, v3s16 p, u32 flags,
        //// Create & dispatch map modification events to observers
        MapEditEvent event;
        event.type = MEET_OTHER;
-       for (it = modified_blocks.begin(); it != modified_blocks.end(); ++it)
-               event.modified_blocks.insert(it->first);
+       event.setModifiedBlocks(modified_blocks);
 
        map->dispatchEvent(event);
 }
index 6536577526caab7a317c94a0245cd1bf57c0245e..2c12664312b69de1bd293468373030589c040947 100644 (file)
@@ -137,8 +137,7 @@ treegen::error spawn_ltree(ServerMap *map, v3s16 p0,
        // Send a MEET_OTHER event
        MapEditEvent event;
        event.type = MEET_OTHER;
-       for (auto &modified_block : modified_blocks)
-               event.modified_blocks.insert(modified_block.first);
+       event.setModifiedBlocks(modified_blocks);
        map->dispatchEvent(event);
        return SUCCESS;
 }
index 45d444d55d61ceb2bb322b75082cd3deaa9b9a23..4a9c9b75e2fdcfdc6ab8793389f71abdc35ccce3 100644 (file)
@@ -1131,8 +1131,7 @@ int ModApiEnvMod::l_fix_light(lua_State *L)
        if (!modified_blocks.empty()) {
                MapEditEvent event;
                event.type = MEET_OTHER;
-               for (auto &modified_block : modified_blocks)
-                       event.modified_blocks.insert(modified_block.first);
+               event.setModifiedBlocks(modified_blocks);
 
                map.dispatchEvent(event);
        }
@@ -1238,7 +1237,7 @@ int ModApiEnvMod::l_delete_area(lua_State *L)
                v3s16 bp(x, y, z);
                if (map.deleteBlock(bp)) {
                        env->setStaticForActiveObjectsInBlock(bp, false);
-                       event.modified_blocks.insert(bp);
+                       event.modified_blocks.push_back(bp);
                } else {
                        success = false;
                }
index f6d11088eb6949ab8ffa5684ee1919d04db7c37c..90552a239a432ff8990aae0f4e80fef03ead14a4 100644 (file)
@@ -128,8 +128,7 @@ int LuaVoxelManip::l_write_to_map(lua_State *L)
 
        MapEditEvent event;
        event.type = MEET_OTHER;
-       for (const auto &it : modified_blocks)
-               event.modified_blocks.insert(it.first);
+       event.setModifiedBlocks(modified_blocks);
        map->dispatchEvent(event);
 
        return 0;
index a20e82856e889c44a408f5b3efd3f8b7a52cdf67..5c3496569374145112a5ff32572f49e5890aa7a3 100644 (file)
@@ -699,9 +699,7 @@ void Server::AsyncRunStep(bool initial_step)
                if (!modified_blocks.empty()) {
                        MapEditEvent event;
                        event.type = MEET_OTHER;
-                       for (const auto &pair : modified_blocks) {
-                               event.modified_blocks.insert(pair.first);
-                       }
+                       event.setModifiedBlocks(modified_blocks);
                        m_env->getMap().dispatchEvent(event);
                }
        }