diff options
| author | ShadowNinja <shadowninja@minetest.net> | 2017-06-03 14:55:10 -0400 |
|---|---|---|
| committer | ShadowNinja <shadowninja@minetest.net> | 2017-06-03 14:55:10 -0400 |
| commit | caecdb681c428c1aab9c0f7eec2570c0460f995c (patch) | |
| tree | e5115982ea59bbf2343ba9b35bc4a0cfbb56f407 /src/itemstackmetadata.cpp | |
| parent | 81d56b94919dceb7b2e51d70b21a7ca22f852bd5 (diff) | |
| parent | 80dc961d24e1964e25d57039ddb2ba639f9f4d22 (diff) | |
| download | minetest-caecdb681c428c1aab9c0f7eec2570c0460f995c.tar.xz | |
Merge 0.4.16 into stable-0.4
Diffstat (limited to 'src/itemstackmetadata.cpp')
| -rw-r--r-- | src/itemstackmetadata.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/itemstackmetadata.cpp b/src/itemstackmetadata.cpp new file mode 100644 index 000000000..c3d602245 --- /dev/null +++ b/src/itemstackmetadata.cpp @@ -0,0 +1,43 @@ +#include "itemstackmetadata.h" +#include "util/serialize.h" +#include "util/strfnd.h" + +#define DESERIALIZE_START '\x01' +#define DESERIALIZE_KV_DELIM '\x02' +#define DESERIALIZE_PAIR_DELIM '\x03' +#define DESERIALIZE_START_STR "\x01" +#define DESERIALIZE_KV_DELIM_STR "\x02" +#define DESERIALIZE_PAIR_DELIM_STR "\x03" + +void ItemStackMetadata::serialize(std::ostream &os) const +{ + std::ostringstream os2; + os2 << DESERIALIZE_START; + for (StringMap::const_iterator + it = m_stringvars.begin(); + it != m_stringvars.end(); ++it) { + os2 << it->first << DESERIALIZE_KV_DELIM + << it->second << DESERIALIZE_PAIR_DELIM; + } + os << serializeJsonStringIfNeeded(os2.str()); +} + +void ItemStackMetadata::deSerialize(std::istream &is) +{ + std::string in = deSerializeJsonStringIfNeeded(is); + + m_stringvars.clear(); + + if (!in.empty() && in[0] == DESERIALIZE_START) { + Strfnd fnd(in); + fnd.to(1); + while (!fnd.at_end()) { + std::string name = fnd.next(DESERIALIZE_KV_DELIM_STR); + std::string var = fnd.next(DESERIALIZE_PAIR_DELIM_STR); + m_stringvars[name] = var; + } + } else { + // BACKWARDS COMPATIBILITY + m_stringvars[""] = in; + } +} |
