/* * include/framework/structure/BufferView.h * * Copyright (C) 2023 Douglas B. Rumbaugh * * Distributed under the Modified BSD License. * */ #pragma once #include #include #include #include #include #include #include #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 { template class BufferView { public: BufferView() = default; BufferView(const Wrapped *buffer, size_t head, size_t tail, psudb::BloomFilter *filter) : m_buffer(buffer), m_head(head), m_tail(tail), m_tombstone_filter(filter) {} ~BufferView() = default; bool check_tombstone(const R& rec) { if (m_tombstone_filter && !m_tombstone_filter->lookup(rec)) return false; for (size_t i=0; i *get(size_t i) { assert(i < get_record_count()); return m_buffer + to_idx(i); } void copy_to_buffer(byte *buffer) { memcpy(buffer, m_buffer, get_record_count() * sizeof(Wrapped)); } private: const Wrapped* m_buffer; size_t m_head; size_t m_tail; psudb::BloomFilter *m_tombstone_filter; size_t to_idx(size_t i) { return (m_head + i) % m_buffer->get_capacity(); } }; }