mirror of
https://github.com/luanti-org/luanti.git
synced 2025-08-11 17:51:04 +00:00
Add ItemStack key-value meta storage
This commit is contained in:
parent
c2e7b1f579
commit
f2aa2c6a98
21 changed files with 459 additions and 123 deletions
43
src/itemstackmetadata.cpp
Normal file
43
src/itemstackmetadata.cpp
Normal file
|
@ -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;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue