summaryrefslogtreecommitdiffstats
path: root/include/query/wirs.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/wirs.h
parent0ff3cedf5df9c27bccd3053ce6339e317f87ff76 (diff)
downloaddynamic-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.h19
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;