summaryrefslogtreecommitdiffstats
path: root/include/framework/structure/BufferView.h
diff options
context:
space:
mode:
authorDouglas Rumbaugh <dbr4@psu.edu>2024-01-10 17:39:28 -0500
committerDouglas Rumbaugh <dbr4@psu.edu>2024-01-10 17:39:28 -0500
commit53879a0d69f5e578710b7125e9b41e516c2371d4 (patch)
treee036c77f11f07c0823eb7db9bce52269fdac6312 /include/framework/structure/BufferView.h
parent3c2e6b3b456867d7155b158432b891b84e4e1dd6 (diff)
downloaddynamic-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.h32
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;