BAN: Implement some numerical limits
This commit is contained in:
parent
1f467580ee
commit
3c54243ac7
|
@ -0,0 +1,71 @@
|
|||
#pragma once
|
||||
|
||||
#include <BAN/Traits.h>
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
namespace BAN
|
||||
{
|
||||
|
||||
template<typename T>
|
||||
class numeric_limits
|
||||
{
|
||||
public:
|
||||
numeric_limits() = delete;
|
||||
|
||||
static constexpr T max() requires(is_signed_v<T> && is_integral_v<T>)
|
||||
{
|
||||
if constexpr(sizeof(T) == sizeof(int8_t))
|
||||
return __INT8_MAX__;
|
||||
if constexpr(sizeof(T) == sizeof(int16_t))
|
||||
return __INT16_MAX__;
|
||||
if constexpr(sizeof(T) == sizeof(int32_t))
|
||||
return __INT32_MAX__;
|
||||
if constexpr(sizeof(T) == sizeof(int64_t))
|
||||
return __INT64_MAX__;
|
||||
}
|
||||
|
||||
static constexpr T max() requires(is_unsigned_v<T> && is_integral_v<T>)
|
||||
{
|
||||
if constexpr(sizeof(T) == sizeof(uint8_t))
|
||||
return __UINT8_MAX__;
|
||||
if constexpr(sizeof(T) == sizeof(uint16_t))
|
||||
return __UINT16_MAX__;
|
||||
if constexpr(sizeof(T) == sizeof(uint32_t))
|
||||
return __UINT32_MAX__;
|
||||
if constexpr(sizeof(T) == sizeof(uint64_t))
|
||||
return __UINT64_MAX__;
|
||||
}
|
||||
|
||||
static constexpr T max() requires(is_floating_point_v<T>)
|
||||
{
|
||||
if constexpr(sizeof(T) == sizeof(float))
|
||||
return __FLT_MAX__;
|
||||
if constexpr(sizeof(T) == sizeof(double))
|
||||
return __DBL_MAX__;
|
||||
if constexpr(sizeof(T) == sizeof(long double))
|
||||
return __LDBL_MAX__;
|
||||
}
|
||||
|
||||
static constexpr T infinity() requires(is_floating_point_v<T>)
|
||||
{
|
||||
if constexpr(sizeof(T) == sizeof(float))
|
||||
return __FLT_MAX__;
|
||||
if constexpr(sizeof(T) == sizeof(double))
|
||||
return __DBL_MAX__;
|
||||
if constexpr(sizeof(T) == sizeof(long double))
|
||||
return __LDBL_MAX__;
|
||||
}
|
||||
|
||||
static constexpr T nan() requires(is_floating_point_v<T>)
|
||||
{
|
||||
if constexpr(sizeof(T) == sizeof(float))
|
||||
return __builtin_nanf("");
|
||||
if constexpr(sizeof(T) == sizeof(double))
|
||||
return __builtin_nan("");
|
||||
if constexpr(sizeof(T) == sizeof(long double))
|
||||
return __builtin_nanl("");
|
||||
}
|
||||
};
|
||||
|
||||
}
|
Loading…
Reference in New Issue