]> git.lizzy.rs Git - minetest.git/commitdiff
Switch MeshUpdateQueue to better data structure
authorsfan5 <sfan5@live.de>
Sun, 31 Jul 2022 21:16:40 +0000 (23:16 +0200)
committersfan5 <sfan5@live.de>
Tue, 2 Aug 2022 09:58:26 +0000 (11:58 +0200)
src/client/mesh_generator_thread.cpp
src/client/mesh_generator_thread.h

index 9f4d98aac5865fc49862b40fae57ac0850301936..c1bd7388edbed7390fa5548656032b06fe530007 100644 (file)
@@ -158,8 +158,7 @@ CachedMapBlockData* MeshUpdateQueue::cacheBlock(Map *map, v3s16 p, UpdateMode mo
                        size_t *cache_hit_counter)
 {
        CachedMapBlockData *cached_block = nullptr;
-       std::map<v3s16, CachedMapBlockData*>::iterator it =
-                       m_cache.find(p);
+       auto it = m_cache.find(p);
 
        if (it != m_cache.end()) {
                cached_block = it->second;
@@ -193,7 +192,7 @@ CachedMapBlockData* MeshUpdateQueue::cacheBlock(Map *map, v3s16 p, UpdateMode mo
 
 CachedMapBlockData* MeshUpdateQueue::getCachedBlock(const v3s16 &p)
 {
-       std::map<v3s16, CachedMapBlockData*>::iterator it = m_cache.find(p);
+       auto it = m_cache.find(p);
        if (it != m_cache.end()) {
                return it->second;
        }
@@ -250,12 +249,11 @@ void MeshUpdateQueue::cleanupCache()
 
        int t_now = time(0);
 
-       for (std::map<v3s16, CachedMapBlockData*>::iterator it = m_cache.begin();
-                       it != m_cache.end(); ) {
+       for (auto it = m_cache.begin(); it != m_cache.end(); ) {
                CachedMapBlockData *cached_block = it->second;
                if (cached_block->refcount_from_queue == 0 &&
                                cached_block->last_used_timestamp < t_now - cache_seconds) {
-                       m_cache.erase(it++);
+                       it = m_cache.erase(it);
                        delete cached_block;
                } else {
                        ++it;
index e48c8334d62f2833a28dde252349666b8104e73e..552b2a9f05206a303af93201a930340601e2db82 100644 (file)
@@ -21,6 +21,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 #include <ctime>
 #include <mutex>
+#include <unordered_map>
+#include <unordered_set>
 #include "mapblock_mesh.h"
 #include "threading/mutex_auto_lock.h"
 #include "util/thread.h"
@@ -81,8 +83,8 @@ class MeshUpdateQueue
 private:
        Client *m_client;
        std::vector<QueuedMeshUpdate *> m_queue;
-       std::set<v3s16> m_urgents;
-       std::map<v3s16, CachedMapBlockData *> m_cache;
+       std::unordered_set<v3s16> m_urgents;
+       std::unordered_map<v3s16, CachedMapBlockData *> m_cache;
        u64 m_next_cache_cleanup; // milliseconds
        std::mutex m_mutex;