diff options
author | Loic Blot <loic.blot@unix-experience.fr> | 2015-02-17 15:28:49 +0100 |
---|---|---|
committer | Loic Blot <loic.blot@unix-experience.fr> | 2015-02-17 15:28:49 +0100 |
commit | fd70f4f2f040b64064676706e41d6da90c2b00db (patch) | |
tree | 14637ffc1d3d7c8889fed247496299c708135341 /src | |
parent | 3c91ad8fc2b7a7888503e85d31bfe286afa6560d (diff) | |
download | minetest-fd70f4f2f040b64064676706e41d6da90c2b00db.tar.gz minetest-fd70f4f2f040b64064676706e41d6da90c2b00db.tar.bz2 minetest-fd70f4f2f040b64064676706e41d6da90c2b00db.zip |
Replace std::list by std::vector into ClientMap::updateDrawList, Map::timerUpdate and ServerMap::save().
This will speedup the loop reading into those functions
Diffstat (limited to 'src')
-rw-r--r-- | src/clientmap.cpp | 6 | ||||
-rw-r--r-- | src/map.cpp | 58 | ||||
-rw-r--r-- | src/mapblock.h | 2 | ||||
-rw-r--r-- | src/mapsector.cpp | 2 | ||||
-rw-r--r-- | src/mapsector.h | 6 |
5 files changed, 32 insertions, 42 deletions
diff --git a/src/clientmap.cpp b/src/clientmap.cpp index 2db901f22..4ceb7bc90 100644 --- a/src/clientmap.cpp +++ b/src/clientmap.cpp @@ -247,7 +247,7 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver) continue; } - std::list< MapBlock * > sectorblocks; + MapBlockVect sectorblocks; sector->getBlocks(sectorblocks); /* @@ -256,8 +256,8 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver) u32 sector_blocks_drawn = 0; - std::list< MapBlock * >::iterator i; - for(i=sectorblocks.begin(); i!=sectorblocks.end(); i++) + for(MapBlockVect::iterator i = sectorblocks.begin(); + i != sectorblocks.end(); i++) { MapBlock *block = *i; diff --git a/src/map.cpp b/src/map.cpp index 191b05ed5..0877d8c8e 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1440,23 +1440,20 @@ void Map::timerUpdate(float dtime, float unload_timeout, bool all_blocks_deleted = true; - std::list<MapBlock*> blocks; + MapBlockVect blocks; sector->getBlocks(blocks); - for(std::list<MapBlock*>::iterator i = blocks.begin(); - i != blocks.end(); ++i) - { + for(MapBlockVect::iterator i = blocks.begin(); + i != blocks.end(); ++i) { MapBlock *block = (*i); block->incrementUsageTimer(dtime); - if(block->refGet() == 0 && block->getUsageTimer() > unload_timeout) - { + if(block->refGet() == 0 && block->getUsageTimer() > unload_timeout) { v3s16 p = block->getPos(); // Save if modified - if (block->getModified() != MOD_STATE_CLEAN && save_before_unloading) - { + if (block->getModified() != MOD_STATE_CLEAN && save_before_unloading) { modprofiler.add(block->getModifiedReason(), 1); if (!saveBlock(block)) continue; @@ -1471,15 +1468,13 @@ void Map::timerUpdate(float dtime, float unload_timeout, deleted_blocks_count++; } - else - { + else { all_blocks_deleted = false; block_count_all++; } } - if(all_blocks_deleted) - { + if(all_blocks_deleted) { sector_deletion_queue.push_back(si->first); } } @@ -2982,8 +2977,7 @@ std::string ServerMap::getBlockFilename(v3s16 p) void ServerMap::save(ModifiedState save_level) { DSTACK(__FUNCTION_NAME); - if(m_map_saving_enabled == false) - { + if(m_map_saving_enabled == false) { infostream<<"WARNING: Not saving map, saving disabled."<<std::endl; return; } @@ -2992,8 +2986,7 @@ void ServerMap::save(ModifiedState save_level) infostream<<"ServerMap: Saving whole map, this can take time." <<std::endl; - if(m_map_metadata_changed || save_level == MOD_STATE_CLEAN) - { + if(m_map_metadata_changed || save_level == MOD_STATE_CLEAN) { saveMapMeta(); } @@ -3008,30 +3001,27 @@ void ServerMap::save(ModifiedState save_level) bool save_started = false; for(std::map<v2s16, MapSector*>::iterator i = m_sectors.begin(); - i != m_sectors.end(); ++i) - { + i != m_sectors.end(); ++i) { ServerMapSector *sector = (ServerMapSector*)i->second; assert(sector->getId() == MAPSECTOR_SERVER); - if(sector->differs_from_disk || save_level == MOD_STATE_CLEAN) - { + if(sector->differs_from_disk || save_level == MOD_STATE_CLEAN) { saveSectorMeta(sector); sector_meta_count++; } - std::list<MapBlock*> blocks; + + MapBlockVect blocks; sector->getBlocks(blocks); - for(std::list<MapBlock*>::iterator j = blocks.begin(); - j != blocks.end(); ++j) - { + for(MapBlockVect::iterator j = blocks.begin(); + j != blocks.end(); ++j) { MapBlock *block = *j; block_count_all++; - if(block->getModified() >= (u32)save_level) - { + if(block->getModified() >= (u32)save_level) { // Lazy beginSave() - if(!save_started){ + if(!save_started) { beginSave(); save_started = true; } @@ -3049,6 +3039,7 @@ void ServerMap::save(ModifiedState save_level) } } } + if(save_started) endSave(); @@ -3056,8 +3047,7 @@ void ServerMap::save(ModifiedState save_level) Only print if something happened or saved whole map */ if(save_level == MOD_STATE_CLEAN || sector_meta_count != 0 - || block_count != 0) - { + || block_count != 0) { infostream<<"ServerMap: Written: " <<sector_meta_count<<" sector metadata files, " <<block_count<<" block files" @@ -3085,14 +3075,12 @@ void ServerMap::listAllLoadedBlocks(std::vector<v3s16> &dst) { MapSector *sector = si->second; - std::list<MapBlock*> blocks; + MapBlockVect blocks; sector->getBlocks(blocks); - for(std::list<MapBlock*>::iterator i = blocks.begin(); - i != blocks.end(); ++i) - { - MapBlock *block = (*i); - v3s16 p = block->getPos(); + for(MapBlockVect::iterator i = blocks.begin(); + i != blocks.end(); ++i) { + v3s16 p = (*i)->getPos(); dst.push_back(p); } } diff --git a/src/mapblock.h b/src/mapblock.h index e7d7798b8..76ba94c34 100644 --- a/src/mapblock.h +++ b/src/mapblock.h @@ -614,6 +614,8 @@ private: int m_refcount; }; +typedef std::vector<MapBlock*> MapBlockVect; + inline bool blockpos_over_limit(v3s16 p) { return diff --git a/src/mapsector.cpp b/src/mapsector.cpp index 0d40a659d..7bc4bd3a3 100644 --- a/src/mapsector.cpp +++ b/src/mapsector.cpp @@ -133,7 +133,7 @@ void MapSector::deleteBlock(MapBlock *block) delete block; } -void MapSector::getBlocks(std::list<MapBlock*> &dest) +void MapSector::getBlocks(MapBlockVect &dest) { for(std::map<s16, MapBlock*>::iterator bi = m_blocks.begin(); bi != m_blocks.end(); ++bi) diff --git a/src/mapsector.h b/src/mapsector.h index dac4ee8d6..e89247a92 100644 --- a/src/mapsector.h +++ b/src/mapsector.h @@ -22,11 +22,11 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "irrlichttypes.h" #include "irr_v2d.h" +#include "mapblock.h" #include <ostream> #include <map> -#include <list> +#include <vector> -class MapBlock; class Map; class IGameDef; @@ -61,7 +61,7 @@ public: void deleteBlock(MapBlock *block); - void getBlocks(std::list<MapBlock*> &dest); + void getBlocks(MapBlockVect &dest); // Always false at the moment, because sector contains no metadata. bool differs_from_disk; |