in req/include/req_sketch_impl.hpp [388:419]
void req_sketch<T, C, A>::serialize(std::ostream& os, const SerDe& sd) const {
const uint8_t preamble_ints = is_estimation_mode() ? 4 : 2;
write(os, preamble_ints);
const uint8_t serial_version = SERIAL_VERSION;
write(os, serial_version);
const uint8_t family = FAMILY;
write(os, family);
const bool raw_items = n_ <= req_constants::MIN_K;
const uint8_t flags_byte(
(is_empty() ? 1 << flags::IS_EMPTY : 0)
| (hra_ ? 1 << flags::IS_HIGH_RANK : 0)
| (raw_items ? 1 << flags::RAW_ITEMS : 0)
| (compactors_[0].is_sorted() ? 1 << flags::IS_LEVEL_ZERO_SORTED : 0)
);
write(os, flags_byte);
write(os, k_);
const uint8_t num_levels = is_empty() ? 0 : get_num_levels();
write(os, num_levels);
const uint8_t num_raw_items = raw_items ? static_cast<uint8_t>(n_) : 0;
write(os, num_raw_items);
if (is_empty()) return;
if (is_estimation_mode()) {
write(os, n_);
sd.serialize(os, &*min_item_, 1);
sd.serialize(os, &*max_item_, 1);
}
if (raw_items) {
sd.serialize(os, compactors_[0].begin(), num_raw_items);
} else {
for (const auto& compactor: compactors_) compactor.serialize(os, sd);
}
}