datasketches 0.2.5 → 0.2.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/LICENSE +4 -6
- data/NOTICE +6 -5
- data/ext/datasketches/kll_wrapper.cpp +2 -2
- data/lib/datasketches/version.rb +1 -1
- data/vendor/datasketches-cpp/CMakeLists.txt +1 -1
- data/vendor/datasketches-cpp/LICENSE +4 -6
- data/vendor/datasketches-cpp/MANIFEST.in +0 -2
- data/vendor/datasketches-cpp/NOTICE +6 -5
- data/vendor/datasketches-cpp/common/CMakeLists.txt +2 -2
- data/vendor/datasketches-cpp/common/test/CMakeLists.txt +13 -2
- data/vendor/datasketches-cpp/common/test/catch_runner.cpp +22 -1
- data/vendor/datasketches-cpp/common/test/integration_test.cpp +1 -1
- data/vendor/datasketches-cpp/cpc/include/cpc_compressor_impl.hpp +2 -1
- data/vendor/datasketches-cpp/cpc/test/compression_test.cpp +1 -1
- data/vendor/datasketches-cpp/cpc/test/cpc_sketch_allocation_test.cpp +1 -1
- data/vendor/datasketches-cpp/cpc/test/cpc_sketch_test.cpp +1 -1
- data/vendor/datasketches-cpp/cpc/test/cpc_union_test.cpp +1 -1
- data/vendor/datasketches-cpp/fi/include/reverse_purge_hash_map_impl.hpp +1 -1
- data/vendor/datasketches-cpp/fi/test/frequent_items_sketch_custom_type_test.cpp +1 -1
- data/vendor/datasketches-cpp/fi/test/frequent_items_sketch_test.cpp +1 -1
- data/vendor/datasketches-cpp/fi/test/reverse_purge_hash_map_test.cpp +1 -1
- data/vendor/datasketches-cpp/hll/test/AuxHashMapTest.cpp +1 -1
- data/vendor/datasketches-cpp/hll/test/CouponHashSetTest.cpp +1 -1
- data/vendor/datasketches-cpp/hll/test/CouponListTest.cpp +1 -1
- data/vendor/datasketches-cpp/hll/test/CrossCountingTest.cpp +1 -1
- data/vendor/datasketches-cpp/hll/test/HllArrayTest.cpp +1 -1
- data/vendor/datasketches-cpp/hll/test/HllSketchTest.cpp +1 -1
- data/vendor/datasketches-cpp/hll/test/HllUnionTest.cpp +1 -1
- data/vendor/datasketches-cpp/hll/test/IsomorphicTest.cpp +1 -1
- data/vendor/datasketches-cpp/hll/test/TablesTest.cpp +1 -1
- data/vendor/datasketches-cpp/hll/test/ToFromByteArrayTest.cpp +1 -1
- data/vendor/datasketches-cpp/kll/include/kll_helper_impl.hpp +2 -2
- data/vendor/datasketches-cpp/kll/include/kll_sketch.hpp +22 -9
- data/vendor/datasketches-cpp/kll/include/kll_sketch_impl.hpp +47 -9
- data/vendor/datasketches-cpp/kll/test/kll_sketch_custom_type_test.cpp +1 -1
- data/vendor/datasketches-cpp/kll/test/kll_sketch_test.cpp +72 -7
- data/vendor/datasketches-cpp/kll/test/kll_sketch_validation.cpp +1 -1
- data/vendor/datasketches-cpp/kll/test/kolmogorov_smirnov_test.cpp +1 -1
- data/vendor/datasketches-cpp/pyproject.toml +0 -1
- data/vendor/datasketches-cpp/python/README.md +6 -9
- data/vendor/datasketches-cpp/python/pybind11Path.cmd +1 -1
- data/vendor/datasketches-cpp/quantiles/include/quantiles_sketch.hpp +15 -0
- data/vendor/datasketches-cpp/quantiles/include/quantiles_sketch_impl.hpp +78 -14
- data/vendor/datasketches-cpp/quantiles/test/kolmogorov_smirnov_test.cpp +3 -3
- data/vendor/datasketches-cpp/quantiles/test/quantiles_compatibility_test.cpp +1 -1
- data/vendor/datasketches-cpp/quantiles/test/quantiles_sketch_test.cpp +64 -1
- data/vendor/datasketches-cpp/req/include/req_compactor.hpp +6 -0
- data/vendor/datasketches-cpp/req/include/req_compactor_impl.hpp +27 -0
- data/vendor/datasketches-cpp/req/include/req_sketch.hpp +11 -0
- data/vendor/datasketches-cpp/req/include/req_sketch_impl.hpp +29 -2
- data/vendor/datasketches-cpp/req/test/req_sketch_custom_type_test.cpp +1 -1
- data/vendor/datasketches-cpp/req/test/req_sketch_test.cpp +70 -4
- data/vendor/datasketches-cpp/sampling/test/var_opt_allocation_test.cpp +1 -1
- data/vendor/datasketches-cpp/sampling/test/var_opt_sketch_test.cpp +1 -1
- data/vendor/datasketches-cpp/sampling/test/var_opt_union_test.cpp +1 -1
- data/vendor/datasketches-cpp/setup.py +2 -3
- data/vendor/datasketches-cpp/theta/test/theta_a_not_b_test.cpp +1 -1
- data/vendor/datasketches-cpp/theta/test/theta_intersection_test.cpp +1 -1
- data/vendor/datasketches-cpp/theta/test/theta_jaccard_similarity_test.cpp +1 -1
- data/vendor/datasketches-cpp/theta/test/theta_setop_test.cpp +1 -1
- data/vendor/datasketches-cpp/theta/test/theta_sketch_test.cpp +1 -1
- data/vendor/datasketches-cpp/theta/test/theta_union_test.cpp +1 -1
- data/vendor/datasketches-cpp/tuple/include/tuple_sketch_impl.hpp +25 -31
- data/vendor/datasketches-cpp/tuple/test/array_of_doubles_sketch_test.cpp +1 -1
- data/vendor/datasketches-cpp/tuple/test/tuple_a_not_b_test.cpp +1 -1
- data/vendor/datasketches-cpp/tuple/test/tuple_intersection_test.cpp +1 -1
- data/vendor/datasketches-cpp/tuple/test/tuple_jaccard_similarity_test.cpp +1 -1
- data/vendor/datasketches-cpp/tuple/test/tuple_sketch_allocation_test.cpp +1 -1
- data/vendor/datasketches-cpp/tuple/test/tuple_sketch_test.cpp +1 -1
- data/vendor/datasketches-cpp/tuple/test/tuple_union_test.cpp +1 -1
- metadata +2 -4
- data/vendor/datasketches-cpp/common/test/catch.hpp +0 -17618
- data/vendor/datasketches-cpp/common/test/test_runner.cpp +0 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4a7fef851c11ba93a002a6215f76170b973628f8b1f0a89fb89a5e655f6a421a
|
4
|
+
data.tar.gz: a590d7cde413596640f8bf169db67742696d7e304097be8bc0820244ed32ebd5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dea9986097b4e9e4c7aba8b6f69108dce21caa2f6fa1e8723a9bf8be2077b925507bf84bd92bc794c1831285963f8ecb8f4739797c3246a15a438a82816043d6
|
7
|
+
data.tar.gz: 64f2ed1ed4656c09057892ae493a9a2c7178b3090dd84c24105b9e2f16d45f9aaed728c2bb6154e6518e018bbd240f5c2e562fa2edbee397b5deccb8b1dd11f5
|
data/CHANGELOG.md
CHANGED
data/LICENSE
CHANGED
@@ -255,10 +255,8 @@ APPENDIX B: Additional licenses relevant to this product.
|
|
255
255
|
=============================================================
|
256
256
|
Boost License (https://www.boost.org/LICENSE_1_0.txt)
|
257
257
|
=============================================================
|
258
|
-
Original source
|
259
|
-
|
260
|
-
-------------------------------------------------------------
|
261
|
-
Copyright (c) 2020 Two Blue Cubes Ltd. All rights reserved.
|
258
|
+
Original source:
|
259
|
+
https://github.com/catchorg/Catch2/blob/v2.x/LICENSE.txt
|
262
260
|
|
263
261
|
Boost Software License - Version 1.0 - August 17th, 2003
|
264
262
|
|
@@ -285,8 +283,8 @@ APPENDIX B: Additional licenses relevant to this product.
|
|
285
283
|
DEALINGS IN THE SOFTWARE.
|
286
284
|
-------------------------------------------------------------
|
287
285
|
Code Locations:
|
288
|
-
|
289
|
-
|
286
|
+
Found in the Catch2 unit test code that is downloaded from github.com as part
|
287
|
+
of CMake configuration if configured to build tests.
|
290
288
|
|
291
289
|
|
292
290
|
=============================================================
|
data/NOTICE
CHANGED
@@ -1,11 +1,12 @@
|
|
1
|
-
Apache DataSketches
|
2
|
-
Copyright
|
1
|
+
Apache DataSketches C++ and Python
|
2
|
+
Copyright 2022 The Apache Software Foundation
|
3
3
|
|
4
|
-
Copyright 2015-2018 Yahoo
|
5
|
-
Copyright 2019 Verizon Media
|
4
|
+
Copyright 2015-2018 Yahoo Inc.
|
5
|
+
Copyright 2019-2020 Verizon Media
|
6
|
+
Copyright 2021 Yahoo Inc.
|
6
7
|
|
7
8
|
This product includes software developed at
|
8
9
|
The Apache Software Foundation (http://www.apache.org/).
|
9
10
|
|
10
11
|
Prior to moving to ASF, the software for this project was developed at
|
11
|
-
Yahoo
|
12
|
+
Yahoo Inc. (https://developer.yahoo.com).
|
@@ -55,12 +55,12 @@ void bind_kll_sketch(Rice::Module& m, const char* name) {
|
|
55
55
|
})
|
56
56
|
.define_method(
|
57
57
|
"pmf",
|
58
|
-
[](kll_sketch<T>& self, std::vector<T
|
58
|
+
[](kll_sketch<T>& self, const std::vector<T>& split_points) {
|
59
59
|
return self.get_PMF(&split_points[0], split_points.size());
|
60
60
|
})
|
61
61
|
.define_method(
|
62
62
|
"cdf",
|
63
|
-
[](kll_sketch<T>& self, std::vector<T
|
63
|
+
[](kll_sketch<T>& self, const std::vector<T>& split_points) {
|
64
64
|
return self.get_CDF(&split_points[0], split_points.size());
|
65
65
|
})
|
66
66
|
.define_method(
|
data/lib/datasketches/version.rb
CHANGED
@@ -255,10 +255,8 @@ APPENDIX B: Additional licenses relevant to this product.
|
|
255
255
|
=============================================================
|
256
256
|
Boost License (https://www.boost.org/LICENSE_1_0.txt)
|
257
257
|
=============================================================
|
258
|
-
Original source
|
259
|
-
|
260
|
-
-------------------------------------------------------------
|
261
|
-
Copyright (c) 2020 Two Blue Cubes Ltd. All rights reserved.
|
258
|
+
Original source:
|
259
|
+
https://github.com/catchorg/Catch2/blob/v2.x/LICENSE.txt
|
262
260
|
|
263
261
|
Boost Software License - Version 1.0 - August 17th, 2003
|
264
262
|
|
@@ -285,8 +283,8 @@ APPENDIX B: Additional licenses relevant to this product.
|
|
285
283
|
DEALINGS IN THE SOFTWARE.
|
286
284
|
-------------------------------------------------------------
|
287
285
|
Code Locations:
|
288
|
-
|
289
|
-
|
286
|
+
Found in the Catch2 unit test code that is downloaded from github.com as part
|
287
|
+
of CMake configuration if configured to build tests.
|
290
288
|
|
291
289
|
|
292
290
|
=============================================================
|
@@ -1,11 +1,12 @@
|
|
1
|
-
Apache DataSketches
|
2
|
-
Copyright
|
1
|
+
Apache DataSketches C++ and Python
|
2
|
+
Copyright 2022 The Apache Software Foundation
|
3
3
|
|
4
|
-
Copyright 2015-2018 Yahoo
|
5
|
-
Copyright 2019 Verizon Media
|
4
|
+
Copyright 2015-2018 Yahoo Inc.
|
5
|
+
Copyright 2019-2020 Verizon Media
|
6
|
+
Copyright 2021 Yahoo Inc.
|
6
7
|
|
7
8
|
This product includes software developed at
|
8
9
|
The Apache Software Foundation (http://www.apache.org/).
|
9
10
|
|
10
11
|
Prior to moving to ASF, the software for this project was developed at
|
11
|
-
Yahoo
|
12
|
+
Yahoo Inc. (https://developer.yahoo.com).
|
@@ -43,8 +43,8 @@ install(FILES
|
|
43
43
|
include/conditional_forward.hpp
|
44
44
|
include/ceiling_power_of_2.hpp
|
45
45
|
include/bounds_binomial_proportions.hpp
|
46
|
-
include/kolmogorov_smirnov.hpp
|
47
|
-
include/kolmogorov_smirnov_impl.hpp
|
48
46
|
include/quantile_sketch_sorted_view.hpp
|
49
47
|
include/quantile_sketch_sorted_view_impl.hpp
|
48
|
+
include/kolmogorov_smirnov.hpp
|
49
|
+
include/kolmogorov_smirnov_impl.hpp
|
50
50
|
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/DataSketches")
|
@@ -21,6 +21,18 @@
|
|
21
21
|
# common dependencies for tests
|
22
22
|
add_library(common_test OBJECT "")
|
23
23
|
|
24
|
+
include(FetchContent)
|
25
|
+
|
26
|
+
FetchContent_Declare(
|
27
|
+
Catch2
|
28
|
+
GIT_REPOSITORY https://github.com/catchorg/Catch2
|
29
|
+
GIT_TAG v2.13.9
|
30
|
+
)
|
31
|
+
|
32
|
+
FetchContent_MakeAvailable(Catch2)
|
33
|
+
|
34
|
+
target_link_libraries(common_test PUBLIC Catch2::Catch2)
|
35
|
+
|
24
36
|
set_target_properties(common_test PROPERTIES
|
25
37
|
CXX_STANDARD 11
|
26
38
|
CXX_STANDARD_REQUIRED YES
|
@@ -33,7 +45,6 @@ target_include_directories(common_test
|
|
33
45
|
|
34
46
|
target_sources(common_test
|
35
47
|
INTERFACE
|
36
|
-
${CMAKE_CURRENT_SOURCE_DIR}/catch.hpp
|
37
48
|
${CMAKE_CURRENT_SOURCE_DIR}/test_allocator.hpp
|
38
49
|
${CMAKE_CURRENT_SOURCE_DIR}/test_type.hpp
|
39
50
|
PRIVATE
|
@@ -59,4 +70,4 @@ add_test(
|
|
59
70
|
target_sources(integration_test
|
60
71
|
PRIVATE
|
61
72
|
integration_test.cpp
|
62
|
-
)
|
73
|
+
)
|
@@ -1,7 +1,28 @@
|
|
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
|
+
|
1
20
|
#ifndef _TEST_COMMON_HPP_
|
2
21
|
#define _TEST_COMMON_HPP_
|
3
22
|
|
23
|
+
// this largely just ensures that, for our simple test cases at least,
|
24
|
+
// we define main() exactly once per test executable
|
4
25
|
#define CATCH_CONFIG_MAIN
|
5
|
-
#include
|
26
|
+
#include <catch2/catch.hpp>
|
6
27
|
|
7
28
|
#endif // _TEST_COMMON_HPP_
|
@@ -297,6 +297,7 @@ void cpc_compressor<A>::compress_sliding_flavor(const cpc_sketch_alloc<A>& sourc
|
|
297
297
|
// changes the implied ordering of the pairs, so we must do it before sorting.
|
298
298
|
|
299
299
|
const uint8_t pseudo_phase = determine_pseudo_phase(source.get_lg_k(), source.get_num_coupons());
|
300
|
+
if (pseudo_phase >= 16) throw std::logic_error("unexpected pseudo phase for sliding flavor");
|
300
301
|
const uint8_t* permutation = column_permutations_for_encoding[pseudo_phase];
|
301
302
|
|
302
303
|
const uint8_t offset = source.window_offset;
|
@@ -333,7 +334,7 @@ void cpc_compressor<A>::uncompress_sliding_flavor(const compressed_state<A>& sou
|
|
333
334
|
lg_k, source.table_data.get_allocator());
|
334
335
|
|
335
336
|
const uint8_t pseudo_phase = determine_pseudo_phase(lg_k, num_coupons);
|
336
|
-
if (pseudo_phase >= 16) throw std::logic_error("pseudo phase
|
337
|
+
if (pseudo_phase >= 16) throw std::logic_error("unexpected pseudo phase for sliding flavor");
|
337
338
|
const uint8_t* permutation = column_permutations_for_decoding[pseudo_phase];
|
338
339
|
|
339
340
|
uint8_t offset = cpc_sketch_alloc<A>::determine_correct_offset(lg_k, num_coupons);
|
@@ -230,7 +230,7 @@ kll_helper::compress_result kll_helper::general_compress(uint16_t k, uint8_t m,
|
|
230
230
|
// move level over as is
|
231
231
|
// make sure we are not moving data upwards
|
232
232
|
if (raw_beg < out_levels[current_level]) throw std::logic_error("wrong move");
|
233
|
-
std::move(
|
233
|
+
std::move(items + raw_beg, items + raw_lim, items + out_levels[current_level]);
|
234
234
|
out_levels[current_level + 1] = out_levels[current_level] + raw_pop;
|
235
235
|
} else {
|
236
236
|
// The sketch is too full AND this level is too full, so we compact it
|
@@ -251,7 +251,7 @@ kll_helper::compress_result kll_helper::general_compress(uint16_t k, uint8_t m,
|
|
251
251
|
|
252
252
|
// level zero might not be sorted, so we must sort it if we wish to compact it
|
253
253
|
if ((current_level == 0) && !is_level_zero_sorted) {
|
254
|
-
std::sort(
|
254
|
+
std::sort(items + adj_beg, items + adj_beg + adj_pop, C());
|
255
255
|
}
|
256
256
|
|
257
257
|
if (pop_above == 0) { // Level above is empty, so halve up
|
@@ -170,7 +170,7 @@ class kll_sketch {
|
|
170
170
|
using comparator = C;
|
171
171
|
|
172
172
|
static const uint8_t DEFAULT_M = 8;
|
173
|
-
// TODO: Redundant and deprecated. Will be
|
173
|
+
// TODO: Redundant and deprecated. Will be removed in next major version.
|
174
174
|
static const uint16_t DEFAULT_K = kll_constants::DEFAULT_K;
|
175
175
|
static const uint16_t MIN_K = DEFAULT_M;
|
176
176
|
static const uint16_t MAX_K = (1 << 16) - 1;
|
@@ -182,6 +182,14 @@ class kll_sketch {
|
|
182
182
|
kll_sketch& operator=(const kll_sketch& other);
|
183
183
|
kll_sketch& operator=(kll_sketch&& other);
|
184
184
|
|
185
|
+
/*
|
186
|
+
* Type converting constructor.
|
187
|
+
* @param other sketch of a different type
|
188
|
+
* @param allocator instance of an Allocator
|
189
|
+
*/
|
190
|
+
template<typename TT, typename CC, typename SS, typename AA>
|
191
|
+
explicit kll_sketch(const kll_sketch<TT, CC, SS, AA>& other, const A& allocator = A());
|
192
|
+
|
185
193
|
/**
|
186
194
|
* Updates this sketch with the given data item.
|
187
195
|
* @param value an item from a stream of items
|
@@ -390,7 +398,7 @@ class kll_sketch {
|
|
390
398
|
/**
|
391
399
|
* Computes size needed to serialize the current state of the sketch.
|
392
400
|
* This version is for fixed-size arithmetic types (integral and floating point).
|
393
|
-
* @param instance of a SerDe
|
401
|
+
* @param serde instance of a SerDe
|
394
402
|
* @return size in bytes needed to serialize this sketch
|
395
403
|
*/
|
396
404
|
template<typename TT = T, typename SerDe = S, typename std::enable_if<std::is_arithmetic<TT>::value, int>::type = 0>
|
@@ -399,7 +407,7 @@ class kll_sketch {
|
|
399
407
|
/**
|
400
408
|
* Computes size needed to serialize the current state of the sketch.
|
401
409
|
* This version is for all other types and can be expensive since every item needs to be looked at.
|
402
|
-
* @param instance of a SerDe
|
410
|
+
* @param serde instance of a SerDe
|
403
411
|
* @return size in bytes needed to serialize this sketch
|
404
412
|
*/
|
405
413
|
template<typename TT = T, typename SerDe = S, typename std::enable_if<!std::is_arithmetic<TT>::value, int>::type = 0>
|
@@ -459,7 +467,7 @@ class kll_sketch {
|
|
459
467
|
/**
|
460
468
|
* This method deserializes a sketch from a given stream.
|
461
469
|
* @param is input stream
|
462
|
-
* @param instance of an Allocator
|
470
|
+
* @param allocator instance of an Allocator
|
463
471
|
* @return an instance of a sketch
|
464
472
|
*
|
465
473
|
* Deprecated, to be removed in the next major version
|
@@ -469,8 +477,8 @@ class kll_sketch {
|
|
469
477
|
/**
|
470
478
|
* This method deserializes a sketch from a given stream.
|
471
479
|
* @param is input stream
|
472
|
-
* @param instance of a SerDe
|
473
|
-
* @param instance of an Allocator
|
480
|
+
* @param serde instance of a SerDe
|
481
|
+
* @param allocator instance of an Allocator
|
474
482
|
* @return an instance of a sketch
|
475
483
|
*/
|
476
484
|
template<typename SerDe = S>
|
@@ -480,7 +488,7 @@ class kll_sketch {
|
|
480
488
|
* This method deserializes a sketch from a given array of bytes.
|
481
489
|
* @param bytes pointer to the array of bytes
|
482
490
|
* @param size the size of the array
|
483
|
-
* @param instance of an Allocator
|
491
|
+
* @param allocator instance of an Allocator
|
484
492
|
* @return an instance of a sketch
|
485
493
|
*
|
486
494
|
* Deprecated, to be removed in the next major version
|
@@ -491,8 +499,8 @@ class kll_sketch {
|
|
491
499
|
* This method deserializes a sketch from a given array of bytes.
|
492
500
|
* @param bytes pointer to the array of bytes
|
493
501
|
* @param size the size of the array
|
494
|
-
* @param instance of a SerDe
|
495
|
-
* @param instance of an Allocator
|
502
|
+
* @param serde instance of a SerDe
|
503
|
+
* @param allocator instance of an Allocator
|
496
504
|
* @return an instance of a sketch
|
497
505
|
*/
|
498
506
|
template<typename SerDe = S>
|
@@ -606,6 +614,8 @@ class kll_sketch {
|
|
606
614
|
static void check_serial_version(uint8_t serial_version);
|
607
615
|
static void check_family_id(uint8_t family_id);
|
608
616
|
|
617
|
+
void check_sorting() const;
|
618
|
+
|
609
619
|
// implementations for floating point types
|
610
620
|
template<typename TT = T, typename std::enable_if<std::is_floating_point<TT>::value, int>::type = 0>
|
611
621
|
static const TT& get_invalid_value() {
|
@@ -629,6 +639,9 @@ class kll_sketch {
|
|
629
639
|
return true;
|
630
640
|
}
|
631
641
|
|
642
|
+
// for type converting constructor
|
643
|
+
template<typename TT, typename CC, typename SS, typename AA>
|
644
|
+
friend class kll_sketch;
|
632
645
|
};
|
633
646
|
|
634
647
|
template<typename T, typename C, typename S, typename A>
|