datasketches 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/NOTICE +1 -1
  4. data/README.md +0 -2
  5. data/ext/datasketches/cpc_wrapper.cpp +2 -2
  6. data/ext/datasketches/kll_wrapper.cpp +0 -10
  7. data/lib/datasketches/version.rb +1 -1
  8. data/lib/datasketches.rb +1 -1
  9. data/vendor/datasketches-cpp/CMakeLists.txt +1 -0
  10. data/vendor/datasketches-cpp/CODE_OF_CONDUCT.md +3 -0
  11. data/vendor/datasketches-cpp/CONTRIBUTING.md +50 -0
  12. data/vendor/datasketches-cpp/Doxyfile +2827 -0
  13. data/vendor/datasketches-cpp/LICENSE +0 -76
  14. data/vendor/datasketches-cpp/NOTICE +1 -1
  15. data/vendor/datasketches-cpp/README.md +1 -3
  16. data/vendor/datasketches-cpp/common/CMakeLists.txt +12 -11
  17. data/vendor/datasketches-cpp/common/include/common_defs.hpp +11 -8
  18. data/vendor/datasketches-cpp/common/include/count_zeros.hpp +0 -2
  19. data/vendor/datasketches-cpp/common/include/kolmogorov_smirnov.hpp +9 -6
  20. data/vendor/datasketches-cpp/common/include/optional.hpp +148 -0
  21. data/vendor/datasketches-cpp/common/include/quantiles_sorted_view.hpp +95 -2
  22. data/vendor/datasketches-cpp/common/include/quantiles_sorted_view_impl.hpp +1 -1
  23. data/vendor/datasketches-cpp/common/include/serde.hpp +69 -20
  24. data/vendor/datasketches-cpp/common/test/CMakeLists.txt +1 -1
  25. data/vendor/datasketches-cpp/common/test/optional_test.cpp +85 -0
  26. data/vendor/datasketches-cpp/common/test/test_allocator.hpp +14 -14
  27. data/vendor/datasketches-cpp/count/include/count_min.hpp +132 -78
  28. data/vendor/datasketches-cpp/count/include/count_min_impl.hpp +132 -152
  29. data/vendor/datasketches-cpp/count/test/CMakeLists.txt +11 -12
  30. data/vendor/datasketches-cpp/count/test/count_min_allocation_test.cpp +61 -61
  31. data/vendor/datasketches-cpp/count/test/count_min_test.cpp +175 -178
  32. data/vendor/datasketches-cpp/cpc/include/cpc_common.hpp +14 -20
  33. data/vendor/datasketches-cpp/cpc/include/cpc_compressor.hpp +7 -4
  34. data/vendor/datasketches-cpp/cpc/include/cpc_compressor_impl.hpp +17 -17
  35. data/vendor/datasketches-cpp/cpc/include/cpc_sketch.hpp +40 -40
  36. data/vendor/datasketches-cpp/cpc/include/cpc_sketch_impl.hpp +13 -10
  37. data/vendor/datasketches-cpp/cpc/include/cpc_union.hpp +35 -11
  38. data/vendor/datasketches-cpp/cpc/include/cpc_union_impl.hpp +8 -8
  39. data/vendor/datasketches-cpp/cpc/include/u32_table.hpp +3 -2
  40. data/vendor/datasketches-cpp/cpc/include/u32_table_impl.hpp +5 -5
  41. data/vendor/datasketches-cpp/cpc/test/CMakeLists.txt +20 -7
  42. data/vendor/datasketches-cpp/cpc/test/cpc_sketch_deserialize_from_java_test.cpp +60 -0
  43. data/vendor/datasketches-cpp/{python/include/py_object_lt.hpp → cpc/test/cpc_sketch_serialize_for_java.cpp} +15 -14
  44. data/vendor/datasketches-cpp/cpc/test/cpc_sketch_test.cpp +4 -29
  45. data/vendor/datasketches-cpp/cpc/test/cpc_union_test.cpp +4 -4
  46. data/vendor/datasketches-cpp/density/include/density_sketch.hpp +29 -9
  47. data/vendor/datasketches-cpp/density/include/density_sketch_impl.hpp +1 -1
  48. data/vendor/datasketches-cpp/density/test/CMakeLists.txt +0 -1
  49. data/vendor/datasketches-cpp/fi/include/frequent_items_sketch.hpp +21 -9
  50. data/vendor/datasketches-cpp/fi/include/frequent_items_sketch_impl.hpp +6 -4
  51. data/vendor/datasketches-cpp/fi/test/CMakeLists.txt +14 -1
  52. data/vendor/datasketches-cpp/fi/test/frequent_items_sketch_deserialize_from_java_test.cpp +95 -0
  53. data/vendor/datasketches-cpp/fi/test/frequent_items_sketch_serialize_for_java.cpp +83 -0
  54. data/vendor/datasketches-cpp/fi/test/frequent_items_sketch_test.cpp +3 -42
  55. data/vendor/datasketches-cpp/hll/include/CouponList-internal.hpp +2 -2
  56. data/vendor/datasketches-cpp/hll/include/CouponList.hpp +3 -1
  57. data/vendor/datasketches-cpp/hll/include/HllArray-internal.hpp +3 -3
  58. data/vendor/datasketches-cpp/hll/include/HllArray.hpp +5 -3
  59. data/vendor/datasketches-cpp/hll/include/HllSketch-internal.hpp +4 -4
  60. data/vendor/datasketches-cpp/hll/include/HllSketchImpl.hpp +3 -1
  61. data/vendor/datasketches-cpp/hll/include/HllUtil.hpp +0 -12
  62. data/vendor/datasketches-cpp/hll/include/hll.hpp +70 -57
  63. data/vendor/datasketches-cpp/hll/test/CMakeLists.txt +14 -1
  64. data/vendor/datasketches-cpp/hll/test/ToFromByteArrayTest.cpp +0 -68
  65. data/vendor/datasketches-cpp/hll/test/hll_sketch_deserialize_from_java_test.cpp +69 -0
  66. data/vendor/datasketches-cpp/hll/test/hll_sketch_serialize_for_java.cpp +52 -0
  67. data/vendor/datasketches-cpp/kll/include/kll_helper_impl.hpp +2 -2
  68. data/vendor/datasketches-cpp/kll/include/kll_sketch.hpp +71 -50
  69. data/vendor/datasketches-cpp/kll/include/kll_sketch_impl.hpp +59 -130
  70. data/vendor/datasketches-cpp/kll/test/CMakeLists.txt +14 -1
  71. data/vendor/datasketches-cpp/kll/test/kll_sketch_deserialize_from_java_test.cpp +103 -0
  72. data/vendor/datasketches-cpp/kll/test/kll_sketch_serialize_for_java.cpp +62 -0
  73. data/vendor/datasketches-cpp/kll/test/kll_sketch_test.cpp +3 -38
  74. data/vendor/datasketches-cpp/quantiles/include/quantiles_sketch.hpp +68 -51
  75. data/vendor/datasketches-cpp/quantiles/include/quantiles_sketch_impl.hpp +62 -132
  76. data/vendor/datasketches-cpp/quantiles/test/CMakeLists.txt +14 -1
  77. data/vendor/datasketches-cpp/quantiles/test/quantiles_sketch_deserialize_from_java_test.cpp +84 -0
  78. data/vendor/datasketches-cpp/quantiles/test/quantiles_sketch_serialize_for_java.cpp +52 -0
  79. data/vendor/datasketches-cpp/quantiles/test/quantiles_sketch_test.cpp +14 -38
  80. data/vendor/datasketches-cpp/req/include/req_common.hpp +7 -3
  81. data/vendor/datasketches-cpp/req/include/req_compactor_impl.hpp +2 -2
  82. data/vendor/datasketches-cpp/req/include/req_sketch.hpp +97 -23
  83. data/vendor/datasketches-cpp/req/include/req_sketch_impl.hpp +48 -109
  84. data/vendor/datasketches-cpp/req/test/CMakeLists.txt +14 -1
  85. data/vendor/datasketches-cpp/req/test/req_sketch_deserialize_from_java_test.cpp +55 -0
  86. data/vendor/datasketches-cpp/{tuple/include/array_of_doubles_intersection_impl.hpp → req/test/req_sketch_serialize_for_java.cpp} +12 -7
  87. data/vendor/datasketches-cpp/req/test/req_sketch_test.cpp +3 -89
  88. data/vendor/datasketches-cpp/sampling/CMakeLists.txt +4 -0
  89. data/vendor/datasketches-cpp/sampling/include/ebpps_sample.hpp +210 -0
  90. data/vendor/datasketches-cpp/sampling/include/ebpps_sample_impl.hpp +535 -0
  91. data/vendor/datasketches-cpp/sampling/include/ebpps_sketch.hpp +281 -0
  92. data/vendor/datasketches-cpp/sampling/include/ebpps_sketch_impl.hpp +531 -0
  93. data/vendor/datasketches-cpp/sampling/include/var_opt_sketch.hpp +69 -26
  94. data/vendor/datasketches-cpp/sampling/include/var_opt_sketch_impl.hpp +3 -3
  95. data/vendor/datasketches-cpp/sampling/include/var_opt_union.hpp +10 -11
  96. data/vendor/datasketches-cpp/sampling/include/var_opt_union_impl.hpp +4 -4
  97. data/vendor/datasketches-cpp/sampling/test/CMakeLists.txt +55 -8
  98. data/vendor/datasketches-cpp/sampling/test/ebpps_allocation_test.cpp +96 -0
  99. data/vendor/datasketches-cpp/sampling/test/ebpps_sample_test.cpp +137 -0
  100. data/vendor/datasketches-cpp/sampling/test/ebpps_sketch_test.cpp +266 -0
  101. data/vendor/datasketches-cpp/sampling/test/var_opt_sketch_deserialize_from_java_test.cpp +81 -0
  102. data/vendor/datasketches-cpp/sampling/test/var_opt_sketch_serialize_for_java.cpp +54 -0
  103. data/vendor/datasketches-cpp/sampling/test/var_opt_sketch_test.cpp +0 -37
  104. data/vendor/datasketches-cpp/sampling/test/var_opt_union_deserialize_from_java_test.cpp +50 -0
  105. data/vendor/datasketches-cpp/sampling/test/var_opt_union_serialize_for_java.cpp +56 -0
  106. data/vendor/datasketches-cpp/sampling/test/var_opt_union_test.cpp +0 -18
  107. data/vendor/datasketches-cpp/theta/include/bit_packing.hpp +2608 -2608
  108. data/vendor/datasketches-cpp/theta/include/bounds_on_ratios_in_sampled_sets.hpp +1 -0
  109. data/vendor/datasketches-cpp/theta/include/bounds_on_ratios_in_theta_sketched_sets.hpp +7 -6
  110. data/vendor/datasketches-cpp/theta/include/theta_a_not_b.hpp +20 -5
  111. data/vendor/datasketches-cpp/theta/include/theta_constants.hpp +10 -4
  112. data/vendor/datasketches-cpp/theta/include/theta_helpers.hpp +1 -1
  113. data/vendor/datasketches-cpp/theta/include/theta_intersection.hpp +13 -5
  114. data/vendor/datasketches-cpp/theta/include/theta_intersection_base_impl.hpp +5 -5
  115. data/vendor/datasketches-cpp/theta/include/theta_intersection_impl.hpp +3 -3
  116. data/vendor/datasketches-cpp/theta/include/theta_jaccard_similarity.hpp +2 -1
  117. data/vendor/datasketches-cpp/theta/include/theta_jaccard_similarity_base.hpp +1 -0
  118. data/vendor/datasketches-cpp/theta/include/theta_set_difference_base_impl.hpp +1 -1
  119. data/vendor/datasketches-cpp/theta/include/theta_sketch.hpp +126 -27
  120. data/vendor/datasketches-cpp/theta/include/theta_sketch_impl.hpp +8 -8
  121. data/vendor/datasketches-cpp/theta/include/theta_union.hpp +17 -10
  122. data/vendor/datasketches-cpp/theta/include/theta_union_base_impl.hpp +1 -1
  123. data/vendor/datasketches-cpp/theta/include/theta_union_impl.hpp +3 -3
  124. data/vendor/datasketches-cpp/theta/include/theta_update_sketch_base.hpp +5 -2
  125. data/vendor/datasketches-cpp/theta/include/theta_update_sketch_base_impl.hpp +11 -1
  126. data/vendor/datasketches-cpp/theta/test/CMakeLists.txt +14 -1
  127. data/vendor/datasketches-cpp/theta/test/theta_sketch_deserialize_from_java_test.cpp +57 -0
  128. data/vendor/datasketches-cpp/theta/test/theta_sketch_serialize_for_java.cpp +61 -0
  129. data/vendor/datasketches-cpp/theta/test/theta_sketch_test.cpp +0 -188
  130. data/vendor/datasketches-cpp/tuple/CMakeLists.txt +8 -7
  131. data/vendor/datasketches-cpp/tuple/include/array_of_doubles_sketch.hpp +19 -144
  132. data/vendor/datasketches-cpp/tuple/include/{array_of_doubles_a_not_b.hpp → array_tuple_a_not_b.hpp} +24 -16
  133. data/vendor/datasketches-cpp/tuple/include/{array_of_doubles_a_not_b_impl.hpp → array_tuple_a_not_b_impl.hpp} +4 -4
  134. data/vendor/datasketches-cpp/tuple/include/array_tuple_intersection.hpp +65 -0
  135. data/vendor/datasketches-cpp/{python/include/py_object_ostream.hpp → tuple/include/array_tuple_intersection_impl.hpp} +7 -24
  136. data/vendor/datasketches-cpp/tuple/include/array_tuple_sketch.hpp +237 -0
  137. data/vendor/datasketches-cpp/tuple/include/{array_of_doubles_sketch_impl.hpp → array_tuple_sketch_impl.hpp} +40 -41
  138. data/vendor/datasketches-cpp/tuple/include/array_tuple_union.hpp +81 -0
  139. data/vendor/datasketches-cpp/tuple/include/array_tuple_union_impl.hpp +43 -0
  140. data/vendor/datasketches-cpp/tuple/include/tuple_a_not_b.hpp +11 -2
  141. data/vendor/datasketches-cpp/tuple/include/tuple_intersection.hpp +17 -10
  142. data/vendor/datasketches-cpp/tuple/include/tuple_jaccard_similarity.hpp +2 -1
  143. data/vendor/datasketches-cpp/tuple/include/tuple_sketch.hpp +95 -32
  144. data/vendor/datasketches-cpp/tuple/include/tuple_union.hpp +19 -11
  145. data/vendor/datasketches-cpp/tuple/test/CMakeLists.txt +16 -1
  146. data/vendor/datasketches-cpp/tuple/test/aod_sketch_deserialize_from_java_test.cpp +76 -0
  147. data/vendor/datasketches-cpp/tuple/test/aod_sketch_serialize_for_java.cpp +62 -0
  148. data/vendor/datasketches-cpp/tuple/test/array_of_doubles_sketch_test.cpp +5 -129
  149. data/vendor/datasketches-cpp/tuple/test/engagement_test.cpp +85 -89
  150. data/vendor/datasketches-cpp/tuple/test/tuple_jaccard_similarity_test.cpp +3 -1
  151. data/vendor/datasketches-cpp/tuple/test/tuple_sketch_deserialize_from_java_test.cpp +47 -0
  152. data/vendor/datasketches-cpp/tuple/test/tuple_sketch_serialize_for_java.cpp +38 -0
  153. data/vendor/datasketches-cpp/tuple/test/tuple_sketch_test.cpp +1 -1
  154. data/vendor/datasketches-cpp/version.cfg.in +1 -1
  155. metadata +47 -93
  156. data/vendor/datasketches-cpp/MANIFEST.in +0 -39
  157. data/vendor/datasketches-cpp/fi/test/items_sketch_string_from_java.sk +0 -0
  158. data/vendor/datasketches-cpp/fi/test/items_sketch_string_utf8_from_java.sk +0 -0
  159. data/vendor/datasketches-cpp/fi/test/longs_sketch_from_java.sk +0 -0
  160. data/vendor/datasketches-cpp/hll/test/array6_from_java.sk +0 -0
  161. data/vendor/datasketches-cpp/hll/test/compact_array4_from_java.sk +0 -0
  162. data/vendor/datasketches-cpp/hll/test/compact_set_from_java.sk +0 -0
  163. data/vendor/datasketches-cpp/hll/test/list_from_java.sk +0 -0
  164. data/vendor/datasketches-cpp/hll/test/updatable_array4_from_java.sk +0 -0
  165. data/vendor/datasketches-cpp/hll/test/updatable_set_from_java.sk +0 -0
  166. data/vendor/datasketches-cpp/kll/test/kll_sketch_from_java.sk +0 -0
  167. data/vendor/datasketches-cpp/pyproject.toml +0 -23
  168. data/vendor/datasketches-cpp/python/CMakeLists.txt +0 -87
  169. data/vendor/datasketches-cpp/python/README.md +0 -85
  170. data/vendor/datasketches-cpp/python/datasketches/DensityWrapper.py +0 -87
  171. data/vendor/datasketches-cpp/python/datasketches/KernelFunction.py +0 -35
  172. data/vendor/datasketches-cpp/python/datasketches/PySerDe.py +0 -110
  173. data/vendor/datasketches-cpp/python/datasketches/TuplePolicy.py +0 -77
  174. data/vendor/datasketches-cpp/python/datasketches/TupleWrapper.py +0 -205
  175. data/vendor/datasketches-cpp/python/datasketches/__init__.py +0 -38
  176. data/vendor/datasketches-cpp/python/include/kernel_function.hpp +0 -98
  177. data/vendor/datasketches-cpp/python/include/py_serde.hpp +0 -113
  178. data/vendor/datasketches-cpp/python/include/quantile_conditional.hpp +0 -104
  179. data/vendor/datasketches-cpp/python/include/tuple_policy.hpp +0 -136
  180. data/vendor/datasketches-cpp/python/jupyter/CPCSketch.ipynb +0 -345
  181. data/vendor/datasketches-cpp/python/jupyter/FrequentItemsSketch.ipynb +0 -354
  182. data/vendor/datasketches-cpp/python/jupyter/HLLSketch.ipynb +0 -346
  183. data/vendor/datasketches-cpp/python/jupyter/KLLSketch.ipynb +0 -463
  184. data/vendor/datasketches-cpp/python/jupyter/ThetaSketchNotebook.ipynb +0 -403
  185. data/vendor/datasketches-cpp/python/pybind11Path.cmd +0 -21
  186. data/vendor/datasketches-cpp/python/src/__init__.py +0 -18
  187. data/vendor/datasketches-cpp/python/src/count_wrapper.cpp +0 -101
  188. data/vendor/datasketches-cpp/python/src/cpc_wrapper.cpp +0 -76
  189. data/vendor/datasketches-cpp/python/src/datasketches.cpp +0 -58
  190. data/vendor/datasketches-cpp/python/src/density_wrapper.cpp +0 -95
  191. data/vendor/datasketches-cpp/python/src/fi_wrapper.cpp +0 -182
  192. data/vendor/datasketches-cpp/python/src/hll_wrapper.cpp +0 -126
  193. data/vendor/datasketches-cpp/python/src/kll_wrapper.cpp +0 -158
  194. data/vendor/datasketches-cpp/python/src/ks_wrapper.cpp +0 -68
  195. data/vendor/datasketches-cpp/python/src/py_serde.cpp +0 -112
  196. data/vendor/datasketches-cpp/python/src/quantiles_wrapper.cpp +0 -155
  197. data/vendor/datasketches-cpp/python/src/req_wrapper.cpp +0 -154
  198. data/vendor/datasketches-cpp/python/src/theta_wrapper.cpp +0 -166
  199. data/vendor/datasketches-cpp/python/src/tuple_wrapper.cpp +0 -215
  200. data/vendor/datasketches-cpp/python/src/vector_of_kll.cpp +0 -490
  201. data/vendor/datasketches-cpp/python/src/vo_wrapper.cpp +0 -173
  202. data/vendor/datasketches-cpp/python/tests/__init__.py +0 -16
  203. data/vendor/datasketches-cpp/python/tests/count_min_test.py +0 -86
  204. data/vendor/datasketches-cpp/python/tests/cpc_test.py +0 -64
  205. data/vendor/datasketches-cpp/python/tests/density_test.py +0 -93
  206. data/vendor/datasketches-cpp/python/tests/fi_test.py +0 -149
  207. data/vendor/datasketches-cpp/python/tests/hll_test.py +0 -129
  208. data/vendor/datasketches-cpp/python/tests/kll_test.py +0 -159
  209. data/vendor/datasketches-cpp/python/tests/quantiles_test.py +0 -160
  210. data/vendor/datasketches-cpp/python/tests/req_test.py +0 -159
  211. data/vendor/datasketches-cpp/python/tests/theta_test.py +0 -148
  212. data/vendor/datasketches-cpp/python/tests/tuple_test.py +0 -206
  213. data/vendor/datasketches-cpp/python/tests/vector_of_kll_test.py +0 -148
  214. data/vendor/datasketches-cpp/python/tests/vo_test.py +0 -132
  215. data/vendor/datasketches-cpp/req/test/req_float_empty_from_java.sk +0 -0
  216. data/vendor/datasketches-cpp/req/test/req_float_estimation_from_java.sk +0 -0
  217. data/vendor/datasketches-cpp/req/test/req_float_exact_from_java.sk +0 -0
  218. data/vendor/datasketches-cpp/req/test/req_float_raw_items_from_java.sk +0 -0
  219. data/vendor/datasketches-cpp/req/test/req_float_single_item_from_java.sk +0 -0
  220. data/vendor/datasketches-cpp/sampling/test/binaries_from_java.txt +0 -67
  221. data/vendor/datasketches-cpp/sampling/test/varopt_sketch_long_sampling.sk +0 -0
  222. data/vendor/datasketches-cpp/sampling/test/varopt_sketch_string_exact.sk +0 -0
  223. data/vendor/datasketches-cpp/sampling/test/varopt_union_double_sampling.sk +0 -0
  224. data/vendor/datasketches-cpp/setup.py +0 -110
  225. data/vendor/datasketches-cpp/theta/test/theta_compact_empty_from_java.sk +0 -0
  226. data/vendor/datasketches-cpp/theta/test/theta_compact_estimation_from_java.sk +0 -0
  227. data/vendor/datasketches-cpp/theta/test/theta_compact_exact_from_java.sk +0 -0
  228. data/vendor/datasketches-cpp/theta/test/theta_compact_single_item_from_java.sk +0 -0
  229. data/vendor/datasketches-cpp/tox.ini +0 -26
  230. data/vendor/datasketches-cpp/tuple/include/array_of_doubles_intersection.hpp +0 -52
  231. data/vendor/datasketches-cpp/tuple/include/array_of_doubles_union.hpp +0 -81
  232. data/vendor/datasketches-cpp/tuple/include/array_of_doubles_union_impl.hpp +0 -43
  233. data/vendor/datasketches-cpp/tuple/test/aod_1_compact_empty_from_java.sk +0 -1
  234. data/vendor/datasketches-cpp/tuple/test/aod_1_compact_estimation_from_java.sk +0 -0
  235. data/vendor/datasketches-cpp/tuple/test/aod_1_compact_non_empty_no_entries_from_java.sk +0 -0
  236. data/vendor/datasketches-cpp/tuple/test/aod_2_compact_exact_from_java.sk +0 -0
  237. data/vendor/datasketches-cpp/tuple/test/aod_3_compact_empty_from_java.sk +0 -1
@@ -30,23 +30,56 @@
30
30
 
31
31
  namespace datasketches {
32
32
 
33
- // serialize and deserialize
33
+ /// Interface for serializing and deserializing items
34
34
  template<typename T, typename Enable = void> struct serde {
35
- // stream serialization
35
+ /**
36
+ * Stream serialization
37
+ * @param os output stream
38
+ * @param items pointer to array of items
39
+ * @param num number of items
40
+ */
36
41
  void serialize(std::ostream& os, const T* items, unsigned num) const;
37
- void deserialize(std::istream& is, T* items, unsigned num) const; // items allocated but not initialized
38
42
 
39
- // raw bytes serialization
40
- size_t size_of_item(const T& item) const;
43
+ /**
44
+ * Stream deserialization
45
+ * @param is input stream
46
+ * @param items pointer to array of items (items in the array are allocated but not initialized)
47
+ * @param num number of items
48
+ */
49
+ void deserialize(std::istream& is, T* items, unsigned num) const;
50
+
51
+ /**
52
+ * Raw bytes serialization
53
+ * @param ptr pointer to output buffer
54
+ * @param capacity size of the buffer in bytes
55
+ * @param items pointer to array of items
56
+ * @param num number of items
57
+ */
41
58
  size_t serialize(void* ptr, size_t capacity, const T* items, unsigned num) const;
42
- size_t deserialize(const void* ptr, size_t capacity, T* items, unsigned num) const; // items allocated but not initialized
59
+
60
+ /**
61
+ * Raw bytes deserialization
62
+ * @param ptr pointer to input buffer
63
+ * @param capacity size of the buffer in bytes
64
+ * @param items pointer to array of items (items in the array are allocated but not initialized)
65
+ * @param num number of items
66
+ */
67
+ size_t deserialize(const void* ptr, size_t capacity, T* items, unsigned num) const;
68
+
69
+ /**
70
+ * Size of the given item
71
+ * @param item to be sized
72
+ * @return size of the given item in bytes
73
+ */
74
+ size_t size_of_item(const T& item) const;
43
75
  };
44
76
 
45
- // serde for all fixed-size arithmetic types (int and float of different sizes)
46
- // in particular, kll_sketch<int64_t> should produce sketches binary-compatible
47
- // with LongsSketch and ItemsSketch<Long> with ArrayOfLongsSerDe in Java
77
+ /// serde for all fixed-size arithmetic types (int and float of different sizes).
78
+ /// in particular, kll_sketch<int64_t> should produce sketches binary-compatible
79
+ /// with LongsSketch and ItemsSketch<Long> with ArrayOfLongsSerDe in Java
48
80
  template<typename T>
49
81
  struct serde<T, typename std::enable_if<std::is_arithmetic<T>::value>::type> {
82
+ /// @copydoc serde::serialize
50
83
  void serialize(std::ostream& os, const T* items, unsigned num) const {
51
84
  bool failure = false;
52
85
  try {
@@ -58,6 +91,7 @@ struct serde<T, typename std::enable_if<std::is_arithmetic<T>::value>::type> {
58
91
  throw std::runtime_error("error writing to std::ostream with " + std::to_string(num) + " items");
59
92
  }
60
93
  }
94
+
61
95
  void deserialize(std::istream& is, T* items, unsigned num) const {
62
96
  bool failure = false;
63
97
  try {
@@ -70,30 +104,37 @@ struct serde<T, typename std::enable_if<std::is_arithmetic<T>::value>::type> {
70
104
  }
71
105
  }
72
106
 
73
- size_t size_of_item(const T&) const {
74
- return sizeof(T);
75
- }
107
+ /// @copydoc serde::serialize(void*,size_t,const T*,unsigned) const
76
108
  size_t serialize(void* ptr, size_t capacity, const T* items, unsigned num) const {
77
109
  const size_t bytes_written = sizeof(T) * num;
78
110
  check_memory_size(bytes_written, capacity);
79
111
  memcpy(ptr, items, bytes_written);
80
112
  return bytes_written;
81
113
  }
114
+
115
+ /// @copydoc serde::deserialize(const void*,size_t,T*,unsigned) const
82
116
  size_t deserialize(const void* ptr, size_t capacity, T* items, unsigned num) const {
83
117
  const size_t bytes_read = sizeof(T) * num;
84
118
  check_memory_size(bytes_read, capacity);
85
119
  memcpy(items, ptr, bytes_read);
86
120
  return bytes_read;
87
121
  }
122
+
123
+ /// @copydoc serde::size_of_item
124
+ size_t size_of_item(const T& item) const {
125
+ unused(item);
126
+ return sizeof(T);
127
+ }
88
128
  };
89
129
 
90
- // serde for std::string items
91
- // This should produce sketches binary-compatible with
92
- // ItemsSketch<String> with ArrayOfStringsSerDe in Java.
93
- // The length of each string is stored as a 32-bit integer (historically),
94
- // which may be too wasteful. Treat this as an example.
130
+ /// serde for std::string items.
131
+ /// This should produce sketches binary-compatible with
132
+ /// ItemsSketch<String> with ArrayOfStringsSerDe in Java.
133
+ /// The length of each string is stored as a 32-bit integer (historically),
134
+ /// which may be too wasteful. Treat this as an example.
95
135
  template<>
96
136
  struct serde<std::string> {
137
+ /// @copydoc serde::serialize
97
138
  void serialize(std::ostream& os, const std::string* items, unsigned num) const {
98
139
  unsigned i = 0;
99
140
  bool failure = false;
@@ -110,6 +151,8 @@ struct serde<std::string> {
110
151
  throw std::runtime_error("error writing to std::ostream at item " + std::to_string(i));
111
152
  }
112
153
  }
154
+
155
+ /// @copydoc serde::deserialize
113
156
  void deserialize(std::istream& is, std::string* items, unsigned num) const {
114
157
  unsigned i = 0;
115
158
  bool failure = false;
@@ -137,9 +180,8 @@ struct serde<std::string> {
137
180
  throw std::runtime_error("error reading from std::istream at item " + std::to_string(i));
138
181
  }
139
182
  }
140
- size_t size_of_item(const std::string& item) const {
141
- return sizeof(uint32_t) + item.size();
142
- }
183
+
184
+ /// @copydoc serde::serialize(void*,size_t,const T*,unsigned) const
143
185
  size_t serialize(void* ptr, size_t capacity, const std::string* items, unsigned num) const {
144
186
  size_t bytes_written = 0;
145
187
  for (unsigned i = 0; i < num; ++i) {
@@ -154,6 +196,8 @@ struct serde<std::string> {
154
196
  }
155
197
  return bytes_written;
156
198
  }
199
+
200
+ /// @copydoc serde::deserialize(const void*,size_t,T*,unsigned) const
157
201
  size_t deserialize(const void* ptr, size_t capacity, std::string* items, unsigned num) const {
158
202
  size_t bytes_read = 0;
159
203
  unsigned i = 0;
@@ -189,6 +233,11 @@ struct serde<std::string> {
189
233
 
190
234
  return bytes_read;
191
235
  }
236
+
237
+ /// @copydoc serde::size_of_item
238
+ size_t size_of_item(const std::string& item) const {
239
+ return sizeof(uint32_t) + item.size();
240
+ }
192
241
  };
193
242
 
194
243
  } /* namespace datasketches */
@@ -34,7 +34,6 @@ FetchContent_MakeAvailable(Catch2)
34
34
  target_link_libraries(common_test_lib PUBLIC Catch2::Catch2)
35
35
 
36
36
  set_target_properties(common_test_lib PROPERTIES
37
- CXX_STANDARD 11
38
37
  CXX_STANDARD_REQUIRED YES
39
38
  )
40
39
 
@@ -69,6 +68,7 @@ add_test(
69
68
  target_sources(common_test
70
69
  PRIVATE
71
70
  quantiles_sorted_view_test.cpp
71
+ optional_test.cpp
72
72
  )
73
73
 
74
74
  # now the integration test part
@@ -0,0 +1,85 @@
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one
3
+ * or more contributor license agreements. See the NOTICE file
4
+ * distributed with this work for additional information
5
+ * regarding copyright ownership. The ASF licenses this file
6
+ * to you under the Apache License, Version 2.0 (the
7
+ * "License"); you may not use this file except in compliance
8
+ * with the License. You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing,
13
+ * software distributed under the License is distributed on an
14
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ * KIND, either express or implied. See the License for the
16
+ * specific language governing permissions and limitations
17
+ * under the License.
18
+ */
19
+
20
+ #include <catch2/catch.hpp>
21
+
22
+ #include <iostream>
23
+
24
+ #include "optional.hpp"
25
+
26
+ namespace datasketches {
27
+
28
+ class tt {
29
+ public:
30
+ tt() = delete; // make sure it cannot be default constructed
31
+ tt(int val): val_(val) {}
32
+ tt(const tt& other): val_(other.val_) { std::cout << "tt copy constructor\n"; }
33
+ tt(tt&& other): val_(other.val_) { std::cout << "tt move constructor\n"; }
34
+ tt& operator=(const tt& other) { val_ = other.val_; std::cout << "tt copy assignment\n"; return *this; }
35
+ tt& operator=(tt&& other) { val_ = other.val_; std::cout << "tt move assignment\n"; return *this; }
36
+ int get_val() const { return val_; }
37
+ private:
38
+ int val_;
39
+ };
40
+
41
+ TEST_CASE("optional", "[common]") {
42
+ optional<tt> opt;
43
+ REQUIRE_FALSE(opt);
44
+ opt.emplace(5);
45
+ REQUIRE(bool(opt));
46
+ REQUIRE((*opt).get_val() == 5);
47
+ REQUIRE(opt->get_val() == 5);
48
+ opt.reset();
49
+ REQUIRE_FALSE(opt);
50
+
51
+ optional<tt> opt2(opt);
52
+ REQUIRE_FALSE(opt2);
53
+
54
+ opt2.emplace(3);
55
+ if (opt2) *opt2 = 6; // good if it is initialized
56
+ REQUIRE(opt2->get_val() == 6);
57
+
58
+ opt.reset();
59
+ REQUIRE_FALSE(opt);
60
+ optional<tt> opt3(std::move(opt));
61
+ REQUIRE_FALSE(opt3);
62
+ *opt3 = 7; // don't do this! may be dangerous for arbitrary T, and it still thinks it is not initialized
63
+ REQUIRE_FALSE(opt3);
64
+ opt3.emplace(8);
65
+ REQUIRE(bool(opt3));
66
+ REQUIRE(opt3->get_val() == 8);
67
+
68
+ std::swap(opt2, opt3);
69
+ REQUIRE(opt2->get_val() == 8);
70
+ REQUIRE(opt3->get_val() == 6);
71
+
72
+ std::swap(opt2, opt);
73
+ REQUIRE_FALSE(opt2);
74
+ REQUIRE(bool(opt));
75
+ REQUIRE(opt->get_val() == 8);
76
+ }
77
+
78
+ TEST_CASE("optional conversion", "[common]") {
79
+ optional<float> opt_f(1);
80
+ optional<double> opt_d(opt_f);
81
+ REQUIRE(bool(opt_d));
82
+ REQUIRE(*opt_d == static_cast<double>(*opt_f));
83
+ }
84
+
85
+ } /* namespace datasketches */
@@ -33,16 +33,16 @@ extern long long test_allocator_net_allocations;
33
33
 
34
34
  template <class T> class test_allocator {
35
35
  public:
36
- typedef T value_type;
37
- typedef value_type* pointer;
38
- typedef const value_type* const_pointer;
39
- typedef value_type& reference;
40
- typedef const value_type& const_reference;
41
- typedef std::size_t size_type;
42
- typedef std::ptrdiff_t difference_type;
36
+ using value_type = T;
37
+ using pointer = value_type*;
38
+ using const_pointer = const value_type*;
39
+ using reference = value_type&;
40
+ using const_reference = const value_type&;
41
+ using size_type = std::size_t;
42
+ using difference_type = std::ptrdiff_t;
43
43
 
44
44
  template <class U>
45
- struct rebind { typedef test_allocator<U> other; };
45
+ struct rebind { using other = test_allocator<U>; };
46
46
 
47
47
  // this is to test that a given instance of an allocator is used instead of instantiating
48
48
  static const bool DISALLOW_DEFAULT_CONSTRUCTOR = true;
@@ -66,7 +66,7 @@ public:
66
66
  }
67
67
 
68
68
  pointer allocate(size_type n, const_pointer = 0) {
69
- void* p = new char[n * sizeof(value_type)];
69
+ void* p = ::operator new(n * sizeof(value_type));
70
70
  if (!p) throw std::bad_alloc();
71
71
  test_allocator_total_bytes += n * sizeof(value_type);
72
72
  ++test_allocator_net_allocations;
@@ -74,7 +74,7 @@ public:
74
74
  }
75
75
 
76
76
  void deallocate(pointer p, size_type n) {
77
- if (p) delete[] (char*) p;
77
+ if (p) ::operator delete(p);
78
78
  test_allocator_total_bytes -= n * sizeof(value_type);
79
79
  --test_allocator_net_allocations;
80
80
  }
@@ -92,12 +92,12 @@ public:
92
92
 
93
93
  template<> class test_allocator<void> {
94
94
  public:
95
- typedef void value_type;
96
- typedef void* pointer;
97
- typedef const void* const_pointer;
95
+ using value_type = void;
96
+ using pointer = void*;
97
+ using const_pointer = const void*;
98
98
 
99
99
  template <class U>
100
- struct rebind { typedef test_allocator<U> other; };
100
+ struct rebind { using other = test_allocator<U>; };
101
101
  };
102
102
 
103
103