summaryrefslogtreecommitdiffstats
path: root/include/query/wss.h
diff options
context:
space:
mode:
authorDouglas Rumbaugh <dbr4@psu.edu>2024-02-07 10:56:52 -0500
committerDouglas Rumbaugh <dbr4@psu.edu>2024-02-07 10:56:52 -0500
commit10b4425e842d10b7fbfa85978969ed4591d6b98e (patch)
tree5918d1845f71aa0db7981e894c83f8d8252cd102 /include/query/wss.h
parent0ff3cedf5df9c27bccd3053ce6339e317f87ff76 (diff)
downloaddynamic-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.h20
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;