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 2019/07/20 01:16:08 UTC
[incubator-datasketches-cpp] branch kll_no_default_construction
updated: use allocator for temporary arrays
This is an automated email from the ASF dual-hosted git repository.
alsay pushed a commit to branch kll_no_default_construction
in repository https://gitbox.apache.org/repos/asf/incubator-datasketches-cpp.git
The following commit(s) were added to refs/heads/kll_no_default_construction by this push:
new c571f22 use allocator for temporary arrays
c571f22 is described below
commit c571f22c04362c00e66bf7db09fe5a5658af2543
Author: AlexanderSaydakov <Al...@users.noreply.github.com>
AuthorDate: Fri Jul 19 18:16:00 2019 -0700
use allocator for temporary arrays
---
kll/include/kll_sketch.hpp | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/kll/include/kll_sketch.hpp b/kll/include/kll_sketch.hpp
index 64217c6..2a30f56 100644
--- a/kll/include/kll_sketch.hpp
+++ b/kll/include/kll_sketch.hpp
@@ -1011,11 +1011,12 @@ void kll_sketch<T, C, S, A>::increment_buckets_sorted_level(uint32_t from_index,
template<typename T, typename C, typename S, typename A>
void kll_sketch<T, C, S, A>::merge_higher_levels(const kll_sketch& other, uint64_t final_n) {
const uint32_t tmp_num_items = get_num_retained() + other.get_num_retained_above_level_zero();
- auto deleter = [tmp_num_items](T* ptr) { A().deallocate(ptr, tmp_num_items); };
- const std::unique_ptr<T, decltype(deleter)> workbuf(A().allocate(tmp_num_items), deleter);
- const uint8_t ub = kll_helper::ub_on_num_levels(final_n);
- const std::unique_ptr<uint32_t[]> worklevels(new uint32_t[ub + 2]); // ub+1 does not work
- const std::unique_ptr<uint32_t[]> outlevels(new uint32_t[ub + 2]);
+ auto tmp_items_deleter = [tmp_num_items](T* ptr) { A().deallocate(ptr, tmp_num_items); };
+ const std::unique_ptr<T, decltype(tmp_items_deleter)> workbuf(A().allocate(tmp_num_items), tmp_items_deleter);
+ const size_t work_levels_size = kll_helper::ub_on_num_levels(final_n) + 2; // ub+1 does not work
+ auto tmp_levels_deleter = [work_levels_size](uint32_t* ptr) { AllocU32().deallocate(ptr, work_levels_size); };
+ const std::unique_ptr<uint32_t[], decltype(tmp_levels_deleter)> worklevels(AllocU32().allocate(work_levels_size), tmp_levels_deleter);
+ const std::unique_ptr<uint32_t[], decltype(tmp_levels_deleter)> outlevels(AllocU32().allocate(work_levels_size), tmp_levels_deleter);
const uint8_t provisional_num_levels = std::max(num_levels_, other.num_levels_);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org