1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

address review

This commit is contained in:
Lars 2025-05-30 17:20:34 -07:00
parent b9deee2147
commit 0da467c374
3 changed files with 31 additions and 4 deletions

View file

@ -429,7 +429,7 @@ void MapBlock::serialize(std::ostream &os_compressed, u8 version, bool disk, int
const u8 params_width = 2; const u8 params_width = 2;
if(disk) if(disk)
{ {
const int size = m_is_mono_block ? 1 : nodecount; const size_t size = m_is_mono_block ? 1 : nodecount;
MapNode *tmp_nodes = new MapNode[size]; MapNode *tmp_nodes = new MapNode[size];
memcpy(tmp_nodes, data, size * sizeof(MapNode)); memcpy(tmp_nodes, data, size * sizeof(MapNode));
getBlockNodeIdMapping(&nimap, tmp_nodes, m_gamedef->ndef(), size); getBlockNodeIdMapping(&nimap, tmp_nodes, m_gamedef->ndef(), size);

View file

@ -21,9 +21,7 @@ class NodeMetadataList;
class IGameDef; class IGameDef;
class MapBlockMesh; class MapBlockMesh;
class VoxelManipulator; class VoxelManipulator;
#if BUILD_UNITTESTS
class TestMapBlock; class TestMapBlock;
#endif
#define BLOCK_TIMESTAMP_UNDEFINED 0xffffffff #define BLOCK_TIMESTAMP_UNDEFINED 0xffffffff
@ -442,7 +440,9 @@ private:
*/ */
void deSerialize_pre22(std::istream &is, u8 version, bool disk); void deSerialize_pre22(std::istream &is, u8 version, bool disk);
// check if all nodes are identical, if so store them as a single node
void tryConvertToMonoblock(); void tryConvertToMonoblock();
// if only a single node is stored, expand storage back to the full array
void deconvertMonoblock(); void deconvertMonoblock();
void reallocate(u32 c, MapNode n); void reallocate(u32 c, MapNode n);

View file

@ -121,7 +121,6 @@ void TestMapBlock::testMonoblock(IGameDef *gamedef)
UASSERT(vmm.getNode({5,5,5}).param0 == 42); UASSERT(vmm.getNode({5,5,5}).param0 == 42);
block.setNode(5,5,5,MapNode(23)); block.setNode(5,5,5,MapNode(23));
t = block.data;
block.copyFrom(vmm); block.copyFrom(vmm);
UASSERT(block.m_is_mono_block); UASSERT(block.m_is_mono_block);
@ -130,6 +129,34 @@ void TestMapBlock::testMonoblock(IGameDef *gamedef)
vmm.setNode({5,5,5}, MapNode(23)); vmm.setNode({5,5,5}, MapNode(23));
block.copyFrom(vmm); block.copyFrom(vmm);
UASSERT(!block.m_is_mono_block); UASSERT(!block.m_is_mono_block);
vmm.setNode({5,5,5}, MapNode(42,1,0));
block.copyFrom(vmm);
UASSERT(!block.m_is_mono_block);
vmm.setNode({5,5,5}, MapNode(42,0,1));
block.copyFrom(vmm);
UASSERT(!block.m_is_mono_block);
vmm.setNode({5,5,5}, MapNode(42));
block.copyFrom(vmm);
UASSERT(block.m_is_mono_block);
block.setNode(5,5,5,MapNode(23));
block.tryConvertToMonoblock();
UASSERT(!block.m_is_mono_block);
block.setNode(5,5,5,MapNode(42, 1, 0));
block.tryConvertToMonoblock();
UASSERT(!block.m_is_mono_block);
block.setNode(5,5,5,MapNode(42, 0, 1));
block.tryConvertToMonoblock();
UASSERT(!block.m_is_mono_block);
block.setNode(5,5,5,MapNode(42));
block.tryConvertToMonoblock();
UASSERT(block.m_is_mono_block);
} }
void TestMapBlock::testSaveLoad(IGameDef *gamedef, const u8 version) void TestMapBlock::testSaveLoad(IGameDef *gamedef, const u8 version)