Skip to content

Commit eaec868

Browse files
ashvardanianjrwnter
andcommitted
Fix: Copy-less insertions in dense indexes
Closes #628 Co-authored-by: Robin Winter <45263519+jrwnter@users.noreply.github.com>
1 parent e2b3431 commit eaec868

File tree

1 file changed

+7
-8
lines changed

1 file changed

+7
-8
lines changed

include/usearch/index_dense.hpp

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -757,12 +757,12 @@ class index_dense_gt {
757757
};
758758

759759
// clang-format off
760-
add_result_t add(vector_key_t key, b1x8_t const* vector, std::size_t thread = any_thread(), bool force_vector_copy = true) { return add_(key, vector, thread, force_vector_copy, casts_.from.b1x8); }
761-
add_result_t add(vector_key_t key, i8_t const* vector, std::size_t thread = any_thread(), bool force_vector_copy = true) { return add_(key, vector, thread, force_vector_copy, casts_.from.i8); }
762-
add_result_t add(vector_key_t key, f16_t const* vector, std::size_t thread = any_thread(), bool force_vector_copy = true) { return add_(key, vector, thread, force_vector_copy, casts_.from.f16); }
763-
add_result_t add(vector_key_t key, bf16_t const* vector, std::size_t thread = any_thread(), bool force_vector_copy = true) { return add_(key, vector, thread, force_vector_copy, casts_.from.bf16); }
764-
add_result_t add(vector_key_t key, f32_t const* vector, std::size_t thread = any_thread(), bool force_vector_copy = true) { return add_(key, vector, thread, force_vector_copy, casts_.from.f32); }
765-
add_result_t add(vector_key_t key, f64_t const* vector, std::size_t thread = any_thread(), bool force_vector_copy = true) { return add_(key, vector, thread, force_vector_copy, casts_.from.f64); }
760+
add_result_t add(vector_key_t key, b1x8_t const* vector, std::size_t thread = any_thread(), bool copy_vector = true) { return add_(key, vector, thread, copy_vector, casts_.from.b1x8); }
761+
add_result_t add(vector_key_t key, i8_t const* vector, std::size_t thread = any_thread(), bool copy_vector = true) { return add_(key, vector, thread, copy_vector, casts_.from.i8); }
762+
add_result_t add(vector_key_t key, f16_t const* vector, std::size_t thread = any_thread(), bool copy_vector = true) { return add_(key, vector, thread, copy_vector, casts_.from.f16); }
763+
add_result_t add(vector_key_t key, bf16_t const* vector, std::size_t thread = any_thread(), bool copy_vector = true) { return add_(key, vector, thread, copy_vector, casts_.from.bf16); }
764+
add_result_t add(vector_key_t key, f32_t const* vector, std::size_t thread = any_thread(), bool copy_vector = true) { return add_(key, vector, thread, copy_vector, casts_.from.f32); }
765+
add_result_t add(vector_key_t key, f64_t const* vector, std::size_t thread = any_thread(), bool copy_vector = true) { return add_(key, vector, thread, copy_vector, casts_.from.f64); }
766766

767767
search_result_t search(b1x8_t const* vector, std::size_t wanted, std::size_t thread = any_thread(), bool exact = false) const { return search_(vector, wanted, dummy_predicate_t {}, thread, exact, casts_.from.b1x8); }
768768
search_result_t search(i8_t const* vector, std::size_t wanted, std::size_t thread = any_thread(), bool exact = false) const { return search_(vector, wanted, dummy_predicate_t {}, thread, exact, casts_.from.i8); }
@@ -2002,14 +2002,13 @@ class index_dense_gt {
20022002
template <typename scalar_at>
20032003
add_result_t add_( //
20042004
vector_key_t key, scalar_at const* vector, //
2005-
std::size_t thread, bool force_vector_copy, cast_punned_t const& cast) {
2005+
std::size_t thread, bool copy_vector, cast_punned_t const& cast) {
20062006

20072007
if (!multi() && config().enable_key_lookups && contains(key))
20082008
return add_result_t{}.failed("Duplicate keys not allowed in high-level wrappers");
20092009

20102010
// Cast the vector, if needed for compatibility with `metric_`
20112011
thread_lock_t lock = thread_lock_(thread);
2012-
bool copy_vector = !config_.exclude_vectors || force_vector_copy;
20132012
byte_t const* vector_data = reinterpret_cast<byte_t const*>(vector);
20142013
{
20152014
byte_t* casted_data = cast_buffer_.data() + metric_.bytes_per_vector() * lock.thread_id;

0 commit comments

Comments
 (0)