Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Mapblock: nodecount refactor
Spare direct multoplication, use constant MapBlock::nodecount instead of
local nodecount variables.

Also use strides at one place instead of multiplications.
  • Loading branch information
est31 committed May 31, 2015
1 parent b4dfaa3 commit 06a2eee
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 15 deletions.
16 changes: 5 additions & 11 deletions src/mapblock.cpp
Expand Up @@ -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()
Expand Down Expand Up @@ -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);
Expand All @@ -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;
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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];
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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;
Expand Down
9 changes: 5 additions & 4 deletions src/mapblock.h
Expand Up @@ -145,9 +145,8 @@ class MapBlock /*: public NodeContainer*/
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);
Expand Down Expand Up @@ -294,7 +293,7 @@ class MapBlock /*: public NodeContainer*/
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)
Expand Down Expand Up @@ -553,6 +552,8 @@ class MapBlock /*: public NodeContainer*/
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
Expand Down

2 comments on commit 06a2eee

@nerzhul
Copy link
Member

@nerzhul nerzhul commented on 06a2eee Jun 1, 2015

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

@ShadowNinja
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any optimizer would have performed the multiplication at compile time, so this won't make a difference in speed. The style may be better though.

Please sign in to comment.