From 805c8e51e5dd4dfad381a0d40b4388b5de90becf Mon Sep 17 00:00:00 2001
From: Craig Robbins <kde.psych@gmail.com>
Date: Sat, 17 Jan 2015 19:19:26 +1000
Subject: [PATCH] Create empty default constructor for MapNode

---
 src/map.cpp   | 15 ++++++++++++---
 src/map.h     |  4 ++--
 src/mapnode.h |  5 ++++-
 src/test.cpp  |  3 +--
 src/voxel.cpp |  6 ++----
 5 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/src/map.cpp b/src/map.cpp
index fdc35558d..52303cd38 100644
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -1189,8 +1189,7 @@ void Map::removeNodeAndUpdate(v3s16 p,
 		This also clears the lighting.
 	*/
 
-	MapNode n;
-	n.setContent(replace_material);
+	MapNode n(replace_material);
 	setNode(p, n);
 
 	for(s32 i=0; i<2; i++)
@@ -1603,6 +1602,16 @@ struct NodeNeighbor {
 	NeighborType t;
 	v3s16 p;
 	bool l; //can liquid
+
+	NodeNeighbor()
+		: n(CONTENT_AIR)
+	{ }
+
+	NodeNeighbor(const MapNode &node, NeighborType n_type, v3s16 pos)
+		: n(node),
+		  t(n_type),
+		  p(pos)
+	{ }
 };
 
 void Map::transforming_liquid_add(v3s16 p) {
@@ -1716,7 +1725,7 @@ void Map::transformLiquids(std::map<v3s16, MapBlock*> & modified_blocks)
 					break;
 			}
 			v3s16 npos = p0 + dirs[i];
-			NodeNeighbor nb = {getNodeNoEx(npos), nt, npos};
+			NodeNeighbor nb(getNodeNoEx(npos), nt, npos);
 			switch (nodemgr->get(nb.n.getContent()).liquid_type) {
 				case LIQUID_NONE:
 					if (nb.n.getContent() == CONTENT_AIR) {
diff --git a/src/map.h b/src/map.h
index 3335d9026..1089e6d34 100644
--- a/src/map.h
+++ b/src/map.h
@@ -80,9 +80,9 @@ struct MapEditEvent
 
 	MapEditEvent():
 		type(MEET_OTHER),
+		n(CONTENT_AIR),
 		already_known_by_peer(0)
-	{
-	}
+	{ }
 
 	MapEditEvent * clone()
 	{
diff --git a/src/mapnode.h b/src/mapnode.h
index ec21a2014..82c53e7d4 100644
--- a/src/mapnode.h
+++ b/src/mapnode.h
@@ -139,12 +139,15 @@ struct MapNode
 	*/
 	u8 param2;
 
+	MapNode()
+	{ }
+
 	MapNode(const MapNode & n)
 	{
 		*this = n;
 	}
 
-	MapNode(content_t content = CONTENT_AIR, u8 a_param1=0, u8 a_param2=0)
+	MapNode(content_t content, u8 a_param1=0, u8 a_param2=0)
 		: param0(content),
 		  param1(a_param1),
 		  param2(a_param2)
diff --git a/src/test.cpp b/src/test.cpp
index a9ec6ffbb..80494e07a 100644
--- a/src/test.cpp
+++ b/src/test.cpp
@@ -855,9 +855,8 @@ struct TestMapNode: public TestBase
 {
 	void Run(INodeDefManager *nodedef)
 	{
-		MapNode n;
+		MapNode n(CONTENT_AIR);
 
-		// Default values
 		UASSERT(n.getContent() == CONTENT_AIR);
 		UASSERT(n.getLight(LIGHTBANK_DAY, nodedef) == 0);
 		UASSERT(n.getLight(LIGHTBANK_NIGHT, nodedef) == 0);
diff --git a/src/voxel.cpp b/src/voxel.cpp
index 02da42459..8ac786aab 100644
--- a/src/voxel.cpp
+++ b/src/voxel.cpp
@@ -173,10 +173,8 @@ void VoxelManipulator::addArea(const VoxelArea &area)
 	dstream<<", new_size="<<new_size;
 	dstream<<std::endl;*/
 
-	// Allocate and clear new data
-	// FIXME: UGLY KLUDGE because MapNode default constructor is FUBAR; it
-	//        initialises data that is going to be overwritten anyway
-	MapNode *new_data = (MapNode*)new char[new_size * sizeof (*new_data)];
+	// Allocate new data and clear flags
+	MapNode *new_data = new MapNode[new_size];
 	assert(new_data);
 	u8 *new_flags = new u8[new_size];
 	assert(new_flags);
-- 
GitLab