aboutsummaryrefslogtreecommitdiff
path: root/src/script/lua_api/l_metadata.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/script/lua_api/l_metadata.cpp')
-rw-r--r--src/script/lua_api/l_metadata.cpp61
1 files changed, 28 insertions, 33 deletions
diff --git a/src/script/lua_api/l_metadata.cpp b/src/script/lua_api/l_metadata.cpp
index d00cb4daa..5f07989eb 100644
--- a/src/script/lua_api/l_metadata.cpp
+++ b/src/script/lua_api/l_metadata.cpp
@@ -59,7 +59,7 @@ int MetaDataRef::l_contains(lua_State *L)
MetaDataRef *ref = checkobject(L, 1);
std::string name = luaL_checkstring(L, 2);
- Metadata *meta = ref->getmeta(false);
+ IMetadata *meta = ref->getmeta(false);
if (meta == NULL)
return 0;
@@ -75,7 +75,7 @@ int MetaDataRef::l_get(lua_State *L)
MetaDataRef *ref = checkobject(L, 1);
std::string name = luaL_checkstring(L, 2);
- Metadata *meta = ref->getmeta(false);
+ IMetadata *meta = ref->getmeta(false);
if (meta == NULL)
return 0;
@@ -96,13 +96,14 @@ int MetaDataRef::l_get_string(lua_State *L)
MetaDataRef *ref = checkobject(L, 1);
std::string name = luaL_checkstring(L, 2);
- Metadata *meta = ref->getmeta(false);
+ IMetadata *meta = ref->getmeta(false);
if (meta == NULL) {
lua_pushlstring(L, "", 0);
return 1;
}
- const std::string &str = meta->getString(name);
+ std::string str_;
+ const std::string &str = meta->getString(name, &str_);
lua_pushlstring(L, str.c_str(), str.size());
return 1;
}
@@ -118,12 +119,9 @@ int MetaDataRef::l_set_string(lua_State *L)
const char *s = lua_tolstring(L, 3, &len);
std::string str(s, len);
- Metadata *meta = ref->getmeta(!str.empty());
- if (meta == NULL || str == meta->getString(name))
- return 0;
-
- meta->setString(name, str);
- ref->reportMetadataChange(&name);
+ IMetadata *meta = ref->getmeta(!str.empty());
+ if (meta != NULL && meta->setString(name, str))
+ ref->reportMetadataChange(&name);
return 0;
}
@@ -135,13 +133,14 @@ int MetaDataRef::l_get_int(lua_State *L)
MetaDataRef *ref = checkobject(L, 1);
std::string name = luaL_checkstring(L, 2);
- Metadata *meta = ref->getmeta(false);
+ IMetadata *meta = ref->getmeta(false);
if (meta == NULL) {
lua_pushnumber(L, 0);
return 1;
}
- const std::string &str = meta->getString(name);
+ std::string str_;
+ const std::string &str = meta->getString(name, &str_);
lua_pushnumber(L, stoi(str));
return 1;
}
@@ -156,12 +155,9 @@ int MetaDataRef::l_set_int(lua_State *L)
int a = luaL_checkint(L, 3);
std::string str = itos(a);
- Metadata *meta = ref->getmeta(true);
- if (meta == NULL || str == meta->getString(name))
- return 0;
-
- meta->setString(name, str);
- ref->reportMetadataChange(&name);
+ IMetadata *meta = ref->getmeta(true);
+ if (meta != NULL && meta->setString(name, str))
+ ref->reportMetadataChange(&name);
return 0;
}
@@ -173,13 +169,14 @@ int MetaDataRef::l_get_float(lua_State *L)
MetaDataRef *ref = checkobject(L, 1);
std::string name = luaL_checkstring(L, 2);
- Metadata *meta = ref->getmeta(false);
+ IMetadata *meta = ref->getmeta(false);
if (meta == NULL) {
lua_pushnumber(L, 0);
return 1;
}
- const std::string &str = meta->getString(name);
+ std::string str_;
+ const std::string &str = meta->getString(name, &str_);
lua_pushnumber(L, stof(str));
return 1;
}
@@ -194,12 +191,9 @@ int MetaDataRef::l_set_float(lua_State *L)
float a = readParam<float>(L, 3);
std::string str = ftos(a);
- Metadata *meta = ref->getmeta(true);
- if (meta == NULL || str == meta->getString(name))
- return 0;
-
- meta->setString(name, str);
- ref->reportMetadataChange(&name);
+ IMetadata *meta = ref->getmeta(true);
+ if (meta != NULL && meta->setString(name, str))
+ ref->reportMetadataChange(&name);
return 0;
}
@@ -210,7 +204,7 @@ int MetaDataRef::l_to_table(lua_State *L)
MetaDataRef *ref = checkobject(L, 1);
- Metadata *meta = ref->getmeta(true);
+ IMetadata *meta = ref->getmeta(true);
if (meta == NULL) {
lua_pushnil(L);
return 1;
@@ -239,7 +233,7 @@ int MetaDataRef::l_from_table(lua_State *L)
}
// Create new metadata
- Metadata *meta = ref->getmeta(true);
+ IMetadata *meta = ref->getmeta(true);
if (meta == NULL) {
lua_pushboolean(L, false);
return 1;
@@ -251,11 +245,12 @@ int MetaDataRef::l_from_table(lua_State *L)
return 1;
}
-void MetaDataRef::handleToTable(lua_State *L, Metadata *meta)
+void MetaDataRef::handleToTable(lua_State *L, IMetadata *meta)
{
lua_newtable(L);
{
- const StringMap &fields = meta->getStrings();
+ StringMap fields_;
+ const StringMap &fields = meta->getStrings(&fields_);
for (const auto &field : fields) {
const std::string &name = field.first;
const std::string &value = field.second;
@@ -267,7 +262,7 @@ void MetaDataRef::handleToTable(lua_State *L, Metadata *meta)
lua_setfield(L, -2, "fields");
}
-bool MetaDataRef::handleFromTable(lua_State *L, int table, Metadata *meta)
+bool MetaDataRef::handleFromTable(lua_State *L, int table, IMetadata *meta)
{
// Set fields
lua_getfield(L, table, "fields");
@@ -292,9 +287,9 @@ bool MetaDataRef::handleFromTable(lua_State *L, int table, Metadata *meta)
int MetaDataRef::l_equals(lua_State *L)
{
MetaDataRef *ref1 = checkobject(L, 1);
- Metadata *data1 = ref1->getmeta(false);
+ IMetadata *data1 = ref1->getmeta(false);
MetaDataRef *ref2 = checkobject(L, 2);
- Metadata *data2 = ref2->getmeta(false);
+ IMetadata *data2 = ref2->getmeta(false);
if (data1 == NULL || data2 == NULL)
lua_pushboolean(L, data1 == data2);
else