Stratax 0.3.1
Loading...
Searching...
No Matches
Concepts.hpp
1#pragma once
2
3#include <concepts>
4#include <complex>
5#include <type_traits>
6
7#include <stratax/core/dtypes/Types.hpp>
8
9namespace stratax::core::concept_detail {
10
11template<typename T, typename... Candidates>
12concept SameAsAny =
13 (std::same_as<std::remove_cvref_t<T>, Candidates> || ...);
14
15template<typename T>
16concept BoolLike =
17 std::same_as<std::remove_cvref_t<T>, stratax::dtype::bool_>;
18
19template<typename T>
22 T,
23 stratax::dtype::int8,
24 stratax::dtype::int16,
25 stratax::dtype::int32,
26 stratax::dtype::int64,
27 stratax::dtype::uint8,
28 stratax::dtype::uint16,
29 stratax::dtype::uint32,
30 stratax::dtype::uint64>;
31
32template<typename T>
35 T,
36 stratax::dtype::float32,
37 stratax::dtype::float64,
38 stratax::dtype::longdouble>;
39
40template<typename T>
43 T,
44 stratax::dtype::complex64,
45 stratax::dtype::complex128,
46 stratax::dtype::clongdouble>;
47
48}
49
50template<typename T>
51concept Integral =
53
54template<typename T>
55concept Numeric =
59
60template<typename T>
61concept DType =
62 Numeric<T> ||
64
65namespace stratax::container {
66
68template<typename T>
69requires DType<T>
70class Vector;
71
73template<typename T>
74requires DType<T>
75class Matrix;
76
78template<typename T>
79requires DType<T>
80class Tensor;
81
82} // namespace stratax::container
83
92template<typename T>
93struct is_array : std::false_type {};
94
96template<typename T>
97requires DType<T>
98struct is_array<stratax::container::Vector<T>> : std::true_type {};
99
101template<typename T>
102requires DType<T>
103struct is_array<stratax::container::Matrix<T>> : std::true_type {};
104
106template<typename T>
107requires DType<T>
108struct is_array<stratax::container::Tensor<T>> : std::true_type {};
109
119template<typename T>
120concept Array =
122
123template<typename T>
124concept Ordered =
125 DType<T> &&
127
128template<typename T>
129concept RealNumeric =
130 Integral<T> ||
131 std::floating_point<std::remove_cvref_t<T>>;
Identifies supported Stratax owning array types.
Definition Concepts.hpp:120
Trait identifying supported Stratax owning array specializations.
Definition Concepts.hpp:93