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/08/01 02:26:30 UTC

[incubator-datasketches-cpp] branch kll_destruction_fix created (now b64773b)

This is an automated email from the ASF dual-hosted git repository.

alsay pushed a change to branch kll_destruction_fix
in repository https://gitbox.apache.org/repos/asf/incubator-datasketches-cpp.git.


      at b64773b  fixed the range of items to destroy

This branch includes the following new commits:

     new b64773b  fixed the range of items to destroy

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org


[incubator-datasketches-cpp] 01/01: fixed the range of items to destroy

Posted by al...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

alsay pushed a commit to branch kll_destruction_fix
in repository https://gitbox.apache.org/repos/asf/incubator-datasketches-cpp.git

commit b64773b310937ed885e4828db738e8accc1b3320
Author: AlexanderSaydakov <Al...@users.noreply.github.com>
AuthorDate: Wed Jul 31 19:26:17 2019 -0700

    fixed the range of items to destroy
---
 kll/include/kll_sketch.hpp | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)

diff --git a/kll/include/kll_sketch.hpp b/kll/include/kll_sketch.hpp
index 61e403b..fdbe5ee 100644
--- a/kll/include/kll_sketch.hpp
+++ b/kll/include/kll_sketch.hpp
@@ -831,6 +831,7 @@ void kll_sketch<T, C, S, A>::compress_while_updating(void) {
   const uint32_t adj_beg = odd_pop ? raw_beg + 1 : raw_beg;
   const uint32_t adj_pop = odd_pop ? raw_pop - 1 : raw_pop;
   const uint32_t half_adj_pop = adj_pop / 2;
+  const uint32_t destroy_beg = levels_[0];
 
   // level zero might not be sorted, so we must sort it if we wish to compact it
   // sort_level_zero() is not used here because of the adjustment for odd number of items
@@ -846,7 +847,7 @@ void kll_sketch<T, C, S, A>::compress_while_updating(void) {
   levels_[level + 1] -= half_adj_pop; // adjust boundaries of the level above
   if (odd_pop) {
     levels_[level] = levels_[level + 1] - 1; // the current level now contains one item
-    items_[levels_[level]] = std::move(items_[raw_beg]); // namely this leftover guy
+    if (levels_[level] != raw_beg) items_[levels_[level]] = std::move(items_[raw_beg]); // namely this leftover guy
   } else {
     levels_[level] = levels_[level + 1]; // the current level is now empty
   }
@@ -858,15 +859,10 @@ void kll_sketch<T, C, S, A>::compress_while_updating(void) {
   // so that the freed-up space can be used by level zero
   if (level > 0) {
     const uint32_t amount = raw_beg - levels_[0];
-    const uint32_t first = levels_[0];
-    uint32_t last = levels_[0] + amount;
-    while (first != last) {
-      --last;
-      items_[last + half_adj_pop] = std::move(items_[last]);
-    }
+    std::move_backward(&items_[levels_[0]], &items_[levels_[0] + amount], &items_[levels_[0] + half_adj_pop + amount]);
     for (uint8_t lvl = 0; lvl < level; lvl++) levels_[lvl] += half_adj_pop;
   }
-  for (uint32_t i = 0; i < half_adj_pop; i++) items_[i + raw_beg].~T();
+  for (uint32_t i = 0; i < half_adj_pop; i++) items_[i + destroy_beg].~T();
 }
 
 template<typename T, typename C, typename S, typename A>
@@ -893,7 +889,7 @@ void kll_sketch<T, C, S, A>::add_empty_top_level_to_completely_full_sketch() {
 
   // note that merging MIGHT over-grow levels_, in which case we might not have to grow it here
   const uint8_t new_levels_size = num_levels_ + 2;
-  if (levels_size_ < (new_levels_size)) {
+  if (levels_size_ < new_levels_size) {
     uint32_t* new_levels = AllocU32().allocate(new_levels_size);
     std::copy(&levels_[0], &levels_[levels_size_], new_levels);
     AllocU32().deallocate(levels_, levels_size_);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org