Files
scylladb/mutation/mutation_consumer_concepts.hh
Avi Kivity c5e4bf51bd Introduce mutation/ module
Move mutation-related files to a new mutation/ directory. The names
are kept in the global namespace to reduce churn; the names are
unambiguous in any case.

mutation_reader remains in the readers/ module.

mutation_partition_v2.cc was missing from CMakeLists.txt; it's added in this
patch.

This is a step forward towards librarization or modularization of the
source base.

Closes #12788
2023-02-14 11:19:03 +02:00

66 lines
2.1 KiB
C++

/*
* Copyright (C) 2021-present ScyllaDB
*/
/*
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
#pragma once
#include "mutation_fragment_v2.hh"
template<typename Consumer>
concept FlatMutationReaderConsumer =
requires(Consumer c, mutation_fragment mf) {
{ c(std::move(mf)) } -> std::same_as<stop_iteration>;
} || requires(Consumer c, mutation_fragment mf) {
{ c(std::move(mf)) } -> std::same_as<future<stop_iteration>>;
};
template<typename T>
concept FlattenedConsumer =
StreamedMutationConsumer<T> && requires(T obj, const dht::decorated_key& dk) {
{ obj.consume_new_partition(dk) };
{ obj.consume_end_of_partition() };
};
template<typename T>
concept FlattenedConsumerFilter =
requires(T filter, const dht::decorated_key& dk, const mutation_fragment& mf) {
{ filter(dk) } -> std::same_as<bool>;
{ filter(mf) } -> std::same_as<bool>;
{ filter.on_end_of_stream() } -> std::same_as<void>;
};
template<typename Consumer>
concept FlatMutationReaderConsumerV2 =
requires(Consumer c, mutation_fragment_v2 mf) {
{ c(std::move(mf)) } -> std::same_as<stop_iteration>;
} || requires(Consumer c, mutation_fragment_v2 mf) {
{ c(std::move(mf)) } -> std::same_as<future<stop_iteration>>;
};
template<typename Consumer>
concept MutationConsumer =
requires(Consumer c, mutation m) {
{ c(std::move(m)) } -> std::same_as<stop_iteration>;
} || requires(Consumer c, mutation m) {
{ c(std::move(m)) } -> std::same_as<future<stop_iteration>>;
};
template<typename T>
concept FlattenedConsumerV2 =
StreamedMutationConsumerV2<T> && requires(T obj, const dht::decorated_key& dk) {
{ obj.consume_new_partition(dk) };
{ obj.consume_end_of_partition() };
};
template<typename T>
concept FlattenedConsumerFilterV2 =
requires(T filter, const dht::decorated_key& dk, const mutation_fragment_v2& mf) {
{ filter(dk) } -> std::same_as<bool>;
{ filter(mf) } -> std::same_as<bool>;
{ filter.on_end_of_stream() } -> std::same_as<void>;
};