aboutsummaryrefslogtreecommitdiff
path: root/src/itemstackmetadata.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/itemstackmetadata.cpp')
-rw-r--r--src/itemstackmetadata.cpp25
1 files changed, 12 insertions, 13 deletions
diff --git a/src/itemstackmetadata.cpp b/src/itemstackmetadata.cpp
index 97d639f65..048dd9eec 100644
--- a/src/itemstackmetadata.cpp
+++ b/src/itemstackmetadata.cpp
@@ -62,26 +62,25 @@ bool ItemStackMetadata::setString(const std::string &name, const std::string &va
void ItemStackMetadata::serialize(std::ostream &os, InventoryOptimizationOption opt) const
{
std::ostringstream os2;
+ std::ostringstream os_hash;
os2 << DESERIALIZE_START;
- std::string unsent_fields;
bool sparse_meta = opt & INV_OO_META_SPARSE;
for (const auto &stringvar : m_stringvars) {
- if (sparse_meta
- && stringvar.first != TOOLCAP_KEY
- && stringvar.first != "description"
- && stringvar.first != "color"
- && stringvar.first != "short_description"
- && stringvar.first != "palette_index") {
- unsent_fields += stringvar.first + "=" + stringvar.second;
- continue;
- }
+ bool silent = sparse_meta
+ && stringvar.first != TOOLCAP_KEY
+ && stringvar.first != "description"
+ && stringvar.first != "color"
+ && stringvar.first != "short_description"
+ && stringvar.first != "palette_index";
if (!stringvar.first.empty() || !stringvar.second.empty())
- os2 << stringvar.first << DESERIALIZE_KV_DELIM
+ (silent ? os_hash : os2) << stringvar.first << DESERIALIZE_KV_DELIM
<< stringvar.second << DESERIALIZE_PAIR_DELIM;
}
- if (! unsent_fields.empty())
+ std::string hash_str = os_hash.str();
+ if (! hash_str.empty()) {
os2 << "hash" << DESERIALIZE_KV_DELIM
- << murmur_hash_64_ua(unsent_fields.data(), unsent_fields.length(), 0xdeadbeef) << DESERIALIZE_PAIR_DELIM;
+ << murmur_hash_64_ua(hash_str.data(), hash_str.length(), 0xdeadbeef) << DESERIALIZE_PAIR_DELIM;
+ }
os << serializeJsonStringIfNeeded(os2.str());
}