diff options
author | Jude Melton-Houghton <jwmhjwmh@gmail.com> | 2022-09-26 17:03:43 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-26 17:03:43 -0400 |
commit | f4a01f3a5dc0d8fe2f4f6d804d790da91d1bc30c (patch) | |
tree | 089ddc309e22ae8549ec3b86765ee272f57a33df /src/script/lua_api/l_nodemeta.cpp | |
parent | 03428d9825cfdf2cfaed6ac9410dafccac0d4f3a (diff) | |
download | minetest-f4a01f3a5dc0d8fe2f4f6d804d790da91d1bc30c.tar.xz |
Avoid duplication of mod metadata in memory (#12562)
Co-authored-by: sfan5 <sfan5@live.de>
Diffstat (limited to 'src/script/lua_api/l_nodemeta.cpp')
-rw-r--r-- | src/script/lua_api/l_nodemeta.cpp | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/script/lua_api/l_nodemeta.cpp b/src/script/lua_api/l_nodemeta.cpp index bdc4844c0..e28fc2669 100644 --- a/src/script/lua_api/l_nodemeta.cpp +++ b/src/script/lua_api/l_nodemeta.cpp @@ -37,7 +37,7 @@ NodeMetaRef* NodeMetaRef::checkobject(lua_State *L, int narg) return *(NodeMetaRef**)ud; // unbox pointer } -Metadata* NodeMetaRef::getmeta(bool auto_create) +IMetadata* NodeMetaRef::getmeta(bool auto_create) { if (m_is_local) return m_local_meta; @@ -127,12 +127,13 @@ int NodeMetaRef::l_mark_as_private(lua_State *L) return 0; } -void NodeMetaRef::handleToTable(lua_State *L, Metadata *_meta) +void NodeMetaRef::handleToTable(lua_State *L, IMetadata *_meta) { // fields MetaDataRef::handleToTable(L, _meta); - NodeMetadata *meta = (NodeMetadata *) _meta; + NodeMetadata *meta = dynamic_cast<NodeMetadata*>(_meta); + assert(meta); // inventory Inventory *inv = meta->getInventory(); @@ -145,13 +146,14 @@ void NodeMetaRef::handleToTable(lua_State *L, Metadata *_meta) } // from_table(self, table) -bool NodeMetaRef::handleFromTable(lua_State *L, int table, Metadata *_meta) +bool NodeMetaRef::handleFromTable(lua_State *L, int table, IMetadata *_meta) { // fields if (!MetaDataRef::handleFromTable(L, table, _meta)) return false; - NodeMetadata *meta = (NodeMetadata*) _meta; + NodeMetadata *meta = dynamic_cast<NodeMetadata*>(_meta); + assert(meta); // inventory Inventory *inv = meta->getInventory(); @@ -178,7 +180,7 @@ NodeMetaRef::NodeMetaRef(v3s16 p, ServerEnvironment *env): { } -NodeMetaRef::NodeMetaRef(Metadata *meta): +NodeMetaRef::NodeMetaRef(IMetadata *meta): m_is_local(true), m_local_meta(meta) { @@ -196,7 +198,7 @@ void NodeMetaRef::create(lua_State *L, v3s16 p, ServerEnvironment *env) } // Client-sided version of the above -void NodeMetaRef::createClient(lua_State *L, Metadata *meta) +void NodeMetaRef::createClient(lua_State *L, IMetadata *meta) { NodeMetaRef *o = new NodeMetaRef(meta); *(void **)(lua_newuserdata(L, sizeof(void *))) = o; |