Jet  v1.3.3
macros.h
Go to the documentation of this file.
1 // Copyright (c) 2018 Doyub Kim
2 //
3 // I am making my contributions/submissions to this project solely in my
4 // personal capacity and am not conveying any rights to any intellectual
5 // property of any third parties.
6 
7 #ifndef INCLUDE_JET_MACROS_H_
8 #define INCLUDE_JET_MACROS_H_
9 
10 #if defined(_WIN32) || defined(_WIN64)
11 # define JET_WINDOWS
12 #elif defined(__APPLE__)
13 # define JET_APPLE
14 # ifndef JET_IOS
15 # define JET_MACOSX
16 # endif
17 #elif defined(linux) || defined(__linux__)
18 # define JET_LINUX
19 #endif
20 
21 #if defined(DEBUG) || defined(_DEBUG)
22 # define JET_DEBUG_MODE
23 # include <cassert>
24 # define JET_ASSERT(x) assert(x)
25 #else
26 # define JET_ASSERT(x)
27 #endif
28 
29 #ifdef __cplusplus
30 #define JET_NON_COPYABLE(ClassName) \
31  ClassName(const ClassName&) = delete; \
32  ClassName& operator=(const ClassName&) = delete;
33 #endif
34 
35 #ifdef __cplusplus
36 #include <stdexcept>
37 #define JET_THROW_INVALID_ARG_IF(expression) \
38  if (expression) { throw std::invalid_argument(#expression); }
39 #define JET_THROW_INVALID_ARG_WITH_MESSAGE_IF(expression, message) \
40  if (expression) { throw std::invalid_argument(message); }
41 #endif
42 
43 #if defined(JET_WINDOWS) && defined(_MSC_VER)
44 #include <BaseTsd.h>
45 typedef SSIZE_T ssize_t;
46 #endif
47 
48 #define JET_DIAG_STR(s) #s
49 #define JET_DIAG_JOINSTR(x, y) JET_DIAG_STR(x ## y)
50 #ifdef _MSC_VER
51 #define JET_DIAG_DO_PRAGMA(x) __pragma (#x)
52 #define JET_DIAG_PRAGMA(compiler, x) JET_DIAG_DO_PRAGMA(warning(x))
53 #else
54 #define JET_DIAG_DO_PRAGMA(x) _Pragma (#x)
55 #define JET_DIAG_PRAGMA(compiler, x) JET_DIAG_DO_PRAGMA(compiler diagnostic x)
56 #endif
57 #if defined(__clang__)
58 # define JET_DISABLE_CLANG_WARNING(clang_option) \
59  JET_DIAG_PRAGMA(clang, push) \
60  JET_DIAG_PRAGMA(clang, ignored JET_DIAG_JOINSTR(-W, clang_option))
61 # define JET_ENABLE_CLANG_WARNING(clang_option) JET_DIAG_PRAGMA(clang, pop)
62 # define JET_DISABLE_MSVC_WARNING(gcc_option)
63 # define JET_ENABLE_MSVC_WARNING(gcc_option)
64 # define JET_DISABLE_GCC_WARNING(gcc_option)
65 # define JET_ENABLE_GCC_WARNING(gcc_option)
66 #elif defined(_MSC_VER)
67 # define JET_DISABLE_CLANG_WARNING(gcc_option)
68 # define JET_ENABLE_CLANG_WARNING(gcc_option)
69 # define JET_DISABLE_MSVC_WARNING(msvc_errorcode) \
70  JET_DIAG_PRAGMA(msvc, push) \
71  JET_DIAG_DO_PRAGMA(warning(disable:##msvc_errorcode))
72 # define JET_ENABLE_MSVC_WARNING(msvc_errorcode) JET_DIAG_PRAGMA(msvc, pop)
73 # define JET_DISABLE_GCC_WARNING(gcc_option)
74 # define JET_ENABLE_GCC_WARNING(gcc_option)
75 #elif defined(__GNUC__)
76 #if ((__GNUC__ * 100) + __GNUC_MINOR__) >= 406
77 # define JET_DISABLE_CLANG_WARNING(gcc_option)
78 # define JET_ENABLE_CLANG_WARNING(gcc_option)
79 # define JET_DISABLE_MSVC_WARNING(gcc_option)
80 # define JET_ENABLE_MSVC_WARNING(gcc_option)
81 # define JET_DISABLE_GCC_WARNING(gcc_option) \
82  JET_DIAG_PRAGMA(GCC, push) \
83  JET_DIAG_PRAGMA(GCC, ignored JET_DIAG_JOINSTR(-W, gcc_option))
84 # define JET_ENABLE_GCC_WARNING(gcc_option) JET_DIAG_PRAGMA(GCC, pop)
85 #else
86 # define JET_DISABLE_CLANG_WARNING(gcc_option)
87 # define JET_ENABLE_CLANG_WARNING(gcc_option)
88 # define JET_DISABLE_MSVC_WARNING(gcc_option)
89 # define JET_ENABLE_MSVC_WARNING(gcc_option)
90 # define JET_DISABLE_GCC_WARNING(gcc_option) \
91  JET_DIAG_PRAGMA(GCC, ignored JET_DIAG_JOINSTR(-W, gcc_option))
92 # define JET_ENABLE_GCC_WARNING(gcc_option) \
93  JET_DIAG_PRAGMA(GCC, warning JET_DIAG_JOINSTR(-W, gcc_option))
94 #endif
95 #endif
96 
97 
98 
99 #endif // INCLUDE_JET_MACROS_H_