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/framework | |
| parent | 0ff3cedf5df9c27bccd3053ce6339e317f87ff76 (diff) | |
| download | dynamic-extension-10b4425e842d10b7fbfa85978969ed4591d6b98e.tar.gz | |
Fully implemented Query concept and adjusted queries to use it
Diffstat (limited to 'include/framework')
| -rw-r--r-- | include/framework/DynamicExtension.h | 2 | ||||
| -rw-r--r-- | include/framework/interface/Query.h | 25 | ||||
| -rw-r--r-- | include/framework/scheduling/Epoch.h | 2 | ||||
| -rw-r--r-- | include/framework/scheduling/Task.h | 4 | ||||
| -rw-r--r-- | include/framework/structure/ExtensionStructure.h | 2 | ||||
| -rw-r--r-- | include/framework/structure/InternalLevel.h | 4 |
6 files changed, 17 insertions, 22 deletions
diff --git a/include/framework/DynamicExtension.h b/include/framework/DynamicExtension.h index 3e9d0fb..5c021f2 100644 --- a/include/framework/DynamicExtension.h +++ b/include/framework/DynamicExtension.h @@ -31,7 +31,7 @@ namespace de { -template <RecordInterface R, ShardInterface S, QueryInterface Q, LayoutPolicy L=LayoutPolicy::TEIRING, +template <RecordInterface R, ShardInterface S, QueryInterface<R, S> Q, LayoutPolicy L=LayoutPolicy::TEIRING, DeletePolicy D=DeletePolicy::TAGGING, SchedulerInterface SCHED=SerialScheduler> class DynamicExtension { typedef S Shard; diff --git a/include/framework/interface/Query.h b/include/framework/interface/Query.h index ca742c3..8cf9660 100644 --- a/include/framework/interface/Query.h +++ b/include/framework/interface/Query.h @@ -8,31 +8,26 @@ */ #pragma once -#include <vector> +#include "framework/QueryRequirements.h" #include <concepts> -#include "util/types.h" - +namespace de{ // FIXME: The interface is not completely specified yet, as it is pending // determining a good way to handle additional template arguments // to get the Shard and Record types into play -template <typename Q> -concept QueryInterface = requires(Q q, void *p, std::vector<void*> &s) { - - /* - {Q::get_query_state(p, p)} -> std::convertible_to<void*>; - {Q::get_buffer_query_state(p, p)} -> std::convertible_to<void *>; - */ +template <typename Q, typename R, typename S> +concept QueryInterface = requires(void *p, S *sh, std::vector<void*> &s, std::vector<std::vector<Wrapped<R>>> &rv, BufferView<R> *bv) { + {Q::get_query_state(sh, p)} -> std::convertible_to<void*>; + {Q::get_buffer_query_state(bv, p)} -> std::convertible_to<void *>; {Q::process_query_states(p, s, p)}; - /* - {Q::query(s, p, p)} -> std::convertible_to<std::vector<Wrapped<R>>>; + {Q::query(sh, p, p)} -> std::convertible_to<std::vector<Wrapped<R>>>; {Q::buffer_query(p, p)} -> std::convertible_to<std::vector<Wrapped<R>>>; {Q::merge(rv, p)} -> std::convertible_to<std::vector<R>>; - */ - {Q::delete_query_state(std::declval<void*>())} -> std::same_as<void>; - {Q::delete_buffer_query_state(std::declval<void*>())} -> std::same_as<void>; + {Q::delete_query_state(p)} -> std::same_as<void>; + {Q::delete_buffer_query_state(p)} -> std::same_as<void>; {Q::EARLY_ABORT} -> std::convertible_to<bool>; {Q::SKIP_DELETE_FILTER} -> std::convertible_to<bool>; }; +} diff --git a/include/framework/scheduling/Epoch.h b/include/framework/scheduling/Epoch.h index 7b533b6..48b7742 100644 --- a/include/framework/scheduling/Epoch.h +++ b/include/framework/scheduling/Epoch.h @@ -18,7 +18,7 @@ namespace de { -template <RecordInterface R, ShardInterface S, QueryInterface Q, LayoutPolicy L> +template <RecordInterface R, ShardInterface S, QueryInterface<R, S> Q, LayoutPolicy L> class Epoch { private: typedef MutableBuffer<R> Buffer; diff --git a/include/framework/scheduling/Task.h b/include/framework/scheduling/Task.h index 6f6b913..ba0001d 100644 --- a/include/framework/scheduling/Task.h +++ b/include/framework/scheduling/Task.h @@ -18,7 +18,7 @@ namespace de { -template <RecordInterface R, ShardInterface S, QueryInterface Q, LayoutPolicy L> +template <RecordInterface R, ShardInterface S, QueryInterface<R, S> Q, LayoutPolicy L> struct ReconstructionArgs { Epoch<R, S, Q, L> *epoch; std::vector<ReconstructionTask> merges; @@ -27,7 +27,7 @@ struct ReconstructionArgs { void *extension; }; -template <RecordInterface R, ShardInterface S, QueryInterface Q, LayoutPolicy L> +template <RecordInterface R, ShardInterface S, QueryInterface<R, S> Q, LayoutPolicy L> struct QueryArgs { std::promise<std::vector<R>> result_set; void *query_parms; diff --git a/include/framework/structure/ExtensionStructure.h b/include/framework/structure/ExtensionStructure.h index ae566cb..0b8263e 100644 --- a/include/framework/structure/ExtensionStructure.h +++ b/include/framework/structure/ExtensionStructure.h @@ -22,7 +22,7 @@ namespace de { -template <RecordInterface R, ShardInterface S, QueryInterface Q, LayoutPolicy L=LayoutPolicy::TEIRING> +template <RecordInterface R, ShardInterface S, QueryInterface<R, S> Q, LayoutPolicy L=LayoutPolicy::TEIRING> class ExtensionStructure { typedef S Shard; typedef BufferView<R> BuffView; diff --git a/include/framework/structure/InternalLevel.h b/include/framework/structure/InternalLevel.h index e9874e0..0fd5275 100644 --- a/include/framework/structure/InternalLevel.h +++ b/include/framework/structure/InternalLevel.h @@ -19,12 +19,12 @@ #include "framework/structure/BufferView.h" namespace de { -template <RecordInterface R, ShardInterface S, QueryInterface Q> +template <RecordInterface R, ShardInterface S, QueryInterface<R, S> Q> class InternalLevel; -template <RecordInterface R, ShardInterface S, QueryInterface Q> +template <RecordInterface R, ShardInterface S, QueryInterface<R, S> Q> class InternalLevel { typedef S Shard; typedef BufferView<R> BuffView; |