Allocate MapBlock::m_node_metadata on heap to allow less header bloat
authorPerttu Ahola <celeron55@gmail.com>
Sun, 13 Nov 2011 10:54:33 +0000 (12:54 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Tue, 29 Nov 2011 17:13:41 +0000 (19:13 +0200)
src/client.cpp
src/environment.cpp
src/game.cpp
src/map.cpp
src/mapblock.cpp
src/mapblock.h

index 69c91bc30947d161bfc9cbcd7725cca52b203b29..80d7febe66b076b13444f5d0eac4316c9c178c10 100644 (file)
@@ -31,6 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "settings.h"
 #include "profiler.h"
 #include "log.h"
+#include "nodemetadata.h"
 
 /*
        QueuedMeshUpdate
index 50c5a4b816b7e7c16e9696bd4387e3b9b8f82cb3..d9f24ede90aad05e7e5683fb09a4a30cffe41a82 100644 (file)
@@ -31,6 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "profiler.h"
 #include "scriptapi.h"
 #include "mapnode_contentfeatures.h"
+#include "nodemetadata.h"
 
 #define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")"
 
@@ -607,7 +608,7 @@ void ServerEnvironment::activateBlock(MapBlock *block, u32 additional_dtime)
        activateObjects(block);
 
        // Run node metadata
-       bool changed = block->m_node_metadata.step((float)dtime_s);
+       bool changed = block->m_node_metadata->step((float)dtime_s);
        if(changed)
        {
                MapEditEvent event;
@@ -917,7 +918,7 @@ void ServerEnvironment::step(float dtime)
                        block->setTimestampNoChangedFlag(m_game_time);
 
                        // Run node metadata
-                       bool changed = block->m_node_metadata.step(dtime);
+                       bool changed = block->m_node_metadata->step(dtime);
                        if(changed)
                        {
                                MapEditEvent event;
index 638ad91556226d0aefe3abf25a46adf093328d61..bd84593b8d94a786088bd83e4faa2f2b28f7a6b9 100644 (file)
@@ -45,6 +45,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "filesys.h"
 // Needed for determining pointing to nodes
 #include "mapnode_contentfeatures.h"
+#include "nodemetadata.h"
 
 /*
        Setting this to 1 enables a special camera mode that forces
index 858c08b63705d4f3ca3414960e2649767ee85176..b70b76b71ef2efa24a5b3666cc12a646ad9d88d9 100644 (file)
@@ -1836,7 +1836,7 @@ NodeMetadata* Map::getNodeMetadata(v3s16 p)
                                <<std::endl;
                return NULL;
        }
-       NodeMetadata *meta = block->m_node_metadata.get(p_rel);
+       NodeMetadata *meta = block->m_node_metadata->get(p_rel);
        return meta;
 }
 
@@ -1856,7 +1856,7 @@ void Map::setNodeMetadata(v3s16 p, NodeMetadata *meta)
                                <<std::endl;
                return;
        }
-       block->m_node_metadata.set(p_rel, meta);
+       block->m_node_metadata->set(p_rel, meta);
 }
 
 void Map::removeNodeMetadata(v3s16 p)
@@ -1870,7 +1870,7 @@ void Map::removeNodeMetadata(v3s16 p)
                                <<std::endl;
                return;
        }
-       block->m_node_metadata.remove(p_rel);
+       block->m_node_metadata->remove(p_rel);
 }
 
 void Map::nodeMetadataStep(float dtime,
@@ -1895,7 +1895,7 @@ void Map::nodeMetadataStep(float dtime,
                for(i=sectorblocks.begin(); i!=sectorblocks.end(); i++)
                {
                        MapBlock *block = *i;
-                       bool changed = block->m_node_metadata.step(dtime);
+                       bool changed = block->m_node_metadata->step(dtime);
                        if(changed)
                                changed_blocks[block->getPos()] = block;
                }
index 85cd7e45ec9b297d2d69f1e692061a44c880bcee..012cbd4d10dd4797f9c13873bc53190db2de95c9 100644 (file)
@@ -24,12 +24,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "light.h"
 #include <sstream>
 #include "mapnode_contentfeatures.h"
+#include "nodemetadata.h"
 
 /*
        MapBlock
 */
 
 MapBlock::MapBlock(Map *parent, v3s16 pos, bool dummy):
+               m_node_metadata(new NodeMetadataList),
                m_parent(parent),
                m_pos(pos),
                m_modified(MOD_STATE_WRITE_NEEDED),
@@ -44,8 +46,6 @@ MapBlock::MapBlock(Map *parent, v3s16 pos, bool dummy):
        if(dummy == false)
                reallocate();
        
-       //m_spawn_timer = -10000;
-
 #ifndef SERVER
        m_mesh_expired = false;
        mesh_mutex.Init();
@@ -68,6 +68,8 @@ MapBlock::~MapBlock()
        }
 #endif
 
+       delete m_node_metadata;
+
        if(data)
                delete[] data;
 }
@@ -632,7 +634,7 @@ void MapBlock::serialize(std::ostream &os, u8 version)
                        {
                                try{
                                        std::ostringstream oss(std::ios_base::binary);
-                                       m_node_metadata.serialize(oss);
+                                       m_node_metadata->serialize(oss);
                                        os<<serializeString(oss.str());
                                }
                                // This will happen if the string is longer than 65535
@@ -645,7 +647,7 @@ void MapBlock::serialize(std::ostream &os, u8 version)
                        else
                        {
                                std::ostringstream oss(std::ios_base::binary);
-                               m_node_metadata.serialize(oss);
+                               m_node_metadata->serialize(oss);
                                compressZlib(oss.str(), os);
                                //os<<serializeLongString(oss.str());
                        }
@@ -784,7 +786,7 @@ void MapBlock::deSerialize(std::istream &is, u8 version)
                                {
                                        std::string data = deSerializeString(is);
                                        std::istringstream iss(data, std::ios_base::binary);
-                                       m_node_metadata.deSerialize(iss);
+                                       m_node_metadata->deSerialize(iss);
                                }
                                else
                                {
@@ -792,7 +794,7 @@ void MapBlock::deSerialize(std::istream &is, u8 version)
                                        std::ostringstream oss(std::ios_base::binary);
                                        decompressZlib(is, oss);
                                        std::istringstream iss(oss.str(), std::ios_base::binary);
-                                       m_node_metadata.deSerialize(iss);
+                                       m_node_metadata->deSerialize(iss);
                                }
                        }
                        catch(SerializationError &e)
index 22b3b7db6189d986c947d9ac50c393f4f53fe909..18b679cfc9fcee0bc426f26094de2fe1abea5482 100644 (file)
@@ -30,7 +30,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "serialization.h"
 #include "constants.h"
 #include "voxel.h"
-#include "nodemetadata.h"
 #include "staticobject.h"
 #include "mapblock_nodemod.h"
 #ifndef SERVER
@@ -38,6 +37,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #endif
 
 class Map;
+class NodeMetadataList;
 
 #define BLOCK_TIMESTAMP_UNDEFINED 0xffffffff
 
@@ -575,7 +575,7 @@ public:
        JMutex mesh_mutex;
 #endif
        
-       NodeMetadataList m_node_metadata;
+       NodeMetadataList *m_node_metadata;
        StaticObjectList m_static_objects;
        
 private: