OnixS C++ Eurex T7 Market and Reference Data (EMDI, MDI, RDI, EOBI) Handlers
18.2.0
API documentation
Loading...
Searching...
No Matches
Compiler.h
Go to the documentation of this file.
1
/*
2
* Copyright Onix Solutions Limited [OnixS]. All rights reserved.
3
*
4
* This software owned by Onix Solutions Limited [OnixS] and is protected by copyright law
5
* and international copyright treaties.
6
*
7
* Access to and use of the software is governed by the terms of the applicable ONIXS Software
8
* Services Agreement (the Agreement) and Customer end user license agreements granting
9
* a non-assignable, non-transferable and non-exclusive license to use the software
10
* for it's own data processing purposes under the terms defined in the Agreement.
11
*
12
* Except as otherwise granted within the terms of the Agreement, copying or reproduction of any part
13
* of this source code or associated reference material to any other location for further reproduction
14
* or redistribution, and any amendments to this copyright notice, are expressly prohibited.
15
*
16
* Any reproduction or redistribution for sale or hiring of the Software not in accordance with
17
* the terms of the Agreement is a violation of copyright law.
18
*/
19
#pragma once
20
21
#include <sstream>
22
23
#if defined (_MSC_VER)
24
# define ONIXS_EUREX_EMDI_COMPILER_INFO ("MSVS")
25
#elif __GNUC__
26
inline
27
std::string compilerInfo()
28
{
29
std::stringstream ss;
30
ss <<
"gcc "
<< __VERSION__ <<
", std="
<< __cplusplus;
31
return
ss.str();
32
}
33
# define ONIXS_EUREX_EMDI_COMPILER_INFO (compilerInfo())
34
#else
35
# define ONIXS_EUREX_EMDI_COMPILER_INFO ("Unknown")
36
#endif
37
38
39
#if !(defined(ONIXS_EUREX_EMDI_DOXYGEN) && ONIXS_EUREX_EMDI_DOXYGEN)
40
41
#include <OnixS/Eurex/MarketData/CompilerDetection.h>
42
43
#if defined(_MSC_VER) && defined(_MSVC_LANG)
44
# define ONIXS_CURRENT_CXX_STD _MSVC_LANG
45
#else
46
# define ONIXS_CURRENT_CXX_STD __cplusplus
47
#endif
48
49
# if defined(ONIXS_EUREX_EMDI_CXX11)
50
# if (ONIXS_CURRENT_CXX_STD < 201103L)
51
# error C++11 was targeted during the OnixS SDK compilation but is not detected now
52
# define ONIXS_TERMINATE_COMPILATION
53
# endif
54
# endif
55
56
# if defined(ONIXS_EUREX_EMDI_CXX14)
57
# if (ONIXS_CURRENT_CXX_STD < 201402L)
58
# error C++14 was targeted during the OnixS SDK compilation but is not detected now
59
# define ONIXS_TERMINATE_COMPILATION
60
# endif
61
# endif
62
63
# if defined(ONIXS_EUREX_EMDI_CXX17)
64
# if (ONIXS_CURRENT_CXX_STD < 201703L)
65
# error C++17 was targeted during the OnixS SDK compilation but is not detected now
66
# define ONIXS_TERMINATE_COMPILATION
67
# endif
68
# endif
69
70
# if defined(ONIXS_EUREX_EMDI_CXX20)
71
# if !(ONIXS_CURRENT_CXX_STD > 201703L)
72
# error C++20 was targeted during the OnixS SDK compilation but is not detected now
73
# define ONIXS_TERMINATE_COMPILATION
74
# endif
75
# endif
76
77
# if defined(ONIXS_TERMINATE_COMPILATION)
78
# include <termnate_compilation>
79
#endif
80
81
# if defined(ONIXS_EUREX_EMDI_COMPILER_IS_GNU) | defined(ONIXS_EUREX_EMDI_COMPILER_IS_Clang)
82
# define ONIXS_EUREX_EMDI_COMPILER_IS_GNU_or_Clang
83
# endif
84
85
# if defined(ONIXS_EUREX_EMDI_COMPILER_IS_GNU_or_Clang)
86
87
# define ONIXS_EUREX_EMDI_LIKELY(cond) (__builtin_expect((static_cast<bool>((cond))), true))
88
# define ONIXS_EUREX_EMDI_UNLIKELY(cond) (__builtin_expect((static_cast<bool>((cond))), false))
89
# define ONIXS_EUREX_EMDI_UNUSED __attribute__((__unused__))
90
# define ONIXS_EUREX_EMDI_MAY_ALIAS __attribute__((__may_alias__))
91
# define ONIXS_EUREX_EMDI_HOTPATH __attribute__((hot))
92
# define ONIXS_EUREX_EMDI_COLDPATH __attribute__((noinline,cold))
93
# define ONIXS_EUREX_EMDI_NORETURN __attribute__ ((__noreturn__))
94
# define ONIXS_EUREX_EMDI_NODISCARD __attribute__((warn_unused_result))
95
# define ONIXS_EUREX_EMDI_PURE
96
97
#elif defined(ONIXS_EUREX_EMDI_COMPILER_IS_MSVC)
98
99
# define ONIXS_EUREX_EMDI_LIKELY(cond) ((cond))
100
# define ONIXS_EUREX_EMDI_UNLIKELY(cond) ((cond))
101
# define ONIXS_EUREX_EMDI_PURE
102
# define ONIXS_EUREX_EMDI_UNUSED
103
# define ONIXS_EUREX_EMDI_MAY_ALIAS
104
# define ONIXS_EUREX_EMDI_HOTPATH
105
# define ONIXS_EUREX_EMDI_COLDPATH
106
# define ONIXS_EUREX_EMDI_NORETURN __declspec(noreturn)
107
# define ONIXS_EUREX_EMDI_NODISCARD _Check_return_
108
109
#else
110
# error Unsupported compiler
111
#endif
112
113
#if defined(ONIXS_EUREX_EMDI_CXX11)
114
115
# define ONIXS_EUREX_EMDI_NOEXCEPT noexcept
116
# define ONIXS_EUREX_EMDI_EXPLICIT explicit
117
# define ONIXS_EUREX_EMDI_CONST_OR_CONSTEXPR constexpr
118
# define ONIXS_EUREX_EMDI_FINAL final
119
# define ONIXS_EUREX_EMDI_OVERRIDE override
120
# define ONIXS_EUREX_EMDI_CONSTEXPR constexpr
121
# define ONIXS_EUREX_EMDI_NULLPTR nullptr
122
# define ONIXS_EUREX_EMDI_DELETED_FUNCTION = delete
123
# define ONIXS_EUREX_EMDI_STATIC_ASSERT(X) static_assert(X, #X)
124
# define ONIXS_EUREX_EMDI_STATIC_ASSERT_MSG(X, MSG) static_assert(X, MSG)
125
# define ONIXS_EUREX_EMDI_ALIGNAS(X) alignas(X)
126
# define ONIXS_EUREX_EMDI_DEFAULT =default
127
128
#else
129
130
# define ONIXS_EUREX_EMDI_NOEXCEPT throw()
131
# define ONIXS_EUREX_EMDI_EXPLICIT
132
# define ONIXS_EUREX_EMDI_CONST_OR_CONSTEXPR const
133
# define ONIXS_EUREX_EMDI_FINAL
134
# define ONIXS_EUREX_EMDI_OVERRIDE
135
# define ONIXS_EUREX_EMDI_CONSTEXPR
136
# define ONIXS_EUREX_EMDI_DELETED_FUNCTION
137
# define ONIXS_EUREX_EMDI_DEFAULT {}
138
139
140
# if defined ONIXS_EUREX_EMDI_COMPILER_IS_GNU_or_Clang
141
# define ONIXS_EUREX_EMDI_NULLPTR __null
142
# else
143
# define ONIXS_EUREX_EMDI_NULLPTR 0
144
# endif
145
146
147
# define ONIXS_EUREX_EMDI_STATIC_ASSERT_JOIN(X, Y) ONIXS_EUREX_EMDI_STATIC_ASSERT_JOIN_IMPL(X, Y)
148
# define ONIXS_EUREX_EMDI_STATIC_ASSERT_JOIN_IMPL(X, Y) X##Y
149
template
<
bool
>
struct
ONIXS_ILINK3StaticAssert
;
150
template
<>
struct
ONIXS_ILINK3StaticAssert
<true>{};
151
# define ONIXS_EUREX_EMDI_STATIC_ASSERT(X) enum { ONIXS_EUREX_EMDI_STATIC_ASSERT_JOIN(ONIXS_ILINK3StaticAssertEnum, __LINE__) = sizeof(ONIXS_ILINK3StaticAssert<X>) }
152
# define ONIXS_EUREX_EMDI_STATIC_ASSERT_MSG(X, MSG) enum { ONIXS_EUREX_EMDI_STATIC_ASSERT_JOIN(ONIXS_ILINK3StaticAssertEnum, __LINE__) = sizeof(ONIXS_ILINK3StaticAssert<X>) }
153
154
155
# if defined ONIXS_EUREX_EMDI_COMPILER_IS_GNU_or_Clang
156
# define ONIXS_EUREX_EMDI_ALIGNAS(X) __attribute__ ((__aligned__(X)))
157
# elif defined ONIXS_EUREX_EMDI_COMPILER_IS_MSVC
158
# define ONIXS_EUREX_EMDI_ALIGNAS(X) __declspec(align(X))
159
# else
160
# define ONIXS_EUREX_EMDI_ALIGNAS(X)
161
# endif
162
163
#endif
164
165
#if defined NDEBUG
166
# define ONIXS_EUREX_EMDI_ASSERT(CHECK) static_cast<void>((CHECK))
167
#else
168
#if defined (ONIXS_EUREX_EMDI_CXX11)
169
# define ONIXS_EUREX_EMDI_ASSERT(CHECK) ((CHECK) ? void(0) : []() {assert(!#CHECK);}())
170
# else
171
# define ONIXS_EUREX_EMDI_ASSERT(CHECK) (assert((CHECK)))
172
# endif
173
#endif
174
175
#if defined (ONIXS_EUREX_EMDI_CXX11)
176
# define ONIXS_EUREX_EMDI_HAS_TYPE_TRAITS
177
#endif
178
179
#define ONIXS_EUREX_EMDI_HARDWARE_DESTRUCTIVE_INTERFACE_SIZE (64)
180
181
#else
//#if !(defined(ONIXS_DOXYGEN) && ONIXS_DOXYGEN)
182
183
#define ONIXS_EUREX_EMDI_EXPORTED
184
#define ONIXS_EUREX_EMDI_NOEXCEPT noexcept
185
#define ONIXS_EUREX_EMDI_EXPLICIT explicit
186
#define ONIXS_EUREX_EMDI_CONST_OR_CONSTEXPR constexpr
187
#define ONIXS_EUREX_EMDI_CONSTEXPR constexpr
188
#define ONIXS_EUREX_EMDI_OVERRIDE override
189
#define ONIXS_EUREX_EMDI_FINAL final
190
#define ONIXS_EUREX_EMDI_NULLPTR nullptr
191
192
#define ONIXS_EUREX_EMDI_NORETURN
193
#define ONIXS_EUREX_EMDI_NODISCARD
194
195
#define ONIXS_EUREX_EMDI_HOTPATH
196
#define ONIXS_EUREX_EMDI_COLDPATH
197
#define ONIXS_EUREX_EMDI_PURE
198
199
#define ONIXS_EUREX_EMDI_HAS_TYPE_TRAITS
200
201
#define ONIXS_EUREX_EMDI_HAS_GATEWAY_EMULATOR
202
203
#define ONIXS_EUREX_EMDI_CXX11
204
#define ONIXS_EUREX_EMDI_CXX14
205
#define ONIXS_EUREX_EMDI_CXX17
206
#define ONIXS_EUREX_EMDI_CXX20
207
208
209
#define ONIXS_EUREX_EMDI_UNUSED
210
#define ONIXS_EUREX_EMDI_DEFAULT =default
211
212
#endif
ONIXS_ILINK3StaticAssert
Definition
Compiler.h:149
OnixS
Eurex
MarketData
Compiler.h
Technical Support:
support@onixs.biz
Copyright © 2025 OnixS. All Rights Reserved.