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