alpaka
Abstraction Library for Parallel Kernel Acceleration
Loading...
Searching...
No Matches
concepts.hpp
Go to the documentation of this file.
1/* Copyright 2025 Tim Hanel, René Widera
2 * SPDX-License-Identifier: MPL-2.0
3 */
4#pragma once
5#include "alpaka/Vec.hpp"
7
8#include <concepts>
9
10namespace alpaka::rand
11{
12 namespace concepts
13 {
14 /** @brief Concept defining a valid interval tag used to specify distribution bounds. */
15 template<typename T>
17
18 /** @brief Concept wrapper for std::uniform_random_bit_generator using alpaka scheme.
19 * @see https://en.cppreference.com/w/cpp/numeric/random/UniformRandomBitGenerator
20 */
21 template<typename T>
22 concept UniformStdEngine = std::uniform_random_bit_generator<T>;
23
24 /**
25 * Concept for random-engines which return a vector. This mirrors std::uniform_random_bit_generator, except
26 * that the return type must be a Vector.
27 */
28 template<typename T>
30 = std::invocable<T&> && alpaka::concepts::Vector<std::invoke_result_t<T&>> && requires {
31 { T::min() } -> std::same_as<typename std::invoke_result_t<T&>::type>;
32 { T::max() } -> std::same_as<typename std::invoke_result_t<T&>::type>;
33 requires std::bool_constant<(T::min() < T::max())>::value;
34 };
35
36 /**
37 * Unified concept for alpaka-compatible uniform random engines.
38 * A type satisfies this concept if it is either a standard
39 * uniform random bit generator or UniformVectorEngine.
40 */
41 template<typename T>
43 } // namespace concepts
44
45 constexpr bool operator==(concepts::Interval auto lhs, concepts::Interval auto rhs) noexcept
46 {
47 return std::is_same_v<ALPAKA_TYPEOF(lhs), ALPAKA_TYPEOF(rhs)>;
48 }
49
50 constexpr bool operator!=(concepts::Interval auto lhs, concepts::Interval auto rhs) noexcept
51 {
52 return !(lhs == rhs);
53 }
54} // namespace alpaka::rand
#define ALPAKA_TYPEOF(...)
Get the type of instance.
Definition common.hpp:154
Concept to check if a type is a vector.
Definition Vec.hpp:54
Concept defining a valid interval tag used to specify distribution bounds.
Definition concepts.hpp:16
Unified concept for alpaka-compatible uniform random engines.
Definition concepts.hpp:42
Concept wrapper for std::uniform_random_bit_generator using alpaka scheme.
Definition concepts.hpp:22
Concept for random-engines which return a vector.
Definition concepts.hpp:30
constexpr bool isInterval_v
Definition interval.hpp:57
constexpr bool operator!=(concepts::Interval auto lhs, concepts::Interval auto rhs) noexcept
Definition concepts.hpp:50
constexpr bool operator==(concepts::Interval auto lhs, concepts::Interval auto rhs) noexcept
Definition concepts.hpp:45