+
+ static MapgenFactory *getMapgenFactory(const std::string &mgname);
+ static void getMapgenNames(
+ std::vector<const char *> *mgnames, bool include_hidden);
+ static v3s16 getContainingChunk(v3s16 blockpos, s16 chunksize);
+
+private:
+ std::vector<Mapgen *> m_mapgens;
+ std::vector<EmergeThread *> m_threads;
+ bool m_threads_active;
+
+ Mutex m_queue_mutex;
+ std::map<v3s16, BlockEmergeData> m_blocks_enqueued;
+ std::map<u16, u16> m_peer_queue_count;
+
+ u16 m_qlimit_total;
+ u16 m_qlimit_diskonly;
+ u16 m_qlimit_generate;
+
+ // Requires m_queue_mutex held
+ EmergeThread *getOptimalThread();
+
+ bool pushBlockEmergeData(
+ v3s16 pos,
+ u16 peer_requested,
+ u16 flags,
+ EmergeCompletionCallback callback,
+ void *callback_param,
+ bool *entry_already_exists);
+
+ bool popBlockEmergeData(v3s16 pos, BlockEmergeData *bedata);
+
+ friend class EmergeThread;
+
+ DISABLE_CLASS_COPY(EmergeManager);