Skip to content

Commit

Permalink
Optimize SAO getStaticData by using std::string pointer instead of re…
Browse files Browse the repository at this point in the history
…turn copy

Signed-off-by: Loic Blot <loic.blot@unix-experience.fr>
  • Loading branch information
nerzhul committed Jan 13, 2017
1 parent e2dd96b commit ef0aa7d
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 12 deletions.
9 changes: 4 additions & 5 deletions src/content_sao.cpp
Expand Up @@ -521,7 +521,7 @@ std::string LuaEntitySAO::getClientInitializationData(u16 protocol_version)
return os.str();
}

std::string LuaEntitySAO::getStaticData() const
void LuaEntitySAO::getStaticData(std::string *result) const
{
verbosestream<<FUNCTION_NAME<<std::endl;
std::ostringstream os(std::ios::binary);
Expand All @@ -543,7 +543,7 @@ std::string LuaEntitySAO::getStaticData() const
writeV3F1000(os, m_velocity);
// yaw
writeF1000(os, m_yaw);
return os.str();
*result = os.str();
}

int LuaEntitySAO::punch(v3f dir,
Expand Down Expand Up @@ -918,10 +918,9 @@ std::string PlayerSAO::getClientInitializationData(u16 protocol_version)
return os.str();
}

std::string PlayerSAO::getStaticData() const
void PlayerSAO::getStaticData(std::string *result) const
{
FATAL_ERROR("Deprecated function (?)");
return "";
FATAL_ERROR("Deprecated function");
}

void PlayerSAO::step(float dtime, bool send_recommended)
Expand Down
4 changes: 2 additions & 2 deletions src/content_sao.h
Expand Up @@ -102,7 +102,7 @@ class LuaEntitySAO : public UnitSAO
const std::string &data);
void step(float dtime, bool send_recommended);
std::string getClientInitializationData(u16 protocol_version);
std::string getStaticData() const;
void getStaticData(std::string *result) const;
int punch(v3f dir,
const ToolCapabilities *toolcap=NULL,
ServerActiveObject *puncher=NULL,
Expand Down Expand Up @@ -199,7 +199,7 @@ class PlayerSAO : public UnitSAO
void removingFromEnvironment();
bool isStaticAllowed() const { return false; }
std::string getClientInitializationData(u16 protocol_version);
std::string getStaticData() const;
void getStaticData(std::string *result) const;
void step(float dtime, bool send_recommended);
void setBasePosition(const v3f &position);
void setPos(const v3f &pos);
Expand Down
9 changes: 6 additions & 3 deletions src/serverenvironment.cpp
Expand Up @@ -1694,7 +1694,8 @@ u16 ServerEnvironment::addActiveObjectRaw(ServerActiveObject *object,
{
// Add static object to active static list of the block
v3f objectpos = object->getBasePosition();
std::string staticdata = object->getStaticData();
std::string staticdata = "";
object->getStaticData(&staticdata);
StaticObject s_obj(object->getType(), objectpos, staticdata);
// Add to the block where the object is located in
v3s16 blockpos = getNodeBlockPos(floatToInt(objectpos, BS));
Expand Down Expand Up @@ -1980,7 +1981,8 @@ void ServerEnvironment::deactivateFarObjects(bool force_delete)
<<std::endl;
continue;
}
std::string staticdata_new = obj->getStaticData();
std::string staticdata_new = "";
obj->getStaticData(&staticdata_new);
StaticObject s_obj(obj->getType(), objectpos, staticdata_new);
block->m_static_objects.insert(id, s_obj);
obj->m_static_block = blockpos_o;
Expand Down Expand Up @@ -2020,7 +2022,8 @@ void ServerEnvironment::deactivateFarObjects(bool force_delete)
if(obj->isStaticAllowed())
{
// Create new static object
std::string staticdata_new = obj->getStaticData();
std::string staticdata_new = "";
obj->getStaticData(&staticdata_new);
StaticObject s_obj(obj->getType(), objectpos, staticdata_new);

bool stays_in_same_block = false;
Expand Down
4 changes: 2 additions & 2 deletions src/serverobject.h
Expand Up @@ -119,10 +119,10 @@ class ServerActiveObject : public ActiveObject
when it is created (converted from static to active - actually
the data is the static form)
*/
virtual std::string getStaticData()
virtual void getStaticData(std::string *result)
{
assert(isStaticAllowed());
return "";
*result = "";
}
/*
Return false in here to never save and instead remove object
Expand Down

0 comments on commit ef0aa7d

Please sign in to comment.