diff options
author | Tor Egge <Tor.Egge@online.no> | 2022-10-03 16:14:37 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2022-10-03 16:14:37 +0200 |
commit | d2eefff31692a1e5d18461fdde987512be7e58dc (patch) | |
tree | 5e385e5c42ac48cc6a13ae19f43551a10f42b44d /vespalib | |
parent | 73c11ef2eb40d941593d1616255f44cd66dfefd0 (diff) |
Remove AlignedEntryRef.
Diffstat (limited to 'vespalib')
9 files changed, 24 insertions, 92 deletions
diff --git a/vespalib/src/tests/datastore/datastore/datastore_test.cpp b/vespalib/src/tests/datastore/datastore/datastore_test.cpp index 964978e5510..b77599c4e34 100644 --- a/vespalib/src/tests/datastore/datastore/datastore_test.cpp +++ b/vespalib/src/tests/datastore/datastore/datastore_test.cpp @@ -215,34 +215,6 @@ TEST(DataStoreTest, require_that_entry_ref_is_working) } } -TEST(DataStoreTest, require_that_aligned_entry_ref_is_working) -{ - using MyRefType = AlignedEntryRefT<22, 2>; // 4 byte alignement - EXPECT_EQ(16_Mi, MyRefType::offsetSize()); - EXPECT_EQ(1_Ki, MyRefType::numBuffers()); - EXPECT_EQ(0u, MyRefType::align(0)); - EXPECT_EQ(4u, MyRefType::align(1)); - EXPECT_EQ(4u, MyRefType::align(2)); - EXPECT_EQ(4u, MyRefType::align(3)); - EXPECT_EQ(4u, MyRefType::align(4)); - EXPECT_EQ(8u, MyRefType::align(5)); - { - MyRefType r(0, 0); - EXPECT_EQ(0u, r.offset()); - EXPECT_EQ(0u, r.bufferId()); - } - { - MyRefType r(237, 13); - EXPECT_EQ(MyRefType::align(237), r.offset()); - EXPECT_EQ(13u, r.bufferId()); - } - { - MyRefType r(MyRefType::offsetSize() - 4, 1023); - EXPECT_EQ(MyRefType::align(MyRefType::offsetSize() - 4), r.offset()); - EXPECT_EQ(1023u, r.bufferId()); - } -} - TEST(DataStoreTest, require_that_entries_can_be_added_and_retrieved) { using IntStore = DataStore<int>; diff --git a/vespalib/src/vespa/vespalib/datastore/datastore.hpp b/vespalib/src/vespa/vespalib/datastore/datastore.hpp index 666da55975c..4d09ffe4bc6 100644 --- a/vespalib/src/vespa/vespalib/datastore/datastore.hpp +++ b/vespalib/src/vespa/vespalib/datastore/datastore.hpp @@ -13,8 +13,7 @@ namespace vespalib::datastore { template <typename RefT> DataStoreT<RefT>::DataStoreT() - : DataStoreBase(RefType::numBuffers(), - RefType::unscaled_offset_size()) + : DataStoreBase(RefType::numBuffers(), RefType::offsetSize()) { } @@ -42,7 +41,7 @@ DataStoreT<RefT>::free_elem_internal(EntryRef ref, size_t numElems, bool was_hel state.decHoldElems(numElems); } state.cleanHold(getBuffer(intRef.bufferId()), - intRef.unscaled_offset() * state.getArraySize(), numElems); + intRef.offset() * state.getArraySize(), numElems); } template <typename RefT> @@ -50,15 +49,14 @@ void DataStoreT<RefT>::holdElem(EntryRef ref, size_t numElems, size_t extraBytes) { RefType intRef(ref); - size_t alignedLen = RefType::align(numElems); BufferState &state = getBufferState(intRef.bufferId()); assert(state.isActive()); if (state.hasDisabledElemHoldList()) { - state.incDeadElems(alignedLen); + state.incDeadElems(numElems); return; } - _elemHold1List.push_back(ElemHold1ListElem(ref, alignedLen)); - state.incHoldElems(alignedLen); + _elemHold1List.push_back(ElemHold1ListElem(ref, numElems)); + state.incHoldElems(numElems); state.incExtraHoldBytes(extraBytes); } diff --git a/vespalib/src/vespa/vespalib/datastore/entryref.h b/vespalib/src/vespa/vespalib/datastore/entryref.h index 7667cc3d2c1..a0016f4fdcb 100644 --- a/vespalib/src/vespa/vespalib/datastore/entryref.h +++ b/vespalib/src/vespa/vespalib/datastore/entryref.h @@ -40,34 +40,6 @@ public: uint32_t bufferId() const noexcept { return _ref >> OffsetBits; } static size_t offsetSize() noexcept { return 1ul << OffsetBits; } static uint32_t numBuffers() noexcept { return 1 << BufferBits; } - static size_t align(size_t val) noexcept { return val; } - static size_t pad(size_t val) noexcept { (void) val; return 0ul; } - static constexpr bool isAlignedType = false; - // TODO: Remove following temporary methods when removing - // AlignedEntryRefT - size_t unscaled_offset() const noexcept { return offset(); } - static size_t unscaled_offset_size() noexcept { return offsetSize(); } -}; - -/** - * Class for entry reference that is similar to EntryRefT, - * except that we use (2^OffsetAlign) byte alignment on the offset. - **/ -template <uint32_t OffsetBits, uint32_t OffsetAlign> -class AlignedEntryRefT : public EntryRefT<OffsetBits> { -private: - typedef EntryRefT<OffsetBits> ParentType; - static const uint32_t PadConstant = ((1 << OffsetAlign) - 1); -public: - AlignedEntryRefT() noexcept : ParentType() {} - AlignedEntryRefT(size_t offset_, uint32_t bufferId_) noexcept : - ParentType(align(offset_) >> OffsetAlign, bufferId_) {} - AlignedEntryRefT(const EntryRef & ref_) noexcept : ParentType(ref_) {} - size_t offset() const { return ParentType::offset() << OffsetAlign; } - static size_t offsetSize() { return ParentType::offsetSize() << OffsetAlign; } - static size_t align(size_t val) { return val + pad(val); } - static size_t pad(size_t val) { return (-val & PadConstant); } - static constexpr bool isAlignedType = true; }; vespalib::asciistream& operator<<(vespalib::asciistream& os, const EntryRef& ref); diff --git a/vespalib/src/vespa/vespalib/datastore/free_list_raw_allocator.hpp b/vespalib/src/vespa/vespalib/datastore/free_list_raw_allocator.hpp index 55d57b1bcb9..c4689cd9e4a 100644 --- a/vespalib/src/vespa/vespalib/datastore/free_list_raw_allocator.hpp +++ b/vespalib/src/vespa/vespalib/datastore/free_list_raw_allocator.hpp @@ -24,10 +24,8 @@ FreeListRawAllocator<EntryT, RefT>::alloc(size_t numElems) assert(state.isActive()); assert(state.getArraySize() == numElems); RefT ref = state.popFreeList(); - // If entry ref is not aligned we must scale the offset according to array size as it was divided when the entry ref was created. - EntryT *entry = !RefT::isAlignedType ? - _store.template getEntryArray<EntryT>(ref, state.getArraySize()) : - _store.template getEntry<EntryT>(ref); + // We must scale the offset according to array size as it was divided when the entry ref was created. + EntryT *entry = _store.template getEntryArray<EntryT>(ref, state.getArraySize()); return HandleType(ref, entry); } diff --git a/vespalib/src/vespa/vespalib/datastore/raw_allocator.hpp b/vespalib/src/vespa/vespalib/datastore/raw_allocator.hpp index a17c3a28ced..0d67bf71c20 100644 --- a/vespalib/src/vespa/vespalib/datastore/raw_allocator.hpp +++ b/vespalib/src/vespa/vespalib/datastore/raw_allocator.hpp @@ -23,21 +23,13 @@ RawAllocator<EntryT, RefT>::alloc(size_t numElems, size_t extraElems) BufferState &state = _store.getBufferState(buffer_id); assert(state.isActive()); size_t oldBufferSize = state.size(); - if (RefT::isAlignedType) { - // AlignedEntryRef constructor scales down offset by alignment - RefT ref(oldBufferSize, buffer_id); - EntryT *buffer = _store.getEntry<EntryT>(ref); - state.pushed_back(numElems); - return HandleType(ref, buffer); - } else { - // Must perform scaling ourselves, according to array size - size_t arraySize = state.getArraySize(); - assert((numElems % arraySize) == 0u); - RefT ref((oldBufferSize / arraySize), buffer_id); - EntryT *buffer = _store.getEntryArray<EntryT>(ref, arraySize); - state.pushed_back(numElems); - return HandleType(ref, buffer); - } + // Must perform scaling ourselves, according to array size + size_t arraySize = state.getArraySize(); + assert((numElems % arraySize) == 0u); + RefT ref((oldBufferSize / arraySize), buffer_id); + EntryT *buffer = _store.getEntryArray<EntryT>(ref, arraySize); + state.pushed_back(numElems); + return HandleType(ref, buffer); } } diff --git a/vespalib/src/vespa/vespalib/datastore/unique_store.hpp b/vespalib/src/vespa/vespalib/datastore/unique_store.hpp index a252763fb5b..cbb8369e1f2 100644 --- a/vespalib/src/vespa/vespalib/datastore/unique_store.hpp +++ b/vespalib/src/vespa/vespalib/datastore/unique_store.hpp @@ -113,8 +113,8 @@ private: RefT iRef(oldRef); uint32_t buffer_id = iRef.bufferId(); auto &inner_mapping = _mapping[buffer_id]; - assert(iRef.unscaled_offset() < inner_mapping.size()); - EntryRef &mappedRef = inner_mapping[iRef.unscaled_offset()]; + assert(iRef.offset() < inner_mapping.size()); + EntryRef &mappedRef = inner_mapping[iRef.offset()]; assert(!mappedRef.valid()); EntryRef newRef = _store.move(oldRef); mappedRef = newRef; diff --git a/vespalib/src/vespa/vespalib/datastore/unique_store_enumerator.h b/vespalib/src/vespa/vespalib/datastore/unique_store_enumerator.h index e6627eb80e6..c4baff2206b 100644 --- a/vespalib/src/vespa/vespalib/datastore/unique_store_enumerator.h +++ b/vespalib/src/vespa/vespalib/datastore/unique_store_enumerator.h @@ -47,8 +47,8 @@ public: uint32_t mapEntryRefToEnumValue(EntryRef ref) const { if (ref.valid()) { RefType iRef(ref); - assert(iRef.unscaled_offset() < _enumValues[iRef.bufferId()].size()); - uint32_t enumValue = _enumValues[iRef.bufferId()][iRef.unscaled_offset()]; + assert(iRef.offset() < _enumValues[iRef.bufferId()].size()); + uint32_t enumValue = _enumValues[iRef.bufferId()][iRef.offset()]; assert(enumValue != 0); return enumValue; } else { @@ -59,8 +59,8 @@ public: uint32_t map_entry_ref_to_enum_value_or_zero(EntryRef ref) const { if (ref.valid()) { RefType iRef(ref); - if (iRef.unscaled_offset() < _enumValues[iRef.bufferId()].size()) { - return _enumValues[iRef.bufferId()][iRef.unscaled_offset()]; + if (iRef.offset() < _enumValues[iRef.bufferId()].size()) { + return _enumValues[iRef.bufferId()][iRef.offset()]; } else { return 0u; } diff --git a/vespalib/src/vespa/vespalib/datastore/unique_store_enumerator.hpp b/vespalib/src/vespa/vespalib/datastore/unique_store_enumerator.hpp index 0cc6b4eded2..52437fc765c 100644 --- a/vespalib/src/vespa/vespalib/datastore/unique_store_enumerator.hpp +++ b/vespalib/src/vespa/vespalib/datastore/unique_store_enumerator.hpp @@ -31,8 +31,8 @@ UniqueStoreEnumerator<RefT>::enumerateValue(EntryRef ref) { RefType iRef(ref); assert(iRef.valid()); - assert(iRef.unscaled_offset() < _enumValues[iRef.bufferId()].size()); - uint32_t &enumVal = _enumValues[iRef.bufferId()][iRef.unscaled_offset()]; + assert(iRef.offset() < _enumValues[iRef.bufferId()].size()); + uint32_t &enumVal = _enumValues[iRef.bufferId()][iRef.offset()]; assert(enumVal == 0u); enumVal = _next_enum_val; ++_next_enum_val; diff --git a/vespalib/src/vespa/vespalib/datastore/unique_store_remapper.h b/vespalib/src/vespa/vespalib/datastore/unique_store_remapper.h index 80486f55ad8..4babd6204c7 100644 --- a/vespalib/src/vespa/vespalib/datastore/unique_store_remapper.h +++ b/vespalib/src/vespa/vespalib/datastore/unique_store_remapper.h @@ -32,8 +32,8 @@ public: EntryRef remap(EntryRef ref) const { RefType internal_ref(ref); auto &inner_mapping = _mapping[internal_ref.bufferId()]; - assert(internal_ref.unscaled_offset() < inner_mapping.size()); - EntryRef mapped_ref = inner_mapping[internal_ref.unscaled_offset()]; + assert(internal_ref.offset() < inner_mapping.size()); + EntryRef mapped_ref = inner_mapping[internal_ref.offset()]; assert(mapped_ref.valid()); return mapped_ref; } |