From 2915bd5518150955ed1581110527f4bb4adadfe8 Mon Sep 17 00:00:00 2001
From: Perttu Ahola <celeron55@gmail.com>
Date: Sun, 26 Jun 2011 01:31:43 +0300
Subject: [PATCH] more reorganizing of map code

---
 src/CMakeLists.txt     |  3 +--
 src/map.cpp            |  4 +++-
 src/map.h              |  6 +++---
 src/mapblock.cpp       |  2 +-
 src/mapblock.h         | 15 +++++++++------
 src/mapblock_mesh.cpp  |  6 +-----
 src/mapblockobject.cpp | 11 +----------
 src/mapsector.cpp      |  8 ++++----
 src/mapsector.h        | 12 ++++++------
 src/test.cpp           | 11 +++++++++--
 10 files changed, 38 insertions(+), 40 deletions(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index ac58d1d0f..73a960ecc 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -206,8 +206,7 @@ else()
 	endif()
 
 	set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${WARNING_FLAGS} -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops")
-	#set(CMAKE_CXX_FLAGS_DEBUG "-g -O1 -Wall ${WARNING_FLAGS}")
-	set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -Wall ${WARNING_FLAGS}")
+	set(CMAKE_CXX_FLAGS_DEBUG "-g -O1 -Wall ${WARNING_FLAGS}")
 
 	if(USE_GPROF)
 		set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
diff --git a/src/map.cpp b/src/map.cpp
index 4a8aeed59..d8cc34ca7 100644
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -126,7 +126,9 @@ MapSector * Map::getSectorNoGenerate(v2s16 p)
 MapBlock * Map::getBlockNoCreateNoEx(v3s16 p3d)
 {
 	v2s16 p2d(p3d.X, p3d.Z);
-	MapSector * sector = getSectorNoGenerate(p2d);
+	MapSector * sector = getSectorNoGenerateNoEx(p2d);
+	if(sector == NULL)
+		return NULL;
 	MapBlock *block = sector->getBlockNoCreateNoEx(p3d.Y);
 	return block;
 }
diff --git a/src/map.h b/src/map.h
index 99593a589..406b1bc84 100644
--- a/src/map.h
+++ b/src/map.h
@@ -110,17 +110,17 @@ class MapEventReceiver
 	virtual void onMapEditEvent(MapEditEvent *event) = 0;
 };
 
-class Map : public NodeContainer
+class Map /*: public NodeContainer*/
 {
 public:
 
 	Map(std::ostream &dout);
 	virtual ~Map();
 
-	virtual u16 nodeContainerId() const
+	/*virtual u16 nodeContainerId() const
 	{
 		return NODECONTAINER_ID_MAP;
-	}
+	}*/
 
 	virtual s32 mapType() const
 	{
diff --git a/src/mapblock.cpp b/src/mapblock.cpp
index 2f6a4b850..7036cd035 100644
--- a/src/mapblock.cpp
+++ b/src/mapblock.cpp
@@ -28,7 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 	MapBlock
 */
 
-MapBlock::MapBlock(NodeContainer *parent, v3s16 pos, bool dummy):
+MapBlock::MapBlock(Map *parent, v3s16 pos, bool dummy):
 		m_parent(parent),
 		m_pos(pos),
 		m_modified(MOD_STATE_WRITE_NEEDED),
diff --git a/src/mapblock.h b/src/mapblock.h
index 693bc5190..8f3b8464a 100644
--- a/src/mapblock.h
+++ b/src/mapblock.h
@@ -38,6 +38,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 	#include "mapblock_mesh.h"
 #endif
 
+class Map;
 
 #define BLOCK_TIMESTAMP_UNDEFINED 0xffffffff
 
@@ -81,6 +82,7 @@ enum ModifiedState
 	BLOCKGEN_FULLY_GENERATED=6
 };*/
 
+#if 0
 enum
 {
 	NODECONTAINER_ID_MAPBLOCK,
@@ -108,23 +110,24 @@ class NodeContainer
 		}
 	}
 };
+#endif
 
 /*
 	MapBlock itself
 */
 
-class MapBlock : public NodeContainer
+class MapBlock /*: public NodeContainer*/
 {
 public:
-	MapBlock(NodeContainer *parent, v3s16 pos, bool dummy=false);
+	MapBlock(Map *parent, v3s16 pos, bool dummy=false);
 	~MapBlock();
 	
-	virtual u16 nodeContainerId() const
+	/*virtual u16 nodeContainerId() const
 	{
 		return NODECONTAINER_ID_MAPBLOCK;
-	}
+	}*/
 	
-	NodeContainer * getParent()
+	Map * getParent()
 	{
 		return m_parent;
 	}
@@ -640,7 +643,7 @@ class MapBlock : public NodeContainer
 	*/
 
 	// NOTE: Lots of things rely on this being the Map
-	NodeContainer *m_parent;
+	Map *m_parent;
 	// Position in blocks on parent
 	v3s16 m_pos;
 	
diff --git a/src/mapblock_mesh.cpp b/src/mapblock_mesh.cpp
index d4921c2c5..447716d00 100644
--- a/src/mapblock_mesh.cpp
+++ b/src/mapblock_mesh.cpp
@@ -64,11 +64,7 @@ void MeshMakeData::fill(u32 daynight_ratio, MapBlock *block)
 		*/
 		
 		// Get map
-		NodeContainer *parentcontainer = block->getParent();
-		// This will only work if the parent is the map
-		assert(parentcontainer->nodeContainerId() == NODECONTAINER_ID_MAP);
-		// OK, we have the map!
-		Map *map = (Map*)parentcontainer;
+		Map *map = block->getParent();
 
 		for(u16 i=0; i<6; i++)
 		{
diff --git a/src/mapblockobject.cpp b/src/mapblockobject.cpp
index 009163a18..51ac4c66b 100644
--- a/src/mapblockobject.cpp
+++ b/src/mapblockobject.cpp
@@ -856,16 +856,7 @@ bool MapBlockObjectList::wrapObject(MapBlockObject *object)
 	assert(m_objects.find(object->m_id) != NULL);
 	assert(m_objects[object->m_id] == object);
 
-	NodeContainer *parentcontainer = m_block->getParent();
-	// This will only work if the parent is the map
-	if(parentcontainer->nodeContainerId() != NODECONTAINER_ID_MAP)
-	{
-		dstream<<"WARNING: Wrapping object not possible: "
-				"MapBlock's parent is not map"<<std::endl;
-		return true;
-	}
-	// OK, we have the map!
-	Map *map = (Map*)parentcontainer;
+	Map *map = m_block->getParent();
 	
 	// Calculate blockpos on map
 	v3s16 oldblock_pos_i_on_map = m_block->getPosRelative();
diff --git a/src/mapsector.cpp b/src/mapsector.cpp
index 389714f40..4a526c412 100644
--- a/src/mapsector.cpp
+++ b/src/mapsector.cpp
@@ -23,7 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "exceptions.h"
 #include "mapblock.h"
 
-MapSector::MapSector(NodeContainer *parent, v2s16 pos):
+MapSector::MapSector(Map *parent, v2s16 pos):
 		differs_from_disk(false),
 		m_parent(parent),
 		m_pos(pos),
@@ -151,7 +151,7 @@ void MapSector::getBlocks(core::list<MapBlock*> &dest)
 	ServerMapSector
 */
 
-ServerMapSector::ServerMapSector(NodeContainer *parent, v2s16 pos):
+ServerMapSector::ServerMapSector(Map *parent, v2s16 pos):
 		MapSector(parent, pos)
 {
 }
@@ -184,7 +184,7 @@ void ServerMapSector::serialize(std::ostream &os, u8 version)
 
 ServerMapSector* ServerMapSector::deSerialize(
 		std::istream &is,
-		NodeContainer *parent,
+		Map *parent,
 		v2s16 p2d,
 		core::map<v2s16, MapSector*> & sectors
 	)
@@ -247,7 +247,7 @@ ServerMapSector* ServerMapSector::deSerialize(
 	ClientMapSector
 */
 
-ClientMapSector::ClientMapSector(NodeContainer *parent, v2s16 pos):
+ClientMapSector::ClientMapSector(Map *parent, v2s16 pos):
 		MapSector(parent, pos)
 {
 }
diff --git a/src/mapsector.h b/src/mapsector.h
index c5a41ca19..44f45d8f0 100644
--- a/src/mapsector.h
+++ b/src/mapsector.h
@@ -30,7 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include <ostream>
 
 class MapBlock;
-class NodeContainer;
+class Map;
 
 /*
 	This is an Y-wise stack of MapBlocks.
@@ -43,7 +43,7 @@ class MapSector
 {
 public:
 	
-	MapSector(NodeContainer *parent, v2s16 pos);
+	MapSector(Map *parent, v2s16 pos);
 	virtual ~MapSector();
 
 	virtual u32 getId() const = 0;
@@ -73,7 +73,7 @@ class MapSector
 	// The pile of MapBlocks
 	core::map<s16, MapBlock*> m_blocks;
 
-	NodeContainer *m_parent;
+	Map *m_parent;
 	// Position on parent (in MapBlock widths)
 	v2s16 m_pos;
 	
@@ -92,7 +92,7 @@ class MapSector
 class ServerMapSector : public MapSector
 {
 public:
-	ServerMapSector(NodeContainer *parent, v2s16 pos);
+	ServerMapSector(Map *parent, v2s16 pos);
 	~ServerMapSector();
 	
 	u32 getId() const
@@ -109,7 +109,7 @@ class ServerMapSector : public MapSector
 	
 	static ServerMapSector* deSerialize(
 			std::istream &is,
-			NodeContainer *parent,
+			Map *parent,
 			v2s16 p2d,
 			core::map<v2s16, MapSector*> & sectors
 		);
@@ -121,7 +121,7 @@ class ServerMapSector : public MapSector
 class ClientMapSector : public MapSector
 {
 public:
-	ClientMapSector(NodeContainer *parent, v2s16 pos);
+	ClientMapSector(Map *parent, v2s16 pos);
 	~ClientMapSector();
 	
 	u32 getId() const
diff --git a/src/test.cpp b/src/test.cpp
index 9ea402b6f..7d71552a8 100644
--- a/src/test.cpp
+++ b/src/test.cpp
@@ -340,6 +340,12 @@ struct TestVoxelManipulator
 	}
 };
 
+/*
+	NOTE: These tests became non-working then NodeContainer was removed.
+	      These should be redone, utilizing some kind of a virtual
+		  interface for Map (IMap would be fine).
+*/
+#if 0
 struct TestMapBlock
 {
 	class TC : public NodeContainer
@@ -663,6 +669,7 @@ struct TestMapSector
 
 	}
 };
+#endif
 
 struct TestSocket
 {
@@ -1029,8 +1036,8 @@ void run_tests()
 	TEST(TestCompress);
 	TEST(TestMapNode);
 	TEST(TestVoxelManipulator);
-	TEST(TestMapBlock);
-	TEST(TestMapSector);
+	//TEST(TestMapBlock);
+	//TEST(TestMapSector);
 	if(INTERNET_SIMULATOR == false){
 		TEST(TestSocket);
 		dout_con<<"=== BEGIN RUNNING UNIT TESTS FOR CONNECTION ==="<<std::endl;
-- 
GitLab