You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datasketches.apache.org by al...@apache.org on 2021/10/12 22:14:29 UTC
[datasketches-cpp] 01/02: no sstream in to_string()
This is an automated email from the ASF dual-hosted git repository.
alsay pushed a commit to branch no_sstream_in_to_string
in repository https://gitbox.apache.org/repos/asf/datasketches-cpp.git
commit 9f421141ceef3cfe726c1fabc0c39cda9dee0ab6
Author: AlexanderSaydakov <Al...@users.noreply.github.com>
AuthorDate: Tue Oct 12 14:18:30 2021 -0700
no sstream in to_string()
---
sampling/include/var_opt_sketch.hpp | 7 +++--
sampling/include/var_opt_sketch_impl.hpp | 48 +++++++++++++++++---------------
sampling/include/var_opt_union.hpp | 1 +
sampling/include/var_opt_union_impl.hpp | 18 ++++++------
4 files changed, 40 insertions(+), 34 deletions(-)
diff --git a/sampling/include/var_opt_sketch.hpp b/sampling/include/var_opt_sketch.hpp
index a949899..80db599 100644
--- a/sampling/include/var_opt_sketch.hpp
+++ b/sampling/include/var_opt_sketch.hpp
@@ -186,6 +186,7 @@ class var_opt_sketch {
* Prints a summary of the sketch.
* @return the summary as a string
*/
+ template<typename ToStr = ostream_based_to_string<T>>
string<A> to_string() const;
/**
@@ -195,6 +196,7 @@ class var_opt_sketch {
* T does not have such an operator defined.
* @return a string with the sketch items
*/
+ template<typename ToStr = ostream_based_to_string<T>>
string<A> items_to_string() const;
class const_iterator;
@@ -202,8 +204,8 @@ class var_opt_sketch {
const_iterator end() const;
private:
- typedef typename std::allocator_traits<A>::template rebind_alloc<double> AllocDouble;
- typedef typename std::allocator_traits<A>::template rebind_alloc<bool> AllocBool;
+ using AllocDouble = typename std::allocator_traits<A>::template rebind_alloc<double>;
+ using AllocBool = typename std::allocator_traits<A>::template rebind_alloc<bool>;
static const uint32_t MIN_LG_ARR_ITEMS = 3;
@@ -270,6 +272,7 @@ class var_opt_sketch {
var_opt_sketch(const var_opt_sketch& other, bool as_sketch, uint64_t adjusted_n);
var_opt_sketch(T* data, double* weights, size_t len, uint32_t k, uint64_t n, uint32_t h_count, uint32_t r_count, double total_wt_r, const A& allocator);
+ template<typename ToStr = ostream_based_to_string<T>>
string<A> items_to_string(bool print_gap) const;
// internal-use-only update
diff --git a/sampling/include/var_opt_sketch_impl.hpp b/sampling/include/var_opt_sketch_impl.hpp
index ce0ac40..b28a25e 100644
--- a/sampling/include/var_opt_sketch_impl.hpp
+++ b/sampling/include/var_opt_sketch_impl.hpp
@@ -21,13 +21,11 @@
#define _VAR_OPT_SKETCH_IMPL_HPP_
#include <memory>
-#include <sstream>
#include <cmath>
#include <random>
#include <algorithm>
#include "var_opt_sketch.hpp"
-#include "serde.hpp"
#include "bounds_binomial_proportions.hpp"
#include "count_zeros.hpp"
#include "memory_operations.hpp"
@@ -730,51 +728,55 @@ void var_opt_sketch<T,S,A>::update(T&& item, double weight) {
}
template<typename T, typename S, typename A>
+template<typename ToStr>
string<A> var_opt_sketch<T,S,A>::to_string() const {
- std::basic_ostringstream<char, std::char_traits<char>, AllocChar<A>> os;
- os << "### VarOpt SUMMARY: " << std::endl;
- os << " k : " << k_ << std::endl;
- os << " h : " << h_ << std::endl;
- os << " r : " << r_ << std::endl;
- os << " weight_r : " << total_wt_r_ << std::endl;
- os << " Current size : " << curr_items_alloc_ << std::endl;
- os << " Resize factor: " << (1 << rf_) << std::endl;
- os << "### END SKETCH SUMMARY" << std::endl;
- return os.str();
+ string<A> str(allocator_);
+ str.append("### VarOpt SUMMARY:\n");
+ str.append(" k : ").append(std::to_string(k_)).append("\n");
+ str.append(" h : ").append(std::to_string(h_)).append("\n");
+ str.append(" r : ").append(std::to_string(r_)).append("\n");
+ str.append(" weight_r : ").append(std::to_string(total_wt_r_)).append("\n");
+ str.append(" Current size : ").append(std::to_string(curr_items_alloc_)).append("\n");
+ str.append(" Resize factor: ").append(std::to_string(1 << rf_)).append("\n");
+ str.append("### END SKETCH SUMMARY\n");
+ return str;
}
template<typename T, typename S, typename A>
+template<typename ToStr>
string<A> var_opt_sketch<T,S,A>::items_to_string() const {
- std::basic_ostringstream<char, std::char_traits<char>, AllocChar<A>> os;
- os << "### Sketch Items" << std::endl;
+ string<A> str(allocator_);
+ str.append("### Sketch Items\n");
int idx = 0;
for (auto record : *this) {
- os << idx << ": " << record.first << "\twt = " << record.second << std::endl;
+ str.append(std::to_string(idx)).append(": ").append(ToStr()(record.first)).append("\twt = ")
+ .append(std::to_string(record.second)).append("\n");
++idx;
}
- return os.str();
+ return str;
}
template<typename T, typename S, typename A>
+template<typename ToStr>
string<A> var_opt_sketch<T,S,A>::items_to_string(bool print_gap) const {
- std::basic_ostringstream<char, std::char_traits<char>, AllocChar<A>> os;
- os << "### Sketch Items" << std::endl;
+ string<A> str(allocator_);
+ str.append("### Sketch Items\n");
const uint32_t array_length = (n_ < k_ ? n_ : k_ + 1);
for (uint32_t i = 0, display_idx = 0; i < array_length; ++i) {
if (i == h_ && print_gap) {
- os << i << ": GAP" << std::endl;
+ str.append(std::to_string(i)).append(": GAP\n");
++display_idx;
} else {
- os << i << ": " << data_[i] << "\twt = ";
+ str.append(std::to_string(i)).append(": ").append(ToStr()(data_[i])).append("\twt = ");
if (weights_[i] == -1.0) {
- os << get_tau() << "\t(-1.0)" << std::endl;
+ str.append(std::to_string(get_tau())).append("\t(-1.0)\n");
} else {
- os << weights_[i] << std::endl;
+ str.append(std::to_string(weights_[i])).append("\n");
}
++display_idx;
}
}
- return os.str();
+ return str;
}
template<typename T, typename S, typename A>
diff --git a/sampling/include/var_opt_union.hpp b/sampling/include/var_opt_union.hpp
index d0e22ed..db3848c 100644
--- a/sampling/include/var_opt_union.hpp
+++ b/sampling/include/var_opt_union.hpp
@@ -134,6 +134,7 @@ public:
* Prints a summary of the union as a string.
* @return the summary as a string
*/
+ template<typename ToStr = ostream_based_to_string<T>>
string<A> to_string() const;
diff --git a/sampling/include/var_opt_union_impl.hpp b/sampling/include/var_opt_union_impl.hpp
index fe1ee49..bee25f4 100644
--- a/sampling/include/var_opt_union_impl.hpp
+++ b/sampling/include/var_opt_union_impl.hpp
@@ -23,7 +23,6 @@
#include "var_opt_union.hpp"
#include <cmath>
-#include <sstream>
namespace datasketches {
@@ -294,15 +293,16 @@ void var_opt_union<T,S,A>::reset() {
}
template<typename T, typename S, typename A>
+template<typename ToStr>
string<A> var_opt_union<T,S,A>::to_string() const {
- std::basic_ostringstream<char, std::char_traits<char>, AllocChar<A>> os;
- os << "### VarOpt Union SUMMARY: " << std::endl;
- os << " . n : " << n_ << std::endl;
- os << " Max k : " << max_k_ << std::endl;
- os << " Gadget Summary: " << std::endl;
- os << gadget_.to_string();
- os << "### END VarOpt Union SUMMARY: " << std::endl;
- return os.str();
+ string<A> str(gadget_.allocator_);
+ str.append("### VarOpt Union SUMMARY:\n");
+ str.append(" n : ").append(std::to_string(n_)).append("\n");
+ str.append(" Max k : ").append(std::to_string(max_k_)).append("\n");
+ str.append(" Gadget Summary:\n");
+ str.append(gadget_.to_string());
+ str.append("### END VarOpt Union SUMMARY\n");
+ return str;
}
template<typename T, typename S, typename A>
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org