diff options
| author | Douglas Rumbaugh <dbr4@psu.edu> | 2024-02-07 13:42:34 -0500 |
|---|---|---|
| committer | Douglas Rumbaugh <dbr4@psu.edu> | 2024-02-07 13:42:34 -0500 |
| commit | 2c5d549b3618b9ea72e6eece4cb4f3da5a6811a8 (patch) | |
| tree | 17e08973d38bd20b8358aeb77a90c99cd7f1c835 /include/framework | |
| parent | 10b4425e842d10b7fbfa85978969ed4591d6b98e (diff) | |
| download | dynamic-extension-2c5d549b3618b9ea72e6eece4cb4f3da5a6811a8.tar.gz | |
Fully realized shard concept interface
Diffstat (limited to 'include/framework')
| -rw-r--r-- | include/framework/DynamicExtension.h | 2 | ||||
| -rw-r--r-- | include/framework/interface/Shard.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, 16 insertions, 23 deletions
diff --git a/include/framework/DynamicExtension.h b/include/framework/DynamicExtension.h index 5c021f2..d88a945 100644 --- a/include/framework/DynamicExtension.h +++ b/include/framework/DynamicExtension.h @@ -31,7 +31,7 @@ namespace de { -template <RecordInterface R, ShardInterface S, QueryInterface<R, S> Q, LayoutPolicy L=LayoutPolicy::TEIRING, +template <RecordInterface R, ShardInterface<R> 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/Shard.h b/include/framework/interface/Shard.h index 8c4db34..c4a9180 100644 --- a/include/framework/interface/Shard.h +++ b/include/framework/interface/Shard.h @@ -8,25 +8,17 @@ */ #pragma once -#include <concepts> - -#include "util/types.h" -#include "framework/interface/Record.h" -#include <vector> +#include "framework/ShardRequirements.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 Record type into play -template <typename S> -concept ShardInterface = requires(S s, std::vector<S*> spp, void *p, bool b, size_t i) { +template <typename S, typename R> +concept ShardInterface = RecordInterface<R> && requires(S s, std::vector<S*> spp, void *p, bool b, size_t i, BufferView<R> bv, R r) { {S(spp)}; - /* - {S(mutable buffer)} - {s.point_lookup(r, b) } -> std::convertible_to<void*> - */ - {s.get_data()} -> std::convertible_to<void*>; + {S(std::move(bv))}; + + {s.point_lookup(r, b) } -> std::same_as<Wrapped<R>*>; + {s.get_data()} -> std::same_as<Wrapped<R>*>; {s.get_record_count()} -> std::convertible_to<size_t>; {s.get_tombstone_count()} -> std::convertible_to<size_t>; @@ -35,9 +27,10 @@ concept ShardInterface = requires(S s, std::vector<S*> spp, void *p, bool b, siz }; template <typename S, typename R> -concept SortedShardInterface = ShardInterface<S> && requires(S s, R r, R *rp) { +concept SortedShardInterface = ShardInterface<S, R> && requires(S s, R r, R *rp, size_t i) { {s.lower_bound(r)} -> std::convertible_to<size_t>; {s.upper_bound(r)} -> std::convertible_to<size_t>; + {s.get_record_at(i)} -> std::same_as<Wrapped<R>*>; }; } diff --git a/include/framework/scheduling/Epoch.h b/include/framework/scheduling/Epoch.h index 48b7742..e58bd11 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<R, S> Q, LayoutPolicy L> +template <RecordInterface R, ShardInterface<R> 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 ba0001d..008f232 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<R, S> Q, LayoutPolicy L> +template <RecordInterface R, ShardInterface<R> 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<R, S> Q, LayoutPolicy L> +template <RecordInterface R, ShardInterface<R> 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 0b8263e..373a1e2 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<R, S> Q, LayoutPolicy L=LayoutPolicy::TEIRING> +template <RecordInterface R, ShardInterface<R> 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 0fd5275..d586869 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<R, S> Q> +template <RecordInterface R, ShardInterface<R> S, QueryInterface<R, S> Q> class InternalLevel; -template <RecordInterface R, ShardInterface S, QueryInterface<R, S> Q> +template <RecordInterface R, ShardInterface<R> S, QueryInterface<R, S> Q> class InternalLevel { typedef S Shard; typedef BufferView<R> BuffView; |