diff options
| author | Douglas Rumbaugh <dbr4@psu.edu> | 2024-01-10 17:39:28 -0500 |
|---|---|---|
| committer | Douglas Rumbaugh <dbr4@psu.edu> | 2024-01-10 17:39:28 -0500 |
| commit | 53879a0d69f5e578710b7125e9b41e516c2371d4 (patch) | |
| tree | e036c77f11f07c0823eb7db9bce52269fdac6312 /include/framework/structure/BufferView.h | |
| parent | 3c2e6b3b456867d7155b158432b891b84e4e1dd6 (diff) | |
| download | dynamic-extension-53879a0d69f5e578710b7125e9b41e516c2371d4.tar.gz | |
MutableBuffer+View: Implementation with unit tests
Diffstat (limited to 'include/framework/structure/BufferView.h')
| -rw-r--r-- | include/framework/structure/BufferView.h | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/include/framework/structure/BufferView.h b/include/framework/structure/BufferView.h index 8a5f50f..7e8af45 100644 --- a/include/framework/structure/BufferView.h +++ b/include/framework/structure/BufferView.h @@ -9,32 +9,34 @@ #pragma once #include <cstdlib> -#include <atomic> -#include <condition_variable> #include <cassert> -#include <numeric> -#include <algorithm> -#include <type_traits> +#include <functional> #include "psu-util/alignment.h" -#include "util/bf_config.h" #include "psu-ds/BloomFilter.h" -#include "psu-ds/Alias.h" -#include "psu-util/timer.h" #include "framework/interface/Record.h" -#include "framework/interface/Query.h" namespace de { +typedef std::function<void(void*, size_t)> ReleaseFunction; + template <RecordInterface R> class BufferView { public: BufferView() = default; - BufferView(const Wrapped<R> *buffer, size_t head, size_t tail, psudb::BloomFilter<R> *filter) - : m_buffer(buffer), m_head(head), m_tail(tail), m_tombstone_filter(filter) {} + BufferView(const Wrapped<R> *buffer, size_t head, size_t tail, psudb::BloomFilter<R> *filter, + void *parent_buffer, ReleaseFunction release) + : m_buffer(buffer) + , m_release(release) + , m_parent_buffer(parent_buffer) + , m_head(head) + , m_tail(tail) + , m_tombstone_filter(filter) {} - ~BufferView() = default; + ~BufferView() { + m_release(m_parent_buffer, m_head); + } bool check_tombstone(const R& rec) { if (m_tombstone_filter && !m_tombstone_filter->lookup(rec)) return false; @@ -62,12 +64,14 @@ public: return m_buffer + to_idx(i); } - void copy_to_buffer(byte *buffer) { - memcpy(buffer, m_buffer, get_record_count() * sizeof(Wrapped<R>)); + void copy_to_buffer(psudb::byte *buffer) { + memcpy(buffer, (std::byte*) (m_buffer + m_head), get_record_count() * sizeof(Wrapped<R>)); } private: const Wrapped<R>* m_buffer; + void *m_parent_buffer; + ReleaseFunction m_release; size_t m_head; size_t m_tail; psudb::BloomFilter<R> *m_tombstone_filter; |