diff options
| author | Douglas Rumbaugh <dbr4@psu.edu> | 2024-02-07 10:56:52 -0500 |
|---|---|---|
| committer | Douglas Rumbaugh <dbr4@psu.edu> | 2024-02-07 10:56:52 -0500 |
| commit | 10b4425e842d10b7fbfa85978969ed4591d6b98e (patch) | |
| tree | 5918d1845f71aa0db7981e894c83f8d8252cd102 /include/query/wirs.h | |
| parent | 0ff3cedf5df9c27bccd3053ce6339e317f87ff76 (diff) | |
| download | dynamic-extension-10b4425e842d10b7fbfa85978969ed4591d6b98e.tar.gz | |
Fully implemented Query concept and adjusted queries to use it
Diffstat (limited to 'include/query/wirs.h')
| -rw-r--r-- | include/query/wirs.h | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/include/query/wirs.h b/include/query/wirs.h index 9b3d2ad..07c5292 100644 --- a/include/query/wirs.h +++ b/include/query/wirs.h @@ -12,9 +12,7 @@ */ #pragma once -#include "framework/interface/Record.h" -#include "framework/interface/Shard.h" -#include "framework/structure/MutableBuffer.h" +#include "framework/QueryRequirements.h" #include "psu-ds/Alias.h" namespace de { namespace wirs { @@ -52,6 +50,7 @@ struct BufferState { decltype(R::weight) max_weight; size_t sample_size; decltype(R::weight) total_weight; + BufferView<R> *buffer; ~BufferState() { delete alias; @@ -83,7 +82,7 @@ public: return res; } - static void* get_buffer_query_state(MutableBuffer<R> *buffer, void *parms) { + static void* get_buffer_query_state(BufferView<R> *buffer, void *parms) { BufferState<R> *state = new BufferState<R>(); auto parameters = (Parms<R>*) parms; @@ -92,16 +91,17 @@ public: state->max_weight = buffer->get_max_weight(); state->total_weight = buffer->get_total_weight(); state->sample_size = 0; + state->buffer = buffer; return state; } std::vector<decltype(R::weight)> weights; - state->cutoff = buffer->get_record_count() - 1; + state->buffer = buffer; decltype(R::weight) total_weight = 0; - for (size_t i = 0; i <= state->cutoff; i++) { - auto rec = buffer->get_data() + i; + for (size_t i = 0; i <= buffer->get_record_count(); i++) { + auto rec = buffer->get(i); if (rec->rec.key >= parameters->lower_bound && rec->rec.key <= parameters->upper_bound && !rec->is_tombstone() && !rec->is_deleted()) { weights.push_back(rec->rec.weight); @@ -190,9 +190,10 @@ public: return result_set; } - static std::vector<Wrapped<R>> buffer_query(MutableBuffer<R> *buffer, void *state, void *parms) { + static std::vector<Wrapped<R>> buffer_query(void *state, void *parms) { auto st = (BufferState<R> *) state; auto p = (Parms<R> *) parms; + auto buffer = st->buffer; std::vector<Wrapped<R>> result; result.reserve(st->sample_size); @@ -200,7 +201,7 @@ public: if constexpr (Rejection) { for (size_t i=0; i<st->sample_size; i++) { auto idx = gsl_rng_uniform_int(p->rng, st->cutoff); - auto rec = buffer->get_data() + idx; + auto rec = buffer->get(idx); auto test = gsl_rng_uniform(p->rng) * st->max_weight; |