VecCore 0.8.1
C++ Library for Portable SIMD Vectorization
Loading...
Searching...
No Matches
Limits.h
Go to the documentation of this file.
1#ifndef VECCORE_LIMITS_H
2#define VECCORE_LIMITS_H
3
4#include "Backend/Interface.h"
5
6#include <cfloat>
7#include <climits>
8#include <cmath>
9
10namespace vecCore {
11
12template <typename T>
15
16 static constexpr T Min() noexcept { return T(NumericLimits<ScalarT>::Min()); }
17 static constexpr T Max() noexcept { return T(NumericLimits<ScalarT>::Max()); }
18
19 static constexpr T Lowest() noexcept { return T(NumericLimits<ScalarT>::Lowest()); }
20 static constexpr T Highest() noexcept { return T(NumericLimits<ScalarT>::Highest()); }
21
22 static constexpr T Epsilon() noexcept { return T(NumericLimits<ScalarT>::Epsilon()); }
23 static constexpr T Infinity() noexcept { return T(NumericLimits<ScalarT>::Infinity()); }
24};
25
26template <>
27struct NumericLimits<bool> {
28 VECCORE_ATT_HOST_DEVICE static constexpr bool Min() noexcept { return false; }
29 VECCORE_ATT_HOST_DEVICE static constexpr bool Max() noexcept { return true; }
30};
31
32template <>
33struct NumericLimits<char> {
34 VECCORE_ATT_HOST_DEVICE static constexpr char Min() noexcept { return CHAR_MIN; }
35 VECCORE_ATT_HOST_DEVICE static constexpr char Max() noexcept { return CHAR_MAX; }
36 VECCORE_ATT_HOST_DEVICE static constexpr char Lowest() noexcept { return CHAR_MIN; }
37 VECCORE_ATT_HOST_DEVICE static constexpr char Highest() noexcept { return CHAR_MAX; }
38};
39
40template <>
41struct NumericLimits<unsigned char> {
42 VECCORE_ATT_HOST_DEVICE static constexpr unsigned char Min() noexcept { return 0; }
43 VECCORE_ATT_HOST_DEVICE static constexpr unsigned char Max() noexcept { return UCHAR_MAX; }
44 VECCORE_ATT_HOST_DEVICE static constexpr unsigned char Lowest() noexcept { return 0; }
45 VECCORE_ATT_HOST_DEVICE static constexpr unsigned char Highest() noexcept { return UCHAR_MAX; }
46};
47
48template <>
49struct NumericLimits<short> {
50 VECCORE_ATT_HOST_DEVICE static constexpr short Min() noexcept { return SHRT_MIN; }
51 VECCORE_ATT_HOST_DEVICE static constexpr short Max() noexcept { return SHRT_MAX; }
52 VECCORE_ATT_HOST_DEVICE static constexpr short Lowest() noexcept { return SHRT_MIN; }
53 VECCORE_ATT_HOST_DEVICE static constexpr short Highest() noexcept { return SHRT_MAX; }
54};
55
56template <>
57struct NumericLimits<unsigned short> {
58 VECCORE_ATT_HOST_DEVICE static constexpr unsigned short Min() noexcept { return 0; }
59 VECCORE_ATT_HOST_DEVICE static constexpr unsigned short Max() noexcept { return USHRT_MAX; }
60 VECCORE_ATT_HOST_DEVICE static constexpr unsigned short Lowest() noexcept { return 0; }
61 VECCORE_ATT_HOST_DEVICE static constexpr unsigned short Highest() noexcept { return USHRT_MAX; }
62};
63
64template <>
65struct NumericLimits<int> {
66 VECCORE_ATT_HOST_DEVICE static constexpr int Min() noexcept { return INT_MIN; }
67 VECCORE_ATT_HOST_DEVICE static constexpr int Max() noexcept { return INT_MAX; }
68 VECCORE_ATT_HOST_DEVICE static constexpr int Lowest() noexcept { return INT_MIN; }
69 VECCORE_ATT_HOST_DEVICE static constexpr int Highest() noexcept { return INT_MAX; }
70};
71
72template <>
73struct NumericLimits<unsigned int> {
74 VECCORE_ATT_HOST_DEVICE static constexpr unsigned int Min() noexcept { return 0; }
75 VECCORE_ATT_HOST_DEVICE static constexpr unsigned int Max() noexcept { return UINT_MAX; }
76 VECCORE_ATT_HOST_DEVICE static constexpr unsigned int Lowest() noexcept { return 0; }
77 VECCORE_ATT_HOST_DEVICE static constexpr unsigned int Highest() noexcept { return UINT_MAX; }
78};
79
80template <>
81struct NumericLimits<long> {
82 VECCORE_ATT_HOST_DEVICE static constexpr long Min() noexcept { return LONG_MIN; }
83 VECCORE_ATT_HOST_DEVICE static constexpr long Max() noexcept { return LONG_MAX; }
84 VECCORE_ATT_HOST_DEVICE static constexpr long Lowest() noexcept { return LONG_MIN; }
85 VECCORE_ATT_HOST_DEVICE static constexpr long Highest() noexcept { return LONG_MAX; }
86};
87
88template <>
89struct NumericLimits<unsigned long> {
90 VECCORE_ATT_HOST_DEVICE static constexpr unsigned long Min() noexcept { return 0UL; }
91 VECCORE_ATT_HOST_DEVICE static constexpr unsigned long Max() noexcept { return ULONG_MAX; }
92 VECCORE_ATT_HOST_DEVICE static constexpr unsigned long Lowest() noexcept { return 0UL; }
93 VECCORE_ATT_HOST_DEVICE static constexpr unsigned long Highest() noexcept { return ULONG_MAX; }
94};
95
96template <>
97struct NumericLimits<long long> {
98 VECCORE_ATT_HOST_DEVICE static constexpr long long Min() noexcept { return LLONG_MIN; }
99 VECCORE_ATT_HOST_DEVICE static constexpr long long Max() noexcept { return LLONG_MAX; }
100 VECCORE_ATT_HOST_DEVICE static constexpr long long Lowest() noexcept { return LLONG_MIN; }
101 VECCORE_ATT_HOST_DEVICE static constexpr long long Highest() noexcept { return LLONG_MAX; }
102};
103
104template <>
105struct NumericLimits<unsigned long long> {
106 VECCORE_ATT_HOST_DEVICE static constexpr unsigned long long Min() noexcept { return 0ULL; }
107 VECCORE_ATT_HOST_DEVICE static constexpr unsigned long long Max() noexcept { return ULLONG_MAX; }
108 VECCORE_ATT_HOST_DEVICE static constexpr unsigned long long Lowest() noexcept { return 0ULL; }
109 VECCORE_ATT_HOST_DEVICE static constexpr unsigned long long Highest() noexcept { return ULLONG_MAX; }
110};
111
112template <>
113struct NumericLimits<float> {
114 VECCORE_ATT_HOST_DEVICE static constexpr float Min() noexcept { return FLT_MIN; }
115 VECCORE_ATT_HOST_DEVICE static constexpr float Max() noexcept { return FLT_MAX; }
116 VECCORE_ATT_HOST_DEVICE static constexpr float Lowest() noexcept { return -FLT_MAX; }
117 VECCORE_ATT_HOST_DEVICE static constexpr float Highest() noexcept { return FLT_MAX; }
118 VECCORE_ATT_HOST_DEVICE static constexpr float Epsilon() noexcept { return FLT_EPSILON; }
119 VECCORE_ATT_HOST_DEVICE static constexpr float Infinity() noexcept { return HUGE_VALF; }
120};
121
122template <>
123struct NumericLimits<double> {
124 VECCORE_ATT_HOST_DEVICE static constexpr double Min() noexcept { return DBL_MIN; }
125 VECCORE_ATT_HOST_DEVICE static constexpr double Max() noexcept { return DBL_MAX; }
126 VECCORE_ATT_HOST_DEVICE static constexpr double Lowest() noexcept { return -DBL_MAX; }
127 VECCORE_ATT_HOST_DEVICE static constexpr double Highest() noexcept { return DBL_MAX; }
128 VECCORE_ATT_HOST_DEVICE static constexpr double Epsilon() noexcept { return DBL_EPSILON; }
129 VECCORE_ATT_HOST_DEVICE static constexpr double Infinity() noexcept { return HUGE_VAL; }
130};
131
132} // namespace vecCore
133
134#endif
#define VECCORE_ATT_HOST_DEVICE
Definition: CUDA.h:10
typename TypeTraits< T >::ScalarType Scalar
Definition: Interface.h:16
static VECCORE_ATT_HOST_DEVICE constexpr bool Min() noexcept
Definition: Limits.h:28
static VECCORE_ATT_HOST_DEVICE constexpr bool Max() noexcept
Definition: Limits.h:29
static VECCORE_ATT_HOST_DEVICE constexpr char Lowest() noexcept
Definition: Limits.h:36
static VECCORE_ATT_HOST_DEVICE constexpr char Min() noexcept
Definition: Limits.h:34
static VECCORE_ATT_HOST_DEVICE constexpr char Max() noexcept
Definition: Limits.h:35
static VECCORE_ATT_HOST_DEVICE constexpr char Highest() noexcept
Definition: Limits.h:37
static VECCORE_ATT_HOST_DEVICE constexpr double Infinity() noexcept
Definition: Limits.h:129
static VECCORE_ATT_HOST_DEVICE constexpr double Min() noexcept
Definition: Limits.h:124
static VECCORE_ATT_HOST_DEVICE constexpr double Epsilon() noexcept
Definition: Limits.h:128
static VECCORE_ATT_HOST_DEVICE constexpr double Highest() noexcept
Definition: Limits.h:127
static VECCORE_ATT_HOST_DEVICE constexpr double Max() noexcept
Definition: Limits.h:125
static VECCORE_ATT_HOST_DEVICE constexpr double Lowest() noexcept
Definition: Limits.h:126
static VECCORE_ATT_HOST_DEVICE constexpr float Infinity() noexcept
Definition: Limits.h:119
static VECCORE_ATT_HOST_DEVICE constexpr float Lowest() noexcept
Definition: Limits.h:116
static VECCORE_ATT_HOST_DEVICE constexpr float Max() noexcept
Definition: Limits.h:115
static VECCORE_ATT_HOST_DEVICE constexpr float Highest() noexcept
Definition: Limits.h:117
static VECCORE_ATT_HOST_DEVICE constexpr float Epsilon() noexcept
Definition: Limits.h:118
static VECCORE_ATT_HOST_DEVICE constexpr float Min() noexcept
Definition: Limits.h:114
static VECCORE_ATT_HOST_DEVICE constexpr int Highest() noexcept
Definition: Limits.h:69
static VECCORE_ATT_HOST_DEVICE constexpr int Max() noexcept
Definition: Limits.h:67
static VECCORE_ATT_HOST_DEVICE constexpr int Min() noexcept
Definition: Limits.h:66
static VECCORE_ATT_HOST_DEVICE constexpr int Lowest() noexcept
Definition: Limits.h:68
static VECCORE_ATT_HOST_DEVICE constexpr long Min() noexcept
Definition: Limits.h:82
static VECCORE_ATT_HOST_DEVICE constexpr long Lowest() noexcept
Definition: Limits.h:84
static VECCORE_ATT_HOST_DEVICE constexpr long Highest() noexcept
Definition: Limits.h:85
static VECCORE_ATT_HOST_DEVICE constexpr long Max() noexcept
Definition: Limits.h:83
static VECCORE_ATT_HOST_DEVICE constexpr long long Highest() noexcept
Definition: Limits.h:101
static VECCORE_ATT_HOST_DEVICE constexpr long long Min() noexcept
Definition: Limits.h:98
static VECCORE_ATT_HOST_DEVICE constexpr long long Max() noexcept
Definition: Limits.h:99
static VECCORE_ATT_HOST_DEVICE constexpr long long Lowest() noexcept
Definition: Limits.h:100
static VECCORE_ATT_HOST_DEVICE constexpr short Max() noexcept
Definition: Limits.h:51
static VECCORE_ATT_HOST_DEVICE constexpr short Lowest() noexcept
Definition: Limits.h:52
static VECCORE_ATT_HOST_DEVICE constexpr short Highest() noexcept
Definition: Limits.h:53
static VECCORE_ATT_HOST_DEVICE constexpr short Min() noexcept
Definition: Limits.h:50
static VECCORE_ATT_HOST_DEVICE constexpr unsigned char Highest() noexcept
Definition: Limits.h:45
static VECCORE_ATT_HOST_DEVICE constexpr unsigned char Min() noexcept
Definition: Limits.h:42
static VECCORE_ATT_HOST_DEVICE constexpr unsigned char Lowest() noexcept
Definition: Limits.h:44
static VECCORE_ATT_HOST_DEVICE constexpr unsigned char Max() noexcept
Definition: Limits.h:43
static VECCORE_ATT_HOST_DEVICE constexpr unsigned int Lowest() noexcept
Definition: Limits.h:76
static VECCORE_ATT_HOST_DEVICE constexpr unsigned int Min() noexcept
Definition: Limits.h:74
static VECCORE_ATT_HOST_DEVICE constexpr unsigned int Highest() noexcept
Definition: Limits.h:77
static VECCORE_ATT_HOST_DEVICE constexpr unsigned int Max() noexcept
Definition: Limits.h:75
static VECCORE_ATT_HOST_DEVICE constexpr unsigned long Min() noexcept
Definition: Limits.h:90
static VECCORE_ATT_HOST_DEVICE constexpr unsigned long Lowest() noexcept
Definition: Limits.h:92
static VECCORE_ATT_HOST_DEVICE constexpr unsigned long Max() noexcept
Definition: Limits.h:91
static VECCORE_ATT_HOST_DEVICE constexpr unsigned long Highest() noexcept
Definition: Limits.h:93
static VECCORE_ATT_HOST_DEVICE constexpr unsigned long long Max() noexcept
Definition: Limits.h:107
static VECCORE_ATT_HOST_DEVICE constexpr unsigned long long Highest() noexcept
Definition: Limits.h:109
static VECCORE_ATT_HOST_DEVICE constexpr unsigned long long Min() noexcept
Definition: Limits.h:106
static VECCORE_ATT_HOST_DEVICE constexpr unsigned long long Lowest() noexcept
Definition: Limits.h:108
static VECCORE_ATT_HOST_DEVICE constexpr unsigned short Highest() noexcept
Definition: Limits.h:61
static VECCORE_ATT_HOST_DEVICE constexpr unsigned short Lowest() noexcept
Definition: Limits.h:60
static VECCORE_ATT_HOST_DEVICE constexpr unsigned short Max() noexcept
Definition: Limits.h:59
static VECCORE_ATT_HOST_DEVICE constexpr unsigned short Min() noexcept
Definition: Limits.h:58
Scalar< T > ScalarT
Definition: Limits.h:14
static constexpr T Lowest() noexcept
Definition: Limits.h:19
static constexpr T Max() noexcept
Definition: Limits.h:17
static constexpr T Highest() noexcept
Definition: Limits.h:20
static constexpr T Epsilon() noexcept
Definition: Limits.h:22
static constexpr T Min() noexcept
Definition: Limits.h:16
static constexpr T Infinity() noexcept
Definition: Limits.h:23