Sane C++ Libraries
C++ Platform Abstraction Libraries
Loading...
Searching...
No Matches
Limits.h
1// Copyright (c) Stefano Cristiano
2// SPDX-License-Identifier: MIT
3#pragma once
4#include "../Common/CompilerMacrosType.h"
5#include "../Common/PlatformMacrosInstructionSet.h"
6#include "../Common/PlatformMacrosType.h"
7#include "../Common/PrimitiveDefinitions.h"
8
9namespace SC
10{
11struct MaxValue;
12} // namespace SC
13
16
24{
25 template <typename T>
26 constexpr T SignedMaxValue() const
27 {
28 // (1ull << (sizeof(T) * 8 - 1)) - 1; produces warning on MSVC
29 return (~0) & ~static_cast<T>((1ull << (sizeof(T) * 8 - 1)));
30 }
31 template <typename T>
32 constexpr T UnsignedMaxValue() const
33 {
34 return static_cast<T>(~0ull);
35 }
36
37 constexpr operator uint8_t() const { return UnsignedMaxValue<uint8_t>(); }
38 constexpr operator uint16_t() const { return UnsignedMaxValue<uint16_t>(); }
39 constexpr operator uint32_t() const { return UnsignedMaxValue<uint32_t>(); }
40 constexpr operator uint64_t() const { return UnsignedMaxValue<uint64_t>(); }
41#if SC_COMPILER_MSVC == 0 && SC_COMPILER_CLANG_CL == 0 && !SC_PLATFORM_LINUX && \
42 !(SC_PLATFORM_WINDOWS && SC_PLATFORM_64_BIT) && !defined(_WIN64)
43 constexpr operator size_t() const { return UnsignedMaxValue<size_t>(); }
44#endif
45
46 constexpr operator int8_t() const { return SignedMaxValue<int8_t>(); }
47 constexpr operator int16_t() const { return SignedMaxValue<int16_t>(); }
48 constexpr operator int32_t() const { return SignedMaxValue<int32_t>(); }
49 constexpr operator int64_t() const { return SignedMaxValue<int64_t>(); }
50#if SC_PLATFORM_APPLE || (SC_PLATFORM_WINDOWS && !SC_PLATFORM_64_BIT)
51 constexpr operator ssize_t() const { return SignedMaxValue<ssize_t>(); }
52#endif
53
54#if SC_COMPILER_MSVC
55 constexpr operator float() const { return 3.402823466e+38F; }
56 constexpr operator double() const { return 1.7976931348623158e+308; }
57#else
58 constexpr operator float() const { return 3.40282347e+38F; }
59 constexpr operator double() const { return 1.7976931348623157e+308; }
60#endif
61};
62
An object that can be converted to any primitive type providing its max value.
Definition Limits.h:24