Mapblock: nodecount refactor
authorest31 <MTest31@outlook.com>
Sun, 31 May 2015 04:23:10 +0000 (06:23 +0200)
committerest31 <MTest31@outlook.com>
Sun, 31 May 2015 04:24:41 +0000 (06:24 +0200)
Spare direct multoplication, use constant MapBlock::nodecount instead of
local nodecount variables.

Also use strides at one place instead of multiplications.

src/mapblock.cpp
src/mapblock.h

index 7ad67c589640a2ff8586618f6e9df8c7b0235069..9eb64a76ef10e75429a2c9fd5a71edb55dbc8134 100644 (file)
@@ -132,7 +132,7 @@ MapNode MapBlock::getNodeParent(v3s16 p, bool *is_valid_position)
        }
        if (is_valid_position)
                *is_valid_position = true;
-       return data[p.Z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + p.Y*MAP_BLOCKSIZE + p.X];
+       return data[p.Z * zstride + p.Y * ystride + p.X];
 }
 
 std::string MapBlock::getModifiedReasonString()
@@ -388,7 +388,7 @@ void MapBlock::actuallyUpdateDayNightDiff()
        /*
                Check if any lighting value differs
        */
-       for (u32 i = 0; i < MAP_BLOCKSIZE*MAP_BLOCKSIZE*MAP_BLOCKSIZE; i++) {
+       for (u32 i = 0; i < nodecount; i++) {
                MapNode &n = data[i];
 
                differs = !n.isLightDayNightEq(nodemgr);
@@ -402,7 +402,7 @@ void MapBlock::actuallyUpdateDayNightDiff()
        */
        if (differs) {
                bool only_air = true;
-               for (u32 i = 0; i < MAP_BLOCKSIZE*MAP_BLOCKSIZE*MAP_BLOCKSIZE; i++) {
+               for (u32 i = 0; i < nodecount; i++) {
                        MapNode &n = data[i];
                        if (n.getContent() != CONTENT_AIR) {
                                only_air = false;
@@ -473,8 +473,7 @@ static void getBlockNodeIdMapping(NameIdMapping *nimap, MapNode *nodes,
 
        std::set<content_t> unknown_contents;
        content_t id_counter = 0;
-       for(u32 i=0; i<MAP_BLOCKSIZE*MAP_BLOCKSIZE*MAP_BLOCKSIZE; i++)
-       {
+       for (u32 i = 0; i < MapBlock::nodecount; i++) {
                content_t global_id = nodes[i].getContent();
                content_t id = CONTENT_IGNORE;
 
@@ -519,8 +518,7 @@ static void correctBlockNodeIds(const NameIdMapping *nimap, MapNode *nodes,
        // correct ids.
        std::set<content_t> unnamed_contents;
        std::set<std::string> unallocatable_contents;
-       for(u32 i=0; i<MAP_BLOCKSIZE*MAP_BLOCKSIZE*MAP_BLOCKSIZE; i++)
-       {
+       for (u32 i = 0; i < MapBlock::nodecount; i++) {
                content_t local_id = nodes[i].getContent();
                std::string name;
                bool found = nimap->getName(local_id, name);
@@ -583,7 +581,6 @@ void MapBlock::serialize(std::ostream &os, u8 version, bool disk)
                Bulk node data
        */
        NameIdMapping nimap;
-       u32 nodecount = MAP_BLOCKSIZE*MAP_BLOCKSIZE*MAP_BLOCKSIZE;
        if(disk)
        {
                MapNode *tmp_nodes = new MapNode[nodecount];
@@ -683,7 +680,6 @@ void MapBlock::deSerialize(std::istream &is, u8 version, bool disk)
        */
        TRACESTREAM(<<"MapBlock::deSerialize "<<PP(getPos())
                        <<": Bulk node data"<<std::endl);
-       u32 nodecount = MAP_BLOCKSIZE*MAP_BLOCKSIZE*MAP_BLOCKSIZE;
        u8 content_width = readU8(is);
        u8 params_width = readU8(is);
        if(content_width != 1 && content_width != 2)
@@ -786,8 +782,6 @@ void MapBlock::deSerializeNetworkSpecific(std::istream &is)
 
 void MapBlock::deSerialize_pre22(std::istream &is, u8 version, bool disk)
 {
-       u32 nodecount = MAP_BLOCKSIZE*MAP_BLOCKSIZE*MAP_BLOCKSIZE;
-
        // Initialize default flags
        is_underground = false;
        m_day_night_differs = false;
index 9e36fe113c0139ef1d1d39452ae57f412ba0710c..92ca4b485f5fc1c5826b5ca54d005655b45a91b8 100644 (file)
@@ -145,9 +145,8 @@ public:
        void reallocate()
        {
                delete[] data;
-               u32 datasize = MAP_BLOCKSIZE * MAP_BLOCKSIZE * MAP_BLOCKSIZE;
-               data = new MapNode[datasize];
-               for (u32 i = 0; i < datasize; i++)
+               data = new MapNode[nodecount];
+               for (u32 i = 0; i < nodecount; i++)
                        data[i] = MapNode(CONTENT_IGNORE);
 
                raiseModified(MOD_STATE_WRITE_NEEDED, MOD_REASON_REALLOCATE);
@@ -294,7 +293,7 @@ public:
                if (!*valid_position)
                        return MapNode(CONTENT_IGNORE);
 
-               return data[z * MAP_BLOCKSIZE * MAP_BLOCKSIZE + y * MAP_BLOCKSIZE + x];
+               return data[z * zstride + y * ystride + x];
        }
 
        inline MapNode getNode(v3s16 p, bool *valid_position)
@@ -553,6 +552,8 @@ public:
        static const u32 ystride = MAP_BLOCKSIZE;
        static const u32 zstride = MAP_BLOCKSIZE * MAP_BLOCKSIZE;
 
+       static const u32 nodecount = MAP_BLOCKSIZE * MAP_BLOCKSIZE * MAP_BLOCKSIZE;
+
 private:
        /*
                Private member variables