gossip: Move code from gms/gossip_digest_ack2.hh to source file

This commit is contained in:
Asias He
2015-07-30 16:32:41 +08:00
parent 3ad6d1309f
commit 175ccfe49d
2 changed files with 38 additions and 32 deletions

View File

@@ -32,4 +32,39 @@ std::ostream& operator<<(std::ostream& os, const gossip_digest_ack2& ack2) {
return os << "}";
}
void gossip_digest_ack2::serialize(bytes::iterator& out) const {
// 1) Map size
serialize_int32(out, int32_t(_map.size()));
// 2) Map contents
for (auto& entry : _map) {
const inet_address& ep = entry.first;
const endpoint_state& st = entry.second;
ep.serialize(out);
st.serialize(out);
}
}
gossip_digest_ack2 gossip_digest_ack2::deserialize(bytes_view& v) {
// 1) Map size
int32_t map_size = read_simple<int32_t>(v);
// 2) Map contents
std::map<inet_address, endpoint_state> _map;
for (int32_t i = 0; i < map_size; ++i) {
inet_address ep = inet_address::deserialize(v);
endpoint_state st = endpoint_state::deserialize(v);
_map.emplace(std::move(ep), std::move(st));
}
return gossip_digest_ack2(std::move(_map));
}
size_t gossip_digest_ack2::serialized_size() const {
size_t size = serialize_int32_size;
for (auto& entry : _map) {
const inet_address& ep = entry.first;
const endpoint_state& st = entry.second;
size += ep.serialized_size() + st.serialized_size();
}
return size;
}
} // namespace gms

View File

@@ -49,40 +49,11 @@ public:
}
// The following replaces GossipDigestAck2Serializer from the Java code
void serialize(bytes::iterator& out) const {
// 1) Map size
serialize_int32(out, int32_t(_map.size()));
// 2) Map contents
for (auto& entry : _map) {
const inet_address& ep = entry.first;
const endpoint_state& st = entry.second;
ep.serialize(out);
st.serialize(out);
}
}
void serialize(bytes::iterator& out) const;
static gossip_digest_ack2 deserialize(bytes_view& v) {
// 1) Map size
int32_t map_size = read_simple<int32_t>(v);
// 2) Map contents
std::map<inet_address, endpoint_state> _map;
for (int32_t i = 0; i < map_size; ++i) {
inet_address ep = inet_address::deserialize(v);
endpoint_state st = endpoint_state::deserialize(v);
_map.emplace(std::move(ep), std::move(st));
}
return gossip_digest_ack2(std::move(_map));
}
static gossip_digest_ack2 deserialize(bytes_view& v);
size_t serialized_size() const {
size_t size = serialize_int32_size;
for (auto& entry : _map) {
const inet_address& ep = entry.first;
const endpoint_state& st = entry.second;
size += ep.serialized_size() + st.serialized_size();
}
return size;
}
size_t serialized_size() const;
friend std::ostream& operator<<(std::ostream& os, const gossip_digest_ack2& ack2);
};