in kll/include/kll_sketch_impl.hpp [904:953]
string<A> kll_sketch<T, C, A>::to_string(bool print_levels, bool print_items) const {
// Using a temporary stream for implementation here does not comply with AllocatorAwareContainer requirements.
// The stream does not support passing an allocator instance, and alternatives are complicated.
std::ostringstream os;
os << "### KLL sketch summary:" << std::endl;
os << " K : " << k_ << std::endl;
os << " min K : " << min_k_ << std::endl;
os << " M : " << (unsigned int) m_ << std::endl;
os << " N : " << n_ << std::endl;
os << " Epsilon : " << std::setprecision(3) << get_normalized_rank_error(false) * 100 << "%" << std::endl;
os << " Epsilon PMF : " << get_normalized_rank_error(true) * 100 << "%" << std::endl;
os << " Empty : " << (is_empty() ? "true" : "false") << std::endl;
os << " Estimation mode: " << (is_estimation_mode() ? "true" : "false") << std::endl;
os << " Levels : " << (unsigned int) num_levels_ << std::endl;
os << " Sorted : " << (is_level_zero_sorted_ ? "true" : "false") << std::endl;
os << " Capacity items : " << items_size_ << std::endl;
os << " Retained items : " << get_num_retained() << std::endl;
if (!is_empty()) {
os << " Min item : " << *min_item_ << std::endl;
os << " Max item : " << *max_item_ << std::endl;
}
os << "### End sketch summary" << std::endl;
if (print_levels) {
os << "### KLL sketch levels:" << std::endl;
os << " index: nominal capacity, actual size" << std::endl;
for (uint8_t i = 0; i < num_levels_; i++) {
os << " " << (unsigned int) i << ": " << kll_helper::level_capacity(k_, num_levels_, i, m_) << ", " << safe_level_size(i) << std::endl;
}
os << "### End sketch levels" << std::endl;
}
if (print_items) {
os << "### KLL sketch data:" << std::endl;
uint8_t level = 0;
while (level < num_levels_) {
const uint32_t from_index = levels_[level];
const uint32_t to_index = levels_[level + 1]; // exclusive
if (from_index < to_index) {
os << " level " << (unsigned int) level << ":" << std::endl;
}
for (uint32_t i = from_index; i < to_index; i++) {
os << " " << items_[i] << std::endl;
}
level++;
}
os << "### End sketch data" << std::endl;
}
return string<A>(os.str().c_str(), allocator_);
}