Numeric Limits
This commit is contained in:
@ -1,16 +1,16 @@
|
|||||||
// IACore-OSS; The Core Library for All IA Open Source Projects
|
// IACore-OSS; The Core Library for All IA Open Source Projects
|
||||||
// Copyright (C) 2024 IAS (ias@iasoft.dev)
|
// Copyright (C) 2024 IAS (ias@iasoft.dev)
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// it under the terms of the GNU General Public License as published by
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
// (at your option) any later version.
|
// (at your option) any later version.
|
||||||
//
|
//
|
||||||
// This program is distributed in the hope that it will be useful,
|
// This program is distributed in the hope that it will be useful,
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
// GNU General Public License for more details.
|
// GNU General Public License for more details.
|
||||||
//
|
//
|
||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
@ -22,119 +22,130 @@
|
|||||||
|
|
||||||
namespace ia
|
namespace ia
|
||||||
{
|
{
|
||||||
template<typename _value_type>
|
template<typename _value_type> using initializer_list = std::initializer_list<_value_type>;
|
||||||
using initializer_list = std::initializer_list<_value_type>;
|
|
||||||
|
|
||||||
#undef VOID
|
#undef VOID
|
||||||
typedef void VOID;
|
typedef void VOID;
|
||||||
typedef bool BOOL;
|
typedef bool BOOL;
|
||||||
typedef char CHAR;
|
typedef char CHAR;
|
||||||
typedef uint16_t CHAR16;
|
typedef uint16_t CHAR16;
|
||||||
|
|
||||||
typedef int8_t INT8;
|
typedef int8_t INT8;
|
||||||
typedef int16_t INT16;
|
typedef int16_t INT16;
|
||||||
typedef int32_t INT32;
|
typedef int32_t INT32;
|
||||||
typedef int64_t INT64;
|
typedef int64_t INT64;
|
||||||
|
|
||||||
typedef uint8_t UINT8;
|
typedef uint8_t UINT8;
|
||||||
typedef uint16_t UINT16;
|
typedef uint16_t UINT16;
|
||||||
typedef uint32_t UINT32;
|
typedef uint32_t UINT32;
|
||||||
typedef uint64_t UINT64;
|
typedef uint64_t UINT64;
|
||||||
|
|
||||||
typedef float FLOAT32;
|
typedef float FLOAT32;
|
||||||
typedef double FLOAT64;
|
typedef double FLOAT64;
|
||||||
|
|
||||||
typedef INT32 INT;
|
typedef INT32 INT;
|
||||||
typedef UINT32 UINT;
|
typedef UINT32 UINT;
|
||||||
typedef size_t SIZE_T;
|
typedef size_t SIZE_T;
|
||||||
typedef std::make_signed_t<size_t> SSIZE_T;
|
typedef std::make_signed_t<size_t> SSIZE_T;
|
||||||
|
|
||||||
typedef std::align_val_t ALIGN_T;
|
typedef std::align_val_t ALIGN_T;
|
||||||
|
|
||||||
// pointer types
|
// pointer types
|
||||||
typedef VOID* PVOID;
|
typedef VOID *PVOID;
|
||||||
typedef BOOL* PBOOL;
|
typedef BOOL *PBOOL;
|
||||||
typedef CHAR* PCHAR;
|
typedef CHAR *PCHAR;
|
||||||
typedef CHAR16* PCHAR16;
|
typedef CHAR16 *PCHAR16;
|
||||||
|
|
||||||
typedef INT8* PINT8;
|
typedef INT8 *PINT8;
|
||||||
typedef INT16* PINT16;
|
typedef INT16 *PINT16;
|
||||||
typedef INT32* PINT32;
|
typedef INT32 *PINT32;
|
||||||
typedef INT64* PINT64;
|
typedef INT64 *PINT64;
|
||||||
|
|
||||||
typedef UINT8* PUINT8;
|
typedef UINT8 *PUINT8;
|
||||||
typedef UINT16* PUINT16;
|
typedef UINT16 *PUINT16;
|
||||||
typedef UINT32* PUINT32;
|
typedef UINT32 *PUINT32;
|
||||||
typedef UINT64* PUINT64;
|
typedef UINT64 *PUINT64;
|
||||||
|
|
||||||
typedef INT* PINT;
|
typedef INT *PINT;
|
||||||
typedef UINT* PUINT;
|
typedef UINT *PUINT;
|
||||||
typedef SIZE_T* PSIZE;
|
typedef SIZE_T *PSIZE;
|
||||||
typedef SSIZE_T* PSSIZE;
|
typedef SSIZE_T *PSSIZE;
|
||||||
|
|
||||||
typedef FLOAT32 PFLOAT32;
|
typedef FLOAT32 PFLOAT32;
|
||||||
typedef FLOAT64 PFLOAT64;
|
typedef FLOAT64 PFLOAT64;
|
||||||
|
|
||||||
// const pointer types
|
// const pointer types
|
||||||
typedef CONST VOID* PCVOID;
|
typedef CONST VOID *PCVOID;
|
||||||
typedef CONST BOOL* PCBOOL;
|
typedef CONST BOOL *PCBOOL;
|
||||||
typedef CONST CHAR* PCCHAR;
|
typedef CONST CHAR *PCCHAR;
|
||||||
typedef CONST CHAR16* PCCHAR16;
|
typedef CONST CHAR16 *PCCHAR16;
|
||||||
|
|
||||||
typedef CONST INT8* PCINT8;
|
typedef CONST INT8 *PCINT8;
|
||||||
typedef CONST INT16* PCINT16;
|
typedef CONST INT16 *PCINT16;
|
||||||
typedef CONST INT32* PCINT32;
|
typedef CONST INT32 *PCINT32;
|
||||||
typedef CONST INT64* PCINT64;
|
typedef CONST INT64 *PCINT64;
|
||||||
|
|
||||||
typedef CONST UINT8* PCUINT8;
|
typedef CONST UINT8 *PCUINT8;
|
||||||
typedef CONST UINT16* PCUINT16;
|
typedef CONST UINT16 *PCUINT16;
|
||||||
typedef CONST UINT32* PCUINT32;
|
typedef CONST UINT32 *PCUINT32;
|
||||||
typedef CONST UINT64* PCUINT64;
|
typedef CONST UINT64 *PCUINT64;
|
||||||
|
|
||||||
typedef CONST INT* PCINT;
|
typedef CONST INT *PCINT;
|
||||||
typedef CONST UINT* PCUINT;
|
typedef CONST UINT *PCUINT;
|
||||||
typedef CONST SIZE_T* PCSIZE;
|
typedef CONST SIZE_T *PCSIZE;
|
||||||
typedef CONST SSIZE_T* PCSSIZE;
|
typedef CONST SSIZE_T *PCSSIZE;
|
||||||
|
|
||||||
typedef CONST FLOAT32 PCFLOAT32;
|
typedef CONST FLOAT32 PCFLOAT32;
|
||||||
typedef CONST FLOAT64 PCFLOAT64;
|
typedef CONST FLOAT64 PCFLOAT64;
|
||||||
|
|
||||||
/* Uses the UEFI standard GUID structure definition */
|
/* Uses the UEFI standard GUID structure definition */
|
||||||
typedef struct _IA_GUID
|
typedef struct _IA_GUID
|
||||||
{
|
|
||||||
UINT32 Data1;
|
|
||||||
UINT16 Data2;
|
|
||||||
UINT16 Data3;
|
|
||||||
UINT8 Data4[8];
|
|
||||||
|
|
||||||
bool operator==(const _IA_GUID& other)
|
|
||||||
{
|
{
|
||||||
UINT64* myData = (UINT64*)(&Data1);
|
UINT32 Data1;
|
||||||
UINT64* otherData = (UINT64*)(&(other.Data1));
|
UINT16 Data2;
|
||||||
return ((myData[0] == otherData[0]) && (myData[1] == otherData[1]));
|
UINT16 Data3;
|
||||||
}
|
UINT8 Data4[8];
|
||||||
} GUID;
|
|
||||||
|
|
||||||
STATIC CONSTEXPR FLOAT32 FLOAT32_EPSILON = std::numeric_limits<FLOAT32>::epsilon();
|
bool operator==(const _IA_GUID &other)
|
||||||
STATIC CONSTEXPR FLOAT32 FLOAT64_EPSILON = std::numeric_limits<FLOAT64>::epsilon();
|
{
|
||||||
|
UINT64 *myData = (UINT64 *) (&Data1);
|
||||||
|
UINT64 *otherData = (UINT64 *) (&(other.Data1));
|
||||||
|
return ((myData[0] == otherData[0]) && (myData[1] == otherData[1]));
|
||||||
|
}
|
||||||
|
} GUID;
|
||||||
|
|
||||||
namespace types
|
STATIC CONSTEXPR FLOAT32 FLOAT32_EPSILON = std::numeric_limits<FLOAT32>::epsilon();
|
||||||
{
|
STATIC CONSTEXPR FLOAT32 FLOAT64_EPSILON = std::numeric_limits<FLOAT64>::epsilon();
|
||||||
static BOOL __internal_validate_types()
|
|
||||||
|
namespace types
|
||||||
{
|
{
|
||||||
if(sizeof(CHAR) != static_cast<size_t>(1)) return false;
|
static BOOL __internal_validate_types()
|
||||||
if(sizeof(INT8) != static_cast<size_t>(1)) return false;
|
{
|
||||||
if(sizeof(INT16) != static_cast<size_t>(2)) return false;
|
if (sizeof(CHAR) != static_cast<size_t>(1))
|
||||||
if(sizeof(INT32) != static_cast<size_t>(4)) return false;
|
return false;
|
||||||
if(sizeof(INT64) != static_cast<size_t>(8)) return false;
|
if (sizeof(INT8) != static_cast<size_t>(1))
|
||||||
if(sizeof(UINT8) != static_cast<size_t>(1)) return false;
|
return false;
|
||||||
if(sizeof(UINT16) != static_cast<size_t>(2)) return false;
|
if (sizeof(INT16) != static_cast<size_t>(2))
|
||||||
if(sizeof(UINT32) != static_cast<size_t>(4)) return false;
|
return false;
|
||||||
if(sizeof(UINT64) != static_cast<size_t>(8)) return false;
|
if (sizeof(INT32) != static_cast<size_t>(4))
|
||||||
if(sizeof(FLOAT32) != static_cast<size_t>(4)) return false;
|
return false;
|
||||||
if(sizeof(FLOAT64) != static_cast<size_t>(8)) return false;
|
if (sizeof(INT64) != static_cast<size_t>(8))
|
||||||
if(sizeof(PVOID) < static_cast<size_t>(4)) return false;
|
return false;
|
||||||
return true;
|
if (sizeof(UINT8) != static_cast<size_t>(1))
|
||||||
}
|
return false;
|
||||||
}
|
if (sizeof(UINT16) != static_cast<size_t>(2))
|
||||||
}
|
return false;
|
||||||
|
if (sizeof(UINT32) != static_cast<size_t>(4))
|
||||||
|
return false;
|
||||||
|
if (sizeof(UINT64) != static_cast<size_t>(8))
|
||||||
|
return false;
|
||||||
|
if (sizeof(FLOAT32) != static_cast<size_t>(4))
|
||||||
|
return false;
|
||||||
|
if (sizeof(FLOAT64) != static_cast<size_t>(8))
|
||||||
|
return false;
|
||||||
|
if (sizeof(PVOID) < static_cast<size_t>(4))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} // namespace types
|
||||||
|
} // namespace ia
|
||||||
|
|||||||
Reference in New Issue
Block a user