/* * Copyright (C) 2021-present ScyllaDB */ /* * SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0 */ #pragma once #include "mutation_fragment_v2.hh" template concept FlatMutationReaderConsumer = requires(Consumer c, mutation_fragment mf) { { c(std::move(mf)) } -> std::same_as; } || requires(Consumer c, mutation_fragment mf) { { c(std::move(mf)) } -> std::same_as>; }; template concept FlattenedConsumerReturning = requires(T obj, const dht::decorated_key& dk, tombstone tomb, static_row sr, clustering_row cr, range_tombstone rt) { { obj.consume_new_partition(dk) }; { obj.consume(tomb) }; { obj.consume(std::move(sr)) } -> std::same_as; { obj.consume(std::move(cr)) } -> std::same_as; { obj.consume(std::move(rt)) } -> std::same_as; { obj.consume_end_of_partition() }; { obj.consume_end_of_stream() }; }; template concept FlattenedConsumer = FlattenedConsumerReturning || FlattenedConsumerReturning>; template concept FlattenedConsumerFilter = requires(T filter, const dht::decorated_key& dk, const mutation_fragment& mf) { { filter(dk) } -> std::same_as; { filter(mf) } -> std::same_as; { filter.on_end_of_stream() } -> std::same_as; }; template concept FlatMutationReaderConsumerV2 = requires(Consumer c, mutation_fragment_v2 mf) { { c(std::move(mf)) } -> std::same_as; } || requires(Consumer c, mutation_fragment_v2 mf) { { c(std::move(mf)) } -> std::same_as>; }; template concept MutationConsumer = requires(Consumer c, mutation m) { { c(std::move(m)) } -> std::same_as; } || requires(Consumer c, mutation m) { { c(std::move(m)) } -> std::same_as>; }; template concept FlattenedConsumerReturningV2 = requires(T obj, const dht::decorated_key& dk, tombstone tomb, static_row sr, clustering_row cr, range_tombstone_change rt) { { obj.consume_new_partition(dk) }; { obj.consume(tomb) }; { obj.consume(std::move(sr)) } -> std::same_as; { obj.consume(std::move(cr)) } -> std::same_as; { obj.consume(std::move(rt)) } -> std::same_as; { obj.consume_end_of_partition() }; { obj.consume_end_of_stream() }; }; template concept FlattenedConsumerV2 = FlattenedConsumerReturningV2 || FlattenedConsumerReturningV2>; template concept FlattenedConsumerFilterV2 = requires(T filter, const dht::decorated_key& dk, const mutation_fragment_v2& mf) { { filter(dk) } -> std::same_as; { filter(mf) } -> std::same_as; { filter.on_end_of_stream() } -> std::same_as; };