diff options
author | Loic Blot <loic.blot@unix-experience.fr> | 2017-01-11 22:48:14 +0100 |
---|---|---|
committer | Loïc Blot <nerzhul@users.noreply.github.com> | 2017-01-13 21:56:24 +0100 |
commit | ef0aa7d5b543b6561e1b7292b2d0a0ac43add55d (patch) | |
tree | f5c396ec87193c2a2ea4ef4c1672939dc506507a | |
parent | e2dd96b432f057cd8a3886314c78a79138a99c5e (diff) | |
download | minetest-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.cpp | 9 | ||||
-rw-r--r-- | src/content_sao.h | 4 | ||||
-rw-r--r-- | src/serverenvironment.cpp | 9 | ||||
-rw-r--r-- | src/serverobject.h | 4 |
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 |