31#ifndef ETL_PLATFORM_INCLUDED
32#define ETL_PLATFORM_INCLUDED
37#if !defined(__STDC_LIMIT_MACROS)
38 #define __STDC_LIMIT_MACROS
44#if !defined(__STDC_CONSTANT_MACROS)
45 #define __STDC_CONSTANT_MACROS
56#if !defined(ETL_NO_PROFILE_HEADER) && defined(__has_include)
57 #if !__has_include("etl_profile.h")
58 #define ETL_NO_PROFILE_HEADER
62#if !defined(ETL_NO_PROFILE_HEADER)
63 #include "etl_profile.h"
67#define ETL_PLATFORM_16BIT (UINT16_MAX == UINTPTR_MAX)
68#define ETL_PLATFORM_32BIT (UINT32_MAX == UINTPTR_MAX)
69#define ETL_PLATFORM_64BIT (UINT64_MAX == UINTPTR_MAX)
73#if (defined(_DEBUG) || defined(DEBUG)) && !defined(ETL_DEBUG)
78 #define ETL_IS_DEBUG_BUILD 1
80 #define ETL_IS_DEBUG_BUILD 0
87#if defined(ETL_NO_STL)
88 #define ETL_USING_STL 0
89 #define ETL_NOT_USING_STL 1
91 #define ETL_USING_STL 1
92 #define ETL_NOT_USING_STL 0
97#if defined(ETL_STLPORT)
98 #define ETL_USING_STLPORT 1
99 #define ETL_NOT_USING_STLPORT 0
101 #define ETL_USING_STLPORT 0
102 #define ETL_NOT_USING_STLPORT 1
108 #define ETL_USING_8BIT_TYPES 1
109 #define ETL_NOT_USING_8BIT_TYPES 0
111 #define ETL_USING_8BIT_TYPES 0
112 #define ETL_NOT_USING_8BIT_TYPES 1
115#define ETL_8BIT_SUPPORT (CHAR_BIT == 8)
119#if defined(ETL_NO_64BIT_TYPES)
120 #define ETL_USING_64BIT_TYPES 0
121 #define ETL_NOT_USING_64BIT_TYPES 1
123 #define ETL_USING_64BIT_TYPES 1
124 #define ETL_NOT_USING_64BIT_TYPES 0
138#if !defined(WCHAR_MIN)
139 #define WCHAR_MIN 0x0000
142#if !defined(WCHAR_MAX)
143 #define WCHAR_MAX 0xFFFF
148#if defined(ETL_FORCE_EXPLICIT_STRING_CONVERSION_FROM_CHAR)
149 #define ETL_EXPLICIT_STRING_FROM_CHAR explicit
151 #define ETL_EXPLICIT_STRING_FROM_CHAR
156#if defined(ETL_DISABLE_STRING_TRUNCATION_CHECKS)
157 #define ETL_HAS_STRING_TRUNCATION_CHECKS 0
159 #define ETL_HAS_STRING_TRUNCATION_CHECKS 1
164#if defined(ETL_DISABLE_STRING_CLEAR_AFTER_USE)
165 #define ETL_HAS_STRING_CLEAR_AFTER_USE 0
167 #define ETL_HAS_STRING_CLEAR_AFTER_USE 1
172#if defined(ETL_ENABLE_ERROR_ON_STRING_TRUNCATION)
173 #define ETL_HAS_ERROR_ON_STRING_TRUNCATION 1
175 #define ETL_HAS_ERROR_ON_STRING_TRUNCATION 0
180#if defined(ETL_ISTRING_REPAIR_ENABLE)
181 #define ETL_HAS_ISTRING_REPAIR 1
183 #define ETL_HAS_ISTRING_REPAIR 0
188#if defined(ETL_IVECTOR_REPAIR_ENABLE)
189 #define ETL_HAS_IVECTOR_REPAIR 1
191 #define ETL_HAS_IVECTOR_REPAIR 0
196#if defined(ETL_IDEQUE_REPAIR_ENABLE)
197 #define ETL_HAS_IDEQUE_REPAIR 1
199 #define ETL_HAS_IDEQUE_REPAIR 0
204#if defined(ETL_THROW_EXCEPTIONS)
205 #define ETL_USING_EXCEPTIONS 1
207 #define ETL_USING_EXCEPTIONS 0
212#if ETL_NO_NULLPTR_SUPPORT
213 #define ETL_HAS_NULLPTR 0
215 #define ETL_HAS_NULLPTR 1
220#if defined(ETL_USE_LEGACY_BITSET)
221 #define ETL_USING_LEGACY_BITSET 1
223 #define ETL_USING_LEGACY_BITSET 0
228#if defined(ETL_ARRAY_VIEW_IS_MUTABLE)
229 #define ETL_HAS_MUTABLE_ARRAY_VIEW 1
231 #define ETL_HAS_MUTABLE_ARRAY_VIEW 0
237#if ETL_USING_CPP11 && !defined(ETL_FORCE_NO_ADVANCED_CPP)
238 #define ETL_CONSTEXPR constexpr
239 #define ETL_CONSTEXPR11 constexpr
240 #define ETL_CONSTANT constexpr
241 #define ETL_STATIC_CONSTANT constexpr
242 #define ETL_DELETE = delete
243 #define ETL_EXPLICIT explicit
244 #define ETL_OVERRIDE override
245 #define ETL_FINAL final
246 #define ETL_NORETURN [[noreturn]]
247 #define ETL_MOVE(x) etl::move(x)
248 #define ETL_ENUM_CLASS(name) enum class name
249 #define ETL_ENUM_CLASS_TYPE(name, type) enum class name : type
250 #define ETL_LVALUE_REF_QUALIFIER &
252 #if ETL_USING_EXCEPTIONS
253 #define ETL_NOEXCEPT noexcept
254 #define ETL_NOEXCEPT_EXPR(...) noexcept(__VA_ARGS__)
257 #define ETL_NOEXCEPT_EXPR(...)
260 #define ETL_CONSTEXPR
261 #define ETL_CONSTEXPR11
262 #define ETL_CONSTANT const
263 #define ETL_STATIC_CONSTANT static const
270 #define ETL_NOEXCEPT_EXPR(...)
271 #define ETL_MOVE(x) x
272 #define ETL_ENUM_CLASS(name) enum name
273 #define ETL_ENUM_CLASS_TYPE(name, type) enum name
274 #define ETL_LVALUE_REF_QUALIFIER
279#if ETL_USING_CPP14 && !defined(ETL_FORCE_NO_ADVANCED_CPP)
280 #define ETL_CONSTEXPR14 constexpr
281 #define ETL_DEPRECATED [[deprecated]]
282 #define ETL_DEPRECATED_REASON(reason) [[deprecated(reason)]]
284 #define ETL_CONSTEXPR14
285 #define ETL_DEPRECATED
286 #define ETL_DEPRECATED_REASON(reason)
291#if ETL_USING_CPP17 && !defined(ETL_FORCE_NO_ADVANCED_CPP)
292 #define ETL_CONSTEXPR17 constexpr
293 #define ETL_IF_CONSTEXPR constexpr
294 #define ETL_NODISCARD [[nodiscard]]
295 #define ETL_MAYBE_UNUSED [[maybe_unused]]
296 #define ETL_FALLTHROUGH [[fallthrough]]
297 #define ETL_INLINE_VAR inline
299 #define ETL_CONSTEXPR17
300 #define ETL_IF_CONSTEXPR
301 #define ETL_NODISCARD
302 #define ETL_MAYBE_UNUSED
303 #define ETL_FALLTHROUGH
304 #define ETL_INLINE_VAR
309#if ETL_USING_CPP20 && !defined(ETL_FORCE_NO_ADVANCED_CPP)
310 #define ETL_LIKELY [[likely]]
311 #define ETL_UNLIKELY [[unlikely]]
312 #define ETL_CONSTEXPR20 constexpr
313 #define ETL_CONSTEVAL consteval
314 #define ETL_CONSTINIT constinit
315 #define ETL_NO_UNIQUE_ADDRESS [[no_unique_address]]
316 #define ETL_EXPLICIT_EXPR(...) explicit(__VA_ARGS__)
320 #define ETL_CONSTEXPR20
321 #define ETL_CONSTEVAL
322 #define ETL_CONSTINIT
323 #define ETL_NO_UNIQUE_ADDRESS
324 #define ETL_EXPLICIT_EXPR(...) explicit
327#if ETL_USING_CPP20 && ETL_USING_STL
328 #define ETL_CONSTEXPR20_STL constexpr
330 #define ETL_CONSTEXPR20_STL
335#if ETL_USING_8BIT_TYPES
336 #if ETL_NO_SMALL_CHAR_SUPPORT
337 typedef int8_t char8_t;
338 #define ETL_HAS_CHAR8_T 1
339 #define ETL_HAS_NATIVE_CHAR8_T 0
341 #define ETL_HAS_CHAR8_T 1
342 #define ETL_HAS_NATIVE_CHAR8_T 1
345 #define ETL_HAS_CHAR8_T 0
346 #define ETL_HAS_NATIVE_CHAR8_T 0
351#if ETL_NO_LARGE_CHAR_SUPPORT
352 typedef int16_t char16_t;
353 typedef int32_t char32_t;
354 #define ETL_HAS_NATIVE_CHAR16_T 0
355 #define ETL_HAS_NATIVE_CHAR32_T 0
357 #define ETL_HAS_NATIVE_CHAR16_T 1
358 #define ETL_HAS_NATIVE_CHAR32_T 1
363#if !defined(ETL_HAS_STD_ARRAY)
364 #if ETL_USING_STL && ETL_USING_CPP11
365 #define ETL_HAS_STD_ARRAY 1
367 #define ETL_HAS_STD_ARRAY 0
373#if defined(ETL_NO_ATOMICS) || \
374 defined(ETL_TARGET_DEVICE_ARM_CORTEX_M0) || \
375 defined(ETL_TARGET_DEVICE_ARM_CORTEX_M0_PLUS) || \
376 defined(__STDC_NO_ATOMICS__)
377 #define ETL_HAS_ATOMIC 0
379 #if ((ETL_USING_CPP11 && (ETL_USING_STL || defined(ETL_IN_UNIT_TEST))) || \
380 defined(ETL_COMPILER_ARM5) || \
381 defined(ETL_COMPILER_ARM6) || \
382 defined(ETL_COMPILER_GCC) || \
383 defined(ETL_COMPILER_CLANG))
384 #define ETL_HAS_ATOMIC 1
386 #define ETL_HAS_ATOMIC 0
392#if (defined(ETL_FORCE_ETL_INITIALIZER_LIST) && defined(ETL_FORCE_STD_INITIALIZER_LIST))
393 #error ETL_FORCE_ETL_INITIALIZER_LIST and ETL_FORCE_STD_INITIALIZER_LIST both been defined. Choose one or neither.
396#if (ETL_USING_CPP11 && !defined(ETL_NO_INITIALIZER_LIST))
398 #if (ETL_USING_STL && ETL_NOT_USING_STLPORT && !defined(ETL_FORCE_ETL_INITIALIZER_LIST)) || defined(ETL_IN_UNIT_TEST) || defined(ETL_FORCE_STD_INITIALIZER_LIST)
399 #define ETL_HAS_INITIALIZER_LIST 1
402 #if defined(ETL_COMPILER_MICROSOFT) || defined(ETL_COMPILER_GCC) || defined(ETL_COMPILER_CLANG) || \
403 defined(ETL_COMPILER_ARM6) || defined(ETL_COMPILER_ARM7) || defined(ETL_COMPILER_IAR) || \
404 defined(ETL_COMPILER_TEXAS_INSTRUMENTS) || defined(ETL_COMPILER_INTEL)
405 #define ETL_HAS_INITIALIZER_LIST 1
407 #define ETL_HAS_INITIALIZER_LIST 0
411 #define ETL_HAS_INITIALIZER_LIST 0
428 static ETL_CONSTANT
long cplusplus = __cplusplus;
429 static ETL_CONSTANT
int language_standard = ETL_LANGUAGE_STANDARD;
432 static ETL_CONSTANT
bool using_stl = (ETL_USING_STL == 1);
433 static ETL_CONSTANT
bool using_stlport = (ETL_USING_STLPORT == 1);
434 static ETL_CONSTANT
bool using_cpp11 = (ETL_USING_CPP11 == 1);
435 static ETL_CONSTANT
bool using_cpp14 = (ETL_USING_CPP14 == 1);
436 static ETL_CONSTANT
bool using_cpp17 = (ETL_USING_CPP17 == 1);
437 static ETL_CONSTANT
bool using_cpp20 = (ETL_USING_CPP20 == 1);
438 static ETL_CONSTANT
bool using_cpp23 = (ETL_USING_CPP23 == 1);
439 static ETL_CONSTANT
bool using_gcc_compiler = (ETL_USING_GCC_COMPILER == 1);
440 static ETL_CONSTANT
bool using_microsoft_compiler = (ETL_USING_MICROSOFT_COMPILER == 1);
441 static ETL_CONSTANT
bool using_arm5_compiler = (ETL_USING_ARM5_COMPILER == 1);
442 static ETL_CONSTANT
bool using_arm6_compiler = (ETL_USING_ARM6_COMPILER == 1);
443 static ETL_CONSTANT
bool using_arm7_compiler = (ETL_USING_ARM7_COMPILER == 1);
444 static ETL_CONSTANT
bool using_clang_compiler = (ETL_USING_CLANG_COMPILER == 1);
445 static ETL_CONSTANT
bool using_green_hills_compiler = (ETL_USING_GREEN_HILLS_COMPILER == 1);
446 static ETL_CONSTANT
bool using_iar_compiler = (ETL_USING_IAR_COMPILER == 1);
447 static ETL_CONSTANT
bool using_intel_compiler = (ETL_USING_INTEL_COMPILER == 1);
448 static ETL_CONSTANT
bool using_texas_instruments_compiler = (ETL_USING_TEXAS_INSTRUMENTS_COMPILER == 1);
449 static ETL_CONSTANT
bool using_generic_compiler = (ETL_USING_GENERIC_COMPILER == 1);
450 static ETL_CONSTANT
bool using_legacy_bitset = (ETL_USING_LEGACY_BITSET == 1);
451 static ETL_CONSTANT
bool using_exceptions = (ETL_USING_EXCEPTIONS == 1);
454 static ETL_CONSTANT
bool has_initializer_list = (ETL_HAS_INITIALIZER_LIST == 1);
455 static ETL_CONSTANT
bool has_8bit_types = (ETL_USING_8BIT_TYPES == 1);
456 static ETL_CONSTANT
bool has_64bit_types = (ETL_USING_64BIT_TYPES == 1);
457 static ETL_CONSTANT
bool has_atomic = (ETL_HAS_ATOMIC == 1);
458 static ETL_CONSTANT
bool has_nullptr = (ETL_HAS_NULLPTR == 1);
459 static ETL_CONSTANT
bool has_char8_t = (ETL_HAS_CHAR8_T == 1);
460 static ETL_CONSTANT
bool has_native_char8_t = (ETL_HAS_NATIVE_CHAR8_T == 1);
461 static ETL_CONSTANT
bool has_native_char16_t = (ETL_HAS_NATIVE_CHAR16_T == 1);
462 static ETL_CONSTANT
bool has_native_char32_t = (ETL_HAS_NATIVE_CHAR32_T == 1);
463 static ETL_CONSTANT
bool has_string_truncation_checks = (ETL_HAS_STRING_TRUNCATION_CHECKS == 1);
464 static ETL_CONSTANT
bool has_error_on_string_truncation = (ETL_HAS_ERROR_ON_STRING_TRUNCATION == 1);
465 static ETL_CONSTANT
bool has_string_clear_after_use = (ETL_HAS_STRING_CLEAR_AFTER_USE == 1);
466 static ETL_CONSTANT
bool has_istring_repair = (ETL_HAS_ISTRING_REPAIR == 1);
467 static ETL_CONSTANT
bool has_ivector_repair = (ETL_HAS_IVECTOR_REPAIR == 1);
468 static ETL_CONSTANT
bool has_mutable_array_view = (ETL_HAS_MUTABLE_ARRAY_VIEW == 1);
469 static ETL_CONSTANT
bool has_ideque_repair = (ETL_HAS_IDEQUE_REPAIR == 1);
472 static ETL_CONSTANT
bool is_debug_build = (ETL_IS_DEBUG_BUILD == 1);
bitset_ext
Definition: absolute.h:38