aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--vespalib/src/tests/datastore/dynamic_array_buffer_type/dynamic_array_buffer_type_test.cpp5
-rw-r--r--vespalib/src/vespa/vespalib/datastore/array_store.h6
-rw-r--r--vespalib/src/vespa/vespalib/datastore/array_store.hpp6
-rw-r--r--vespalib/src/vespa/vespalib/datastore/dynamic_array_buffer_type.h15
-rw-r--r--vespalib/src/vespa/vespalib/datastore/dynamic_array_buffer_type.hpp19
-rw-r--r--vespalib/src/vespa/vespalib/datastore/small_array_buffer_type.h2
-rw-r--r--vespalib/src/vespa/vespalib/datastore/small_array_buffer_type.hpp3
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>