From ffbfce6686c3f9dfeb27a9f0584a67e698838b68 Mon Sep 17 00:00:00 2001 From: Jon Malkin <786705+jmalkin@users.noreply.github.com> Date: Fri, 1 Dec 2023 20:49:34 -0800 Subject: [PATCH] fix kil_helper to avoid in-place std::move calls which breack nanobind ref counting (and perhaps other similar objects) --- kll/include/kll_helper_impl.hpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/kll/include/kll_helper_impl.hpp b/kll/include/kll_helper_impl.hpp index e763c575..bb92bdc7 100644 --- a/kll/include/kll_helper_impl.hpp +++ b/kll/include/kll_helper_impl.hpp @@ -230,7 +230,8 @@ kll_helper::compress_result kll_helper::general_compress(uint16_t k, uint8_t m, // move level over as is // make sure we are not moving data upwards if (raw_beg < out_levels[current_level]) throw std::logic_error("wrong move"); - std::move(items + raw_beg, items + raw_lim, items + out_levels[current_level]); + if (raw_beg != out_levels[current_level]) + std::move(items + raw_beg, items + raw_lim, items + out_levels[current_level]); out_levels[current_level + 1] = out_levels[current_level] + raw_pop; } else { // The sketch is too full AND this level is too full, so we compact it @@ -243,7 +244,8 @@ kll_helper::compress_result kll_helper::general_compress(uint16_t k, uint8_t m, const auto half_adj_pop = adj_pop / 2; if (odd_pop) { // move one guy over - items[out_levels[current_level]] = std::move(items[raw_beg]); + if (out_levels[current_level] != raw_beg) + items[out_levels[current_level]] = std::move(items[raw_beg]); out_levels[current_level + 1] = out_levels[current_level] + 1; } else { // even number of items out_levels[current_level + 1] = out_levels[current_level];