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/wss.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/wss.h')
| -rw-r--r-- | include/query/wss.h | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/include/query/wss.h b/include/query/wss.h index 4c8861e..9f192ee 100644 --- a/include/query/wss.h +++ b/include/query/wss.h @@ -11,9 +11,8 @@ */ #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 wss { @@ -40,6 +39,7 @@ struct BufferState { psudb::Alias *alias; decltype(R::weight) max_weight; decltype(R::weight) total_weight; + BufferView<R> *buffer; ~BufferState() { delete alias; @@ -60,23 +60,24 @@ public: return res; } - static void* get_buffer_query_state(MutableBuffer<R> *buffer, void *parms) { + static void* get_buffer_query_state(BufferState<R> *buffer, void *parms) { BufferState<R> *state = new BufferState<R>(); auto parameters = (Parms<R>*) parms; if constexpr (Rejection) { state->cutoff = buffer->get_record_count() - 1; state->max_weight = buffer->get_max_weight(); state->total_weight = buffer->get_total_weight(); + state->buffer = buffer; return state; } std::vector<double> weights; - state->cutoff = buffer->get_record_count() - 1; double total_weight = 0.0; + state->buffer = buffer; - 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_data(i); weights.push_back(rec->rec.weight); total_weight += rec->rec.weight; } @@ -152,9 +153,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); @@ -162,7 +164,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; |