xcal
基于 C++23 的现代图形渲染引擎
载入中...
搜索中...
未找到
third_party
xcmath
xcmath
utils
concepts.h
浏览该文件的文档.
1
// mathconcepts.h
2
#pragma once
3
#ifndef MATHCONCEPTS_H
4
#define MATHCONCEPTS_H
5
#include <concepts>
6
7
namespace
xcmath
{
8
namespace
concepts {
9
template
<
typename
_Tp1,
typename
_Tp2 = _Tp1,
typename
_RTp = _Tp1>
10
concept
Add
=
requires
(_Tp1 a, _Tp2 b) {
11
{ a + b } -> std::same_as<_RTp>;
12
};
13
template
<
typename
_Tp1,
typename
_Tp2 = _Tp1,
typename
_RTp = _Tp1>
14
concept
Subtract
=
requires
(_Tp1 a, _Tp2 b) {
15
{ a - b } -> std::same_as<_RTp>;
16
};
17
template
<
typename
_Tp1,
typename
_Tp2 = _Tp1,
typename
_RTp = _Tp1>
18
concept
Muitiply
=
requires
(_Tp1 a, _Tp2 b) {
19
{ a* b } -> std::same_as<_RTp>;
20
};
21
template
<
typename
_Tp1,
typename
_Tp2 = _Tp1,
typename
_RTp = _Tp1>
22
concept
Divide
=
requires
(_Tp1 a, _Tp2 b) {
23
{ a / b } -> std::same_as<_RTp>;
24
};
25
template
<
typename
_Tp1,
typename
_RTp = _Tp1>
26
concept
Minus
=
requires
(_Tp1 a) {
27
{ -a } -> std::same_as<_RTp>;
28
};
29
template
<
typename
_Tp1,
typename
_RTp = _Tp1>
30
concept
Sqrt
=
requires
(_Tp1 x) {
31
{ sqrt(x) } -> std::same_as<_RTp>;
32
};
33
template
<
typename
Tp1,
typename
Tp2>
34
concept
lt
=
requires
(Tp1 a, Tp2 b) {
35
{ a < b } -> std::same_as<bool>;
36
};
37
template
<
typename
Tp1,
typename
Tp2>
38
concept
le
=
requires
(Tp1 a, Tp2 b) {
39
{ a <= b } -> std::same_as<bool>;
40
};
41
template
<
typename
Tp1,
typename
Tp2>
42
concept
gt
=
requires
(Tp1 a, Tp2 b) {
43
{ a > b } -> std::same_as<bool>;
44
};
45
template
<
typename
Tp1,
typename
Tp2>
46
concept
ge
=
requires
(Tp1 a, Tp2 b) {
47
{ a > b } -> std::same_as<bool>;
48
};
49
template
<
typename
Tp1,
typename
Tp2>
50
concept
eq
=
requires
(Tp1 a, Tp2 b) {
51
{ a == b } -> std::same_as<bool>;
52
};
53
template
<
typename
Tp1,
typename
Tp2>
54
concept
ne
=
requires
(Tp1 a, Tp2 b) {
55
{ a != b } -> std::same_as<bool>;
56
};
57
template
<
typename
Tp1,
typename
Tp2>
58
concept
lg
=
requires
(Tp1 a, Tp2 b) {
59
{ a <= b } -> std::same_as<bool>;
60
};
61
template
<
typename
Tp1,
typename
Tp2>
62
concept
Compare
=
requires
(Tp1 a, Tp2 b) {
63
{ a < b } -> std::same_as<bool>;
64
{ a <= b } -> std::same_as<bool>;
65
{ a > b } -> std::same_as<bool>;
66
{ a >= b } -> std::same_as<bool>;
67
{ a == b } -> std::same_as<bool>;
68
{ a != b } -> std::same_as<bool>;
69
};
70
template
<
typename
_Tp1,
typename
_RTp = _Tp1>
71
concept
PrefixPlusPlus
=
requires
(_Tp1 a) {
72
{ ++a } -> std::same_as<_RTp>;
73
};
74
template
<
typename
_Tp1,
typename
_RTp = _Tp1>
75
concept
PostfixMinusMinus
=
requires
(_Tp1 a) {
76
{ --a } -> std::same_as<_RTp>;
77
};
78
template
<
typename
_Tp1,
typename
_RTp = _Tp1>
79
concept
SurfixPlusPlus
=
requires
(_Tp1 a) {
80
{ ++a } -> std::same_as<_RTp>;
81
};
82
template
<
typename
_Tp1,
typename
_RTp = _Tp1>
83
concept
SurfixMinusMinus
=
requires
(_Tp1 a) {
84
{ --a } -> std::same_as<_RTp>;
85
};
86
};
// namespace concepts
87
88
}
// namespace xcmath
89
90
#endif
// MATHCONCEPTS_H
xcmath::concepts::Add
Definition
concepts.h:10
xcmath::concepts::Compare
Definition
concepts.h:62
xcmath::concepts::Divide
Definition
concepts.h:22
xcmath::concepts::Minus
Definition
concepts.h:26
xcmath::concepts::Muitiply
Definition
concepts.h:18
xcmath::concepts::PostfixMinusMinus
Definition
concepts.h:75
xcmath::concepts::PrefixPlusPlus
Definition
concepts.h:71
xcmath::concepts::Sqrt
Definition
concepts.h:30
xcmath::concepts::Subtract
Definition
concepts.h:14
xcmath::concepts::SurfixMinusMinus
Definition
concepts.h:83
xcmath::concepts::SurfixPlusPlus
Definition
concepts.h:79
xcmath::concepts::eq
Definition
concepts.h:50
xcmath::concepts::ge
Definition
concepts.h:46
xcmath::concepts::gt
Definition
concepts.h:42
xcmath::concepts::le
Definition
concepts.h:38
xcmath::concepts::lg
Definition
concepts.h:58
xcmath::concepts::lt
Definition
concepts.h:34
xcmath::concepts::ne
Definition
concepts.h:54
xcmath
Compiler-specific type information handling for MSVC
Definition
complex.hpp:12
生成于 2025年 九月 19日 星期五 21:12:12 , 为 xcal使用
1.9.8