11#ifndef MARVIN_CONCEPTS_H
12#define MARVIN_CONCEPTS_H
30 concept ComplexFloatType = std::same_as<T, std::complex<float>> || std::same_as<T, std::complex<double>>;
39 concept NumericType = std::is_integral_v<T> || std::is_floating_point_v<T>;
46 std::same_as<std::int16_t, T> ||
47 std::same_as<std::int32_t, T> ||
48 std::same_as<std::int64_t, T>;
56 typename T::value_type;
58 requires std::contiguous_iterator<typename T::iterator>;
59 requires !std::same_as<std::string, T>;
60 { a.size() } -> std::same_as<size_t>;
61 { a[i] } -> std::same_as<typename T::value_type&>;
62 { a.data() } -> std::same_as<typename T::value_type*>;
79 typename T::element_type;
93 if constexpr (N == 1) {
95 }
else if constexpr (N == 0 || N % 2 != 0) {
103 concept RandomEngineType = std::same_as<T, std::mt19937> || std::same_as<T, std::mt19937_64> ||
104 std::same_as<T, std::minstd_rand0> || std::same_as<T, std::minstd_rand> ||
105 std::same_as<T, std::ranlux24_base> || std::same_as<T, std::ranlux48_base>;
Constrains T to a type that defines a const_iterator as a child, has an implementation of operator[](...
Definition marvin_Concepts.h:55
Definition marvin_Concepts.h:30
Constrains T to be a fixed width signed int.
Definition marvin_Concepts.h:45
Constrains T to be an Array like, with a Float-like value type.
Definition marvin_Concepts.h:69
Contrains T to be either a float or a double.
Definition marvin_Concepts.h:27
Constrains T to be any numeric type.
Definition marvin_Concepts.h:39
Definition marvin_Concepts.h:103
Definition marvin_Concepts.h:33
Constrains T to a class that implements get(), reset() operator*() and operator->().
Definition marvin_Concepts.h:78
A mostly harmless top-level namespace.
Definition marvin_BufferView.h:15
constexpr bool isPowerOfTwo()
Definition marvin_Concepts.h:92