aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoic Blot <loic.blot@unix-experience.fr>2017-01-11 22:48:14 +0100
committerLoïc Blot <nerzhul@users.noreply.github.com>2017-01-13 21:56:24 +0100
commitef0aa7d5b543b6561e1b7292b2d0a0ac43add55d (patch)
treef5c396ec87193c2a2ea4ef4c1672939dc506507a
parente2dd96b432f057cd8a3886314c78a79138a99c5e (diff)
downloadminetest-ef0aa7d5b543b6561e1b7292b2d0a0ac43add55d.tar.gz
minetest-ef0aa7d5b543b6561e1b7292b2d0a0ac43add55d.tar.bz2
minetest-ef0aa7d5b543b6561e1b7292b2d0a0ac43add55d.zip
Optimize SAO getStaticData by using std::string pointer instead of return copy
Signed-off-by: Loic Blot <loic.blot@unix-experience.fr>
-rw-r--r--src/content_sao.cpp9
-rw-r--r--src/content_sao.h4
-rw-r--r--src/serverenvironment.cpp9
-rw-r--r--src/serverobject.h4
4 files changed, 14 insertions, 12 deletions
diff --git a/src/content_sao.cpp b/src/content_sao.cpp
index 852e2d788..bf8282af4 100644
--- a/src/content_sao.cpp
+++ b/src/content_sao.cpp
@@ -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);
@@ -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,
@@ -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)
diff --git a/src/content_sao.h b/src/content_sao.h
index 4d6cf4dcf..4abe93250 100644
--- a/src/content_sao.h
+++ b/src/content_sao.h
@@ -102,7 +102,7 @@ public:
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,
@@ -199,7 +199,7 @@ public:
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);
diff --git a/src/serverenvironment.cpp b/src/serverenvironment.cpp
index e1962bcff..d3b85a430 100644
--- a/src/serverenvironment.cpp
+++ b/src/serverenvironment.cpp
@@ -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));
@@ -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;
@@ -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;
diff --git a/src/serverobject.h b/src/serverobject.h
index 9e8b5a779..26c8b062d 100644
--- a/src/serverobject.h
+++ b/src/serverobject.h
@@ -119,10 +119,10 @@ public:
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