45 lines
1.2 KiB
C++
45 lines
1.2 KiB
C++
|
|
#include "invocation.hpp"
|
|
|
|
|
|
void InvocationData::serialize(StreamBuffer *sb) const {
|
|
assert(int(size()) < 65536);
|
|
sb->write_uint16(size());
|
|
for (const auto &pair : *this) {
|
|
sb->write_string(pair.first);
|
|
sb->write_string(pair.second);
|
|
}
|
|
}
|
|
|
|
void InvocationData::deserialize(StreamBuffer *sb) {
|
|
clear();
|
|
int size = sb->read_uint16();
|
|
for (int i = 0; i < size; i++) {
|
|
std::string key = sb->read_string();
|
|
std::string val = sb->read_string();
|
|
(*this)[key] = val;
|
|
}
|
|
}
|
|
|
|
Invocation::Invocation() : kind_(KIND_INVALID), actor_(0), place_(0) {}
|
|
|
|
Invocation::Invocation(Kind kind, int64_t actor, int64_t place, const std::string &action, const InvocationData &data)
|
|
: kind_(kind), actor_(actor), place_(place), action_(action), data_(data) {}
|
|
|
|
void Invocation::serialize(StreamBuffer *sb) const {
|
|
sb->write_uint8(kind_);
|
|
sb->write_int64(actor_);
|
|
sb->write_int64(place_);
|
|
sb->write_string(action_);
|
|
data_.serialize(sb);
|
|
}
|
|
|
|
void Invocation::deserialize(StreamBuffer *sb) {
|
|
kind_ = Kind(sb->read_uint8());
|
|
actor_ = sb->read_int64();
|
|
place_ = sb->read_int64();
|
|
action_ = sb->read_string();
|
|
data_.deserialize(sb);
|
|
}
|
|
|