Distributed Ranges
Loading...
Searching...
No Matches
concepts.hpp
1// SPDX-FileCopyrightText: Intel Corporation
2//
3// SPDX-License-Identifier: BSD-3-Clause
4
5#pragma once
6
7#include <dr/detail/ranges.hpp>
8
9namespace dr {
10
11template <typename I>
13 std::forward_iterator<I> && requires(I &iter) { dr::ranges::rank(iter); };
14
15template <typename R>
16concept remote_range =
17 rng::forward_range<R> && requires(R &r) { dr::ranges::rank(r); };
18
19template <typename R>
21 rng::forward_range<R> && requires(R &r) { dr::ranges::segments(r); };
22
23template <typename I>
25 std::random_access_iterator<I> && requires(I &iter) {
26 dr::ranges::rank(iter);
27 { dr::ranges::local(iter) } -> std::contiguous_iterator;
28 };
29
30template <typename I>
31concept distributed_iterator = std::forward_iterator<I> && requires(I &iter) {
32 dr::ranges::segments(iter);
33};
34
35template <typename R>
37 remote_range<R> && rng::random_access_range<R> && requires(R &r) {
38 { dr::ranges::local(r) } -> rng::contiguous_range;
39 };
40
41template <typename R>
43 distributed_range<R> && rng::random_access_range<R> &&
44 requires(R &r) {
45 { dr::ranges::segments(r) } -> rng::random_access_range;
46 } &&
48 rng::range_value_t<decltype(dr::ranges::segments(std::declval<R>()))>>;
49
50template <typename Iter>
52 distributed_iterator<Iter> && rng::random_access_iterator<Iter> &&
53 requires(Iter &iter) {
54 { dr::ranges::segments(iter) } -> rng::random_access_range;
55 } &&
56 remote_contiguous_range<rng::range_value_t<decltype(dr::ranges::segments(
57 std::declval<Iter>()))>>;
58
59} // namespace dr
Definition: concepts.hpp:51
Definition: concepts.hpp:42
Definition: concepts.hpp:31
Definition: concepts.hpp:20
Definition: concepts.hpp:24
Definition: concepts.hpp:36
Definition: concepts.hpp:12
Definition: concepts.hpp:16