C++ Instrument Catalog
OSDefines.h
Go to the documentation of this file.
1 // See https://blog.kowalczyk.info/article/j/guide-to-predefined-macros-in-c-compilers-gcc-clang-msvc-etc..html
5 
6 #pragma once
7 
8 //---------------------------------------------------------------------------//
9 // Platform Dependant Definitions
10 //---------------------------------------------------------------------------//
11 #ifdef _WIN32
12 
13  // Definitions
14  #define MTL__FUNCTION_NAME__ __FUNCTION__
15  #define MTL__FUNCTION_SIGNATURE__ __FUNCSIG__
16 
17 #endif
18 #if defined(__GNUC__) || defined(__APPLE__)
19 
20  // Definitions
21  #define MTL__FUNCTION_NAME__ __FUNCTION__
22  #define MTL__FUNCTION_SIGNATURE__ __PRETTY_FUNCTION__
23 
24 #endif
25 
26 //----------------------------------------------------------------------//
27 // Basic Types //
28 //----------------------------------------------------------------------//
29 #if defined(_WIN32) || defined(__GNUC__) || defined(__APPLE__)
30  // According to C++ standard, platform / data models are as follows:
31  // ILP32: Win32 & Linux 32 bits & Mac OS X 32 bits
32  // LLP64: Win64
33  // LP64: Linux 64 bits & Mac OS X
34  // The following definitions remain valid for the three ILP32, LLP64 and LP64 data models
35  typedef signed char I8;
36  typedef signed short int I16;
37  typedef signed int I32;
38  typedef signed long long int I64;
39  typedef unsigned char U8;
40  typedef unsigned short int U16;
41  typedef unsigned int U32;
42  typedef unsigned long long int U64;
43  typedef float F32;
44  typedef double F64;
45 
46  // We rely on C++ 11 for IEEE754 Not A Number representations
47  #define SPqNaN std::numeric_limits<F32>::quiet_NaN()
48  #define SPsNaN std::numeric_limits<F32>::signaling_NaN()
49  #define DPqNaN std::numeric_limits<F64>::quiet_NaN()
50  #define DPsNaN std::numeric_limits<F64>::signaling_NaN()
51 #endif