diff options
author | Tor Egge <Tor.Egge@online.no> | 2023-06-15 12:10:48 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2023-06-15 12:10:48 +0200 |
commit | 8e4fb9da1cae44d359d9d665252fd9b36077f5f3 (patch) | |
tree | c96e00bfbbd2bc28eb58da9f6490857bacae1f06 /vespalib/src | |
parent | b7fa88adf8cacacba2088d8532d79958182b1916 (diff) |
Adjust DynamicArrayBufferType constructor signature to match
SmallArrayBufferType constructor signature.
Diffstat (limited to 'vespalib/src')
7 files changed, 40 insertions, 16 deletions
diff --git a/vespalib/src/tests/datastore/dynamic_array_buffer_type/dynamic_array_buffer_type_test.cpp b/vespalib/src/tests/datastore/dynamic_array_buffer_type/dynamic_array_buffer_type_test.cpp index d5244ae56aa..c2933dccf18 100644 --- a/vespalib/src/tests/datastore/dynamic_array_buffer_type/dynamic_array_buffer_type_test.cpp +++ b/vespalib/src/tests/datastore/dynamic_array_buffer_type/dynamic_array_buffer_type_test.cpp @@ -4,6 +4,7 @@ #include <vespa/vespalib/gtest/gtest.h> #include <ostream> +using vespalib::datastore::ArrayStoreConfig; using vespalib::datastore::BufferTypeBase; using vespalib::datastore::DynamicArrayBufferType; using vespalib::datastore::EntryCount; @@ -125,7 +126,7 @@ protected: DynamicArrayBufferTypeTest::DynamicArrayBufferTypeTest() : testing::Test(), - _buffer_type(3, 0, 10, 0, 0.2), + _buffer_type(3, ArrayStoreConfig::AllocSpec(0, 10, 0, 0.2), {}), _entry_size(_buffer_type.entry_size()), _buf_size(2 * _entry_size), _buf(std::make_unique<char[]>(_buf_size)) @@ -143,7 +144,7 @@ template <typename ElemT> uint32_t DynamicArrayBufferTypeTest::get_entry_size(uint32_t array_size) { - DynamicArrayBufferType<ElemT> my_buffer_type(array_size, 0, 10, 0, 0.2); + DynamicArrayBufferType<ElemT> my_buffer_type(array_size, ArrayStoreConfig::AllocSpec(0, 10, 0, 0.2), {}); return my_buffer_type.entry_size(); } diff --git a/vespalib/src/vespa/vespalib/datastore/array_store.h b/vespalib/src/vespa/vespalib/datastore/array_store.h index 809ac10f6e3..66e6c19fcb0 100644 --- a/vespalib/src/vespa/vespalib/datastore/array_store.h +++ b/vespalib/src/vespa/vespalib/datastore/array_store.h @@ -55,9 +55,9 @@ private: using generation_t = vespalib::GenerationHandler::generation_t; void initArrayTypes(const ArrayStoreConfig &cfg, std::shared_ptr<alloc::MemoryAllocator> memory_allocator); - EntryRef addSmallArray(const ConstArrayRef &array); + EntryRef addSmallArray(ConstArrayRef array); EntryRef allocate_small_array(size_t array_size); - EntryRef addLargeArray(const ConstArrayRef &array); + EntryRef addLargeArray(ConstArrayRef array); EntryRef allocate_large_array(size_t array_size); ConstArrayRef getSmallArray(RefT ref, size_t arraySize) const { const ElemT *buf = _store.template getEntryArray<ElemT>(ref, arraySize); @@ -72,7 +72,7 @@ public: ArrayStore(const ArrayStoreConfig &cfg, std::shared_ptr<alloc::MemoryAllocator> memory_allocator); ArrayStore(const ArrayStoreConfig &cfg, std::shared_ptr<alloc::MemoryAllocator> memory_allocator, TypeMapper&& mapper); ~ArrayStore() override; - EntryRef add(const ConstArrayRef &array); + EntryRef add(ConstArrayRef array); ConstArrayRef get(EntryRef ref) const { if (!ref.valid()) [[unlikely]] { return ConstArrayRef(); diff --git a/vespalib/src/vespa/vespalib/datastore/array_store.hpp b/vespalib/src/vespa/vespalib/datastore/array_store.hpp index 01ebf0312c4..c0caab7b7db 100644 --- a/vespalib/src/vespa/vespalib/datastore/array_store.hpp +++ b/vespalib/src/vespa/vespalib/datastore/array_store.hpp @@ -74,7 +74,7 @@ ArrayStore<ElemT, RefT, TypeMapperT>::~ArrayStore() template <typename ElemT, typename RefT, typename TypeMapperT> EntryRef -ArrayStore<ElemT, RefT, TypeMapperT>::add(const ConstArrayRef &array) +ArrayStore<ElemT, RefT, TypeMapperT>::add(ConstArrayRef array) { if (array.size() == 0) { return EntryRef(); @@ -102,7 +102,7 @@ ArrayStore<ElemT, RefT, TypeMapperT>::allocate(size_t array_size) template <typename ElemT, typename RefT, typename TypeMapperT> EntryRef -ArrayStore<ElemT, RefT, TypeMapperT>::addSmallArray(const ConstArrayRef &array) +ArrayStore<ElemT, RefT, TypeMapperT>::addSmallArray(ConstArrayRef array) { uint32_t typeId = _mapper.get_type_id(array.size()); using NoOpReclaimer = DefaultReclaimer<ElemT>; @@ -119,7 +119,7 @@ ArrayStore<ElemT, RefT, TypeMapperT>::allocate_small_array(size_t array_size) template <typename ElemT, typename RefT, typename TypeMapperT> EntryRef -ArrayStore<ElemT, RefT, TypeMapperT>::addLargeArray(const ConstArrayRef &array) +ArrayStore<ElemT, RefT, TypeMapperT>::addLargeArray(ConstArrayRef array) { using NoOpReclaimer = DefaultReclaimer<LargeArray>; auto handle = _store.template freeListAllocator<LargeArray, NoOpReclaimer>(_largeArrayTypeId) diff --git a/vespalib/src/vespa/vespalib/datastore/dynamic_array_buffer_type.h b/vespalib/src/vespa/vespalib/datastore/dynamic_array_buffer_type.h index e314accd664..7d67d0cddf7 100644 --- a/vespalib/src/vespa/vespalib/datastore/dynamic_array_buffer_type.h +++ b/vespalib/src/vespa/vespalib/datastore/dynamic_array_buffer_type.h @@ -3,6 +3,8 @@ #pragma once #include "buffer_type.h" +#include "array_store_config.h" +#include <memory> namespace vespalib::datastore { @@ -20,6 +22,8 @@ namespace vespalib::datastore { template <typename ElemT> class DynamicArrayBufferType : public BufferTypeBase { + using AllocSpec = ArrayStoreConfig::AllocSpec; + std::shared_ptr<alloc::MemoryAllocator> _memory_allocator; public: using ElemType = ElemT; protected: @@ -29,15 +33,20 @@ protected: public: DynamicArrayBufferType(const DynamicArrayBufferType &rhs) = delete; DynamicArrayBufferType & operator=(const DynamicArrayBufferType &rhs) = delete; - DynamicArrayBufferType(DynamicArrayBufferType && rhs) noexcept = default; + DynamicArrayBufferType(DynamicArrayBufferType&& rhs) noexcept; DynamicArrayBufferType & operator=(DynamicArrayBufferType && rhs) noexcept = default; - DynamicArrayBufferType(uint32_t array_size, uint32_t min_entries, uint32_t max_entries, - uint32_t num_entries_for_new_buffer, float allocGrowFactor) noexcept; + DynamicArrayBufferType(uint32_t array_size, const AllocSpec& spec, std::shared_ptr<alloc::MemoryAllocator> memory_allocator) noexcept; + template <typename TypeMapper> + DynamicArrayBufferType(uint32_t array_size, const AllocSpec& spec, std::shared_ptr<alloc::MemoryAllocator> memory_allocator, TypeMapper&) noexcept + : DynamicArrayBufferType(array_size, spec, std::move(memory_allocator)) + { + } ~DynamicArrayBufferType() override; void destroy_entries(void* buffer, EntryCount num_entries) override; void fallback_copy(void* new_buffer, const void* old_buffer, EntryCount num_entries) override; void initialize_reserved_entries(void* buffer, EntryCount reserved_entries) override; void clean_hold(void* buffer, size_t offset, EntryCount num_entries, CleanContext cleanCxt) override; + const vespalib::alloc::MemoryAllocator* get_memory_allocator() const override; static size_t calc_entry_size(size_t array_size) noexcept; static size_t calc_array_size(size_t entry_size) noexcept; static ElemType* get_entry(void* buffer, size_t offset, uint32_t entry_size) noexcept { return reinterpret_cast<ElemType*>(static_cast<char*>(buffer) + offset * entry_size); } diff --git a/vespalib/src/vespa/vespalib/datastore/dynamic_array_buffer_type.hpp b/vespalib/src/vespa/vespalib/datastore/dynamic_array_buffer_type.hpp index 514267b0a85..81d8a850b84 100644 --- a/vespalib/src/vespa/vespalib/datastore/dynamic_array_buffer_type.hpp +++ b/vespalib/src/vespa/vespalib/datastore/dynamic_array_buffer_type.hpp @@ -10,10 +10,14 @@ namespace vespalib::datastore { template <typename ElemT> -DynamicArrayBufferType<ElemT>::DynamicArrayBufferType(uint32_t array_size, uint32_t min_entries, uint32_t max_entries, - uint32_t num_entries_for_new_buffer, float allocGrowFactor) noexcept - : BufferTypeBase(calc_entry_size(array_size), array_size, min_entries, max_entries, num_entries_for_new_buffer, allocGrowFactor) -{ } +DynamicArrayBufferType<ElemT>::DynamicArrayBufferType(uint32_t array_size, const AllocSpec& spec, std::shared_ptr<alloc::MemoryAllocator> memory_allocator) noexcept + : BufferTypeBase(calc_entry_size(array_size), array_size, spec.min_entries_in_buffer, spec.max_entries_in_buffer, spec.num_entries_for_new_buffer, spec.allocGrowFactor), + _memory_allocator(std::move(memory_allocator)) +{ +} + +template <typename ElemT> +DynamicArrayBufferType<ElemT>::DynamicArrayBufferType(DynamicArrayBufferType&& rhs) noexcept = default; template <typename ElemT> DynamicArrayBufferType<ElemT>::~DynamicArrayBufferType() = default; @@ -108,4 +112,11 @@ DynamicArrayBufferType<ElemT>::empty_entry() noexcept return empty; } +template <typename ElemT> +const vespalib::alloc::MemoryAllocator* +DynamicArrayBufferType<ElemT>::get_memory_allocator() const +{ + return _memory_allocator.get(); +} + } diff --git a/vespalib/src/vespa/vespalib/datastore/small_array_buffer_type.h b/vespalib/src/vespa/vespalib/datastore/small_array_buffer_type.h index 6bb6601839d..56239933ae2 100644 --- a/vespalib/src/vespa/vespalib/datastore/small_array_buffer_type.h +++ b/vespalib/src/vespa/vespalib/datastore/small_array_buffer_type.h @@ -21,7 +21,7 @@ class SmallArrayBufferType : public BufferType<ElemT> public: SmallArrayBufferType(const SmallArrayBufferType&) = delete; SmallArrayBufferType& operator=(const SmallArrayBufferType&) = delete; - SmallArrayBufferType(SmallArrayBufferType&&) noexcept = default; + SmallArrayBufferType(SmallArrayBufferType&&) noexcept; SmallArrayBufferType& operator=(SmallArrayBufferType&&) noexcept = default; SmallArrayBufferType(uint32_t array_size, const AllocSpec& spec, std::shared_ptr<alloc::MemoryAllocator> memory_allocator) noexcept; template <typename TypeMapper> diff --git a/vespalib/src/vespa/vespalib/datastore/small_array_buffer_type.hpp b/vespalib/src/vespa/vespalib/datastore/small_array_buffer_type.hpp index c9033936bd6..7378c8d0856 100644 --- a/vespalib/src/vespa/vespalib/datastore/small_array_buffer_type.hpp +++ b/vespalib/src/vespa/vespalib/datastore/small_array_buffer_type.hpp @@ -14,6 +14,9 @@ SmallArrayBufferType<ElemT>::SmallArrayBufferType(uint32_t array_size, const All } template <typename ElemT> +SmallArrayBufferType<ElemT>::SmallArrayBufferType(SmallArrayBufferType&&) noexcept = default; + +template <typename ElemT> SmallArrayBufferType<ElemT>::~SmallArrayBufferType() = default; template <typename ElemT> |