NexusForce
1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
c++config.hpp
浏览该文件的文档.
1
#ifndef NEFORCE_CORE_CONFIG_CPPCONFIG_HPP__
2
#define NEFORCE_CORE_CONFIG_CPPCONFIG_HPP__
3
21
22
#include <cassert>
23
29
30
#if defined(WIN32) || defined(_WIN32) || defined(_M_X86) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
31
36
# define NEFORCE_PLATFORM_WINDOWS 1
37
42
# define NEFORCE_PLATFORM_WINDOWS32 1
43
44
# if defined(WIN64) || defined(_WIN64) || defined(_M_X64) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
49
# define NEFORCE_PLATFORM_WINDOWS64 1
50
# endif
51
#endif
52
53
#if defined(__linux__) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
58
# define NEFORCE_PLATFORM_LINUX 1
59
60
# if (__WORDSIZE == 32) || (__SIZEOF_POINTER__ == 4) || defined(NEFORCE_PLATFORM_LINUX64) || \
61
defined(NEXUSFORCE_ENABLE_DOXYGEN)
66
# define NEFORCE_PLATFORM_LINUX32 1
67
# endif
68
69
# if (__WORDSIZE == 64) || (__SIZEOF_POINTER__ == 8) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
74
# define NEFORCE_PLATFORM_LINUX64 1
75
# endif
76
#endif
77
78
#if !(defined(NEFORCE_PLATFORM_WINDOWS) || defined(NEFORCE_PLATFORM_LINUX))
79
# error "NeForce: 不支持的操作系统"
80
#endif
81
82
83
#ifdef NEFORCE_PLATFORM_WINDOWS
84
85
# ifndef WIN32_LEAN_AND_MEAN
86
# define WIN32_LEAN_AND_MEAN
87
# endif
88
89
# ifndef NOMINMAX
90
# define NOMINMAX
91
# endif
92
93
# ifdef bool
94
# undef bool
95
# endif
96
97
# ifdef true
98
# undef true
99
# endif
100
101
# ifdef false
102
# undef false
103
# endif
104
105
# ifdef max
106
# undef max
107
# endif
108
109
# ifdef min
110
# undef min
111
# endif
112
113
#endif
114
// PlatformDetection
116
122
123
#if defined(__clang__) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
128
# define NEFORCE_COMPILER_CLANG 1
129
#endif
130
131
#if defined(__GNUC__) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
136
# define NEFORCE_COMPILER_GNUC 1
137
#endif
138
139
#if defined(_MSC_VER) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
144
# define NEFORCE_COMPILER_MSVC 1
145
146
# if defined(NEFORCE_COMPILER_CLANG) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
147
# define NEFORCE_COMPILER_CLANG_CL 1
148
# endif
149
#endif
150
151
#if defined(__GNUC__) && !defined(__clang__) && !defined(__INTEL_COMPILER) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
156
# define NEFORCE_COMPILER_GCC 1
157
#endif
158
159
#if defined(__MINGW32__) || defined(__MINGW64__) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
164
# define NEFORCE_COMPILER_MINGW 1
165
# if defined(NEFORCE_COMPILER_CLANG) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
170
# define NEFORCE_COMPILER_LLVM_MINGW 1
171
# endif
172
#endif
173
174
#if !(defined(NEFORCE_COMPILER_GNUC) || defined(NEFORCE_COMPILER_MSVC))
175
# error "NeForce: 不支持的编译器"
176
#endif
177
178
#ifdef __clang_analyzer__
179
# define NEFORCE_ANALYZER_CLANG 1
180
#endif
181
// CompilerDetection
183
189
190
#if defined(NEFORCE_COMPILER_MSVC)
195
# define NEFORCE_API_EXPORT_DLL __declspec(dllexport)
200
# define NEFORCE_API_IMPORT_DLL __declspec(dllimport)
201
#endif
202
203
#if defined(NEFORCE_COMPILER_GNUC)
208
# define NEFORCE_API_EXPORT
209
#endif
210
211
#if defined(NEFORCE_COMPILER_GNUC)
212
# define NEFORCE_API NEFORCE_API_EXPORT
213
#else
214
# if defined(NEFORCE_DLLEXPORTS)
215
# define NEFORCE_API NEFORCE_API_EXPORT_DLL
216
# else
217
# define NEFORCE_API NEFORCE_API_IMPORT_DLL
218
# endif
219
#endif
220
// APIImpExpSpec
222
228
229
#if defined(__i386__) || defined(__i386) || defined(_M_IX86) || defined(__X86__) || defined(_X86_) || \
230
defined(__I86__) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
231
# define NEFORCE_ARCH_X86_32 1
232
#endif
233
234
#if defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(__amd64__) || defined(__amd64) || \
235
defined(_M_AMD64) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
236
# define NEFORCE_ARCH_X86_64 1
237
#endif
238
239
#if defined(NEFORCE_ARCH_X86_32) || defined(NEFORCE_ARCH_X86_64)
240
# define NEFORCE_ARCH_X86 1
241
#endif
242
243
244
#if defined(__arm__) || defined(__arm) || defined(_ARM_) || defined(_M_ARM) || defined(__ARM_ARCH) || \
245
defined(__TARGET_ARCH_ARM) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
246
# define NEFORCE_ARCH_ARM32 1
247
#endif
248
249
#if defined(__aarch64__) || defined(__aarch64) || defined(_M_ARM64) || defined(__ARM64_ARCH_8__) || \
250
defined(__ARM_ARCH_ISA_A64) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
251
# define NEFORCE_ARCH_AARCH64 1
252
#endif
253
254
#if defined(NEFORCE_ARCH_ARM32) || defined(NEFORCE_ARCH_AARCH64)
255
# define NEFORCE_ARCH_ARM 1
256
#endif
257
258
259
#if defined(__riscv) || defined(__riscv__) || defined(riscv) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
260
# define NEFORCE_ARCH_RISCV 1
261
# if __riscv_xlen == 32 || defined(NEXUSFORCE_ENABLE_DOXYGEN)
262
# define NEFORCE_ARCH_RISCV32 1
263
# endif
264
# if __riscv_xlen == 64 || defined(NEXUSFORCE_ENABLE_DOXYGEN)
265
# define NEFORCE_ARCH_RISCV64 1
266
# endif
267
#endif
268
269
270
#if defined(__loongarch__) || defined(__loongarch) || defined(__loongarch32) || defined(__loongarch64) || \
271
defined(_LOONGARCH_SIM) || defined(_LOONGARCH) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
272
# define NEFORCE_ARCH_LOONGARCH 1
273
# if defined(__loongarch32) || defined(_LOONGARCH_SIM == _ABILP32_SIM) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
274
# define NEFORCE_ARCH_LOONGARCH32 1
275
# endif
276
# if defined(__loongarch64) || defined(_LOONGARCH_SIM == _ABILP64_SIM) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
277
# define NEFORCE_ARCH_LOONGARCH64 1
278
# endif
279
#endif
280
281
#if !(defined(NEFORCE_ARCH_X86) || defined(NEFORCE_ARCH_ARM) || defined(NEFORCE_ARCH_RISCV) || \
282
defined(NEFORCE_ARCH_LOONGARCH))
283
# error "NeForce: 不支持的指令集"
284
#endif
285
// ArchitectureDetection
287
293
294
#if defined(NEFORCE_ARCH_X86_64) || defined(NEFORCE_ARCH_AARCH64) || defined(NEFORCE_ARCH_RISCV64) || \
295
defined(NEFORCE_ARCH_LOONGARCH64) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
300
# define NEFORCE_ARCH_BITS_64 1
301
#endif
302
#if defined(NEFORCE_ARCH_X86_32) || defined(NEFORCE_ARCH_ARM32) || defined(NEFORCE_ARCH_RISCV32) || \
303
defined(NEFORCE_ARCH_LOONGARCH32) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
308
# define NEFORCE_ARCH_BITS_32 1
309
#endif
310
311
#if !(defined(NEFORCE_ARCH_BITS_64) || defined(NEFORCE_ARCH_BITS_32))
312
# error "NeForce: 不支持的位宽"
313
#endif
314
// DataBusWidth
316
317
318
#if defined(NEFORCE_ARCH_X86) && defined(NEFORCE_USING_INTEL_TSX)
319
# define NEFORCE_SUPPORT_INTEL_TSX 1
320
#endif
321
322
#ifdef NEFORCE_ARCH_BITS_64
323
# define NEFORCE_SUPPORT_INTRINSIC_INT128 1
324
#endif
325
326
332
333
#if (__cplusplus >= 202100L) || (_MSVC_LANG >= 202100L)
338
# define NEFORCE_STANDARD_23 1
339
#endif
340
#if (__cplusplus >= 202002L) || defined(NEFORCE_STANDARD_23) || (_MSVC_LANG >= 202002L)
345
# define NEFORCE_STANDARD_20 1
346
#endif
347
#if (__cplusplus >= 201703L) || defined(NEFORCE_STANDARD_20) || (_MSVC_LANG >= 201703L)
352
# define NEFORCE_STANDARD_17 1
353
#endif
354
#if (__cplusplus >= 201402L) || defined(NEFORCE_STANDARD_17) || (_MSVC_LANG >= 201402L)
359
# define NEFORCE_STANDARD_14 1
360
#endif
361
#if (__cplusplus >= 201103L) || defined(NEFORCE_STANDARD_14) || (_MSVC_LANG >= 201103L)
366
# define NEFORCE_STANDARD_11 1
367
#endif
368
#if (__cplusplus >= 199711L) || defined(NEFORCE_STANDARD_11) || (_MSVC_LANG >= 199711L)
373
# define NEFORCE_STANDARD_98 1
374
#endif
375
// CxxStandardDetection
377
378
379
#define __NEFORCE_GLOBAL_NAMESPACE__ neforce
380
#define NEFORCE_BEGIN_NAMESPACE__ namespace __NEFORCE_GLOBAL_NAMESPACE__ {
381
#define NEFORCE_END_NAMESPACE__ }
382
#define _NEFORCE __NEFORCE_GLOBAL_NAMESPACE__ ::
383
384
#define __NEFORCE_INNER_NAMESPACE__ inner
385
#define NEFORCE_BEGIN_INNER__ namespace __NEFORCE_INNER_NAMESPACE__ {
386
#define NEFORCE_END_INNER__ }
387
388
#define __NEFORCE_CONSTANTS_NAMESPACE__ constants
389
#define NEFORCE_BEGIN_CONSTANTS__ namespace __NEFORCE_CONSTANTS_NAMESPACE__ {
390
#define NEFORCE_END_CONSTANTS__ }
391
392
#define __NEFORCE_THIS_THREAD_NAMESPACE__ this_thread
393
#define NEFORCE_BEGIN_THIS_THREAD__ namespace __NEFORCE_THIS_THREAD_NAMESPACE__ {
394
#define NEFORCE_END_THIS_THREAD__ }
395
396
#define __NEFORCE_RANGES_NAMESPACE__ ranges
397
#define NEFORCE_BEGIN_RANGES__ namespace __NEFORCE_RANGES_NAMESPACE__ {
398
#define NEFORCE_END_RANGES__ }
399
400
#define __NEFORCE_RANGES_VIEWS_NAMESPACE__ views
401
#define NEFORCE_BEGIN_RANGES_VIEWS__ namespace __NEFORCE_RANGES_VIEWS_NAMESPACE__ {
402
#define NEFORCE_END_RANGES_VIEWS__ }
403
404
#define __NEFORCE_LITERALS_NAMESPACE__ literals
405
#define NEFORCE_BEGIN_LITERALS__ inline namespace __NEFORCE_LITERALS_NAMESPACE__ {
406
#define NEFORCE_END_LITERALS__ }
407
408
#define __NEFORCE_REFLECT_NAMESPACE__ reflect
409
#define NEFORCE_BEGIN_REFLECT__ namespace __NEFORCE_REFLECT_NAMESPACE__ {
410
#define NEFORCE_END_REFLECT__ }
411
412
#define __NEFORCE_HTTP_NAMESPACE__ http
413
#define NEFORCE_BEGIN_HTTP__ namespace __NEFORCE_HTTP_NAMESPACE__ {
414
#define NEFORCE_END_HTTP__ }
415
416
417
#ifdef NEFORCE_STANDARD_11
418
# define NEFORCE_CONSTEXPR11 constexpr
419
#else
420
# define NEFORCE_CONSTEXPR11 inline
421
#endif
// NEFORCE_STANDARD_11
422
423
#ifdef NEFORCE_STANDARD_14
424
# define NEFORCE_CONSTEXPR14 constexpr
425
#else
426
# define NEFORCE_CONSTEXPR14 inline
427
#endif
// NEFORCE_STANDARD_14
428
429
#ifdef NEFORCE_STANDARD_17
430
# define NEFORCE_CONSTEXPR17 constexpr
431
# define NEFORCE_INLINE17 inline
432
#else
433
# define NEFORCE_CONSTEXPR17 inline
434
# define NEFORCE_INLINE17
435
#endif
// NEFORCE_STANDARD_17
436
437
#ifdef NEFORCE_STANDARD_20
438
# define NEFORCE_CONSTEXPR20 constexpr
439
#else
440
# define NEFORCE_CONSTEXPR20 inline
441
#endif
// NEFORCE_STANDARD_20
442
443
#ifdef NEFORCE_STANDARD_23
444
# define NEFORCE_CONSTEXPR23 constexpr
445
#else
446
# define NEFORCE_CONSTEXPR23 inline
447
#endif
// NEFORCE_STANDARD_23
448
449
450
#ifdef NEFORCE_STANDARD_17
451
# define NEFORCE_IF_CONSTEXPR if constexpr
452
#else
453
# define NEFORCE_IF_CONSTEXPR if
454
#endif
455
456
457
#ifdef NEFORCE_STANDARD_17
458
# define NEFORCE_NODISCARD [[nodiscard]]
459
460
# define NEFORCE_ALLOC_NODISCARD [[nodiscard("discard the return of allocators will cause memory leaks.")]]
461
#else
462
# define NEFORCE_NODISCARD
463
464
# define NEFORCE_ALLOC_NODISCARD
465
#endif
466
467
468
#ifdef NEFORCE_COMPILER_GNUC
469
# define NEFORCE_ALWAYS_INLINE __attribute__((always_inline))
470
# define NEFORCE_ALWAYS_INLINE_INLINE NEFORCE_ALWAYS_INLINE inline
471
#elif defined(NEFORCE_COMPILER_MSVC)
472
# define NEFORCE_ALWAYS_INLINE __forceinline
473
# define NEFORCE_ALWAYS_INLINE_INLINE NEFORCE_ALWAYS_INLINE
474
#else
475
# define NEFORCE_ALWAYS_INLINE inline
476
# define NEFORCE_ALWAYS_INLINE_INLINE inline
477
#endif
478
479
480
#ifdef NEFORCE_COMPILER_GNUC
481
# define NEFORCE_UNUSED __attribute__((unused))
482
#else
483
# define NEFORCE_UNUSED
484
#endif
485
486
487
#ifdef NEFORCE_STANDARD_17
488
# define NEFORCE_UNLIKELY [[unlikely]]
489
#else
490
# define NEFORCE_UNLIKELY
491
#endif
492
493
494
#ifdef NEFORCE_STANDARD_20
495
# define NEFORCE_LIKELY [[likely]]
496
#else
497
# define NEFORCE_LIKELY
498
#endif
499
500
501
#if defined(NEFORCE_STANDARD_11)
502
# define NEFORCE_NORETURN [[noreturn]]
503
#elif defined(NEFORCE_COMPILER_GNUC)
504
# define NEFORCE_NORETURN __attribute__((noreturn))
505
#elif defined(NEFORCE_COMPILER_MSVC)
506
# define NEFORCE_NORETURN __declspec(noreturn)
507
#else
508
# define NEFORCE_NORETURN
509
#endif
510
511
512
#ifndef NEFORCE_COMPILER_GNUC
513
# define NEFORCE_PURE_FUNCTION
514
# define NEFORCE_CONST_FUNCTION
515
#else
516
# define NEFORCE_PURE_FUNCTION __attribute__((__pure__))
517
# define NEFORCE_CONST_FUNCTION __attribute__((__const__))
518
#endif
519
520
521
#ifdef NEFORCE_STANDARD_14
522
# define NEFORCE_DEPRECATED [[deprecated]]
523
# define NEFORCE_DEPRECATED_FOR(MSG) [[deprecated(MSG)]]
524
#else
525
# define NEFORCE_DEPRECATED
526
# define NEFORCE_DEPRECATED_FOR(MSG)
527
#endif
528
529
530
#if defined(NEFORCE_COMPILER_GNUC)
531
# define NEFORCE_NOVTABLE __attribute__((novtable))
532
#elif defined(NEFORCE_COMPILER_MSVC)
533
# define NEFORCE_NOVTABLE __declspec(novtable)
534
#else
535
# define NEFORCE_NOVTABLE
536
#endif
537
538
539
#if defined(NEFORCE_COMPILER_GNUC)
540
# define NEFORCE_ALLOC_OPTIMIZE NEFORCE_ALWAYS_INLINE
541
#elif defined(NEFORCE_COMPILER_MSVC)
542
# define NEFORCE_ALLOC_OPTIMIZE __declspec(allocator)
543
#else
544
# define NEFORCE_ALLOC_OPTIMIZE
545
#endif
546
547
548
#if defined(NEFORCE_COMPILER_GNUC)
549
# define NEFORCE_RESTRICT __restrict__
550
#else
551
# define NEFORCE_RESTRICT __restrict
552
#endif
553
554
562
563
#ifdef NEFORCE_STANDARD_20
568
# define NEFORCE_MACRO_RANGE_UNICODE_CHARS(MAC) \
569
MAC(char8_t) \
570
MAC(char16_t) \
571
MAC(char32_t)
572
#else
573
# define NEFORCE_MACRO_RANGE_UNICODE_CHARS(MAC) \
574
MAC(char16_t) \
575
MAC(char32_t)
576
#endif
577
582
#define NEFORCE_MACRO_RANGE_CHARS(MAC) \
583
MAC(char) \
584
MAC(wchar_t) \
585
NEFORCE_MACRO_RANGE_UNICODE_CHARS(MAC)
586
591
#define NEFORCE_MACRO_RANGE_SIGNED_INT(MAC) \
592
MAC(signed char) \
593
MAC(short) \
594
MAC(int) \
595
MAC(long) \
596
MAC(long long)
597
602
#define NEFORCE_MACRO_RANGE_UNSIGNED_INT(MAC) \
603
MAC(unsigned char) \
604
MAC(unsigned short) \
605
MAC(unsigned int) \
606
MAC(unsigned long) \
607
MAC(unsigned long long)
608
613
#define NEFORCE_MACRO_RANGE_INT(MAC) \
614
NEFORCE_MACRO_RANGE_SIGNED_INT(MAC) \
615
NEFORCE_MACRO_RANGE_UNSIGNED_INT(MAC)
616
621
#define NEFORCE_MACRO_RANGE_FLOAT(MAC) \
622
MAC(float) \
623
MAC(double) \
624
MAC(long double)
625
630
#define NEFORCE_MACRO_RANGE_ARITHMETIC(MAC) \
631
NEFORCE_MACRO_RANGE_CHARS(MAC) \
632
NEFORCE_MACRO_RANGE_INT(MAC) \
633
NEFORCE_MACRO_RANGE_FLOAT(MAC)
634
639
#define NEFORCE_MACRO_RANGES_CV(MAC) \
640
MAC(const) \
641
MAC(volatile) \
642
MAC(const volatile)
643
648
#define NEFORCE_MACRO_RANGES_CV_REF(MAC) \
649
MAC(&) \
650
MAC(const&) \
651
MAC(volatile&) \
652
MAC(const volatile&) \
653
MAC(&&) \
654
MAC(const&&) \
655
MAC(volatile&&) \
656
MAC(const volatile&&)
657
662
#define NEFORCE_MACRO_RANGES_CV_REF_NOEXCEPT(MAC) \
663
MAC(noexcept) \
664
MAC(const noexcept) \
665
MAC(volatile noexcept) \
666
MAC(const volatile noexcept) \
667
MAC(& noexcept) \
668
MAC(const& noexcept) \
669
MAC(volatile& noexcept) \
670
MAC(const volatile& noexcept) \
671
MAC(&& noexcept) \
672
MAC(const&& noexcept) \
673
MAC(volatile&& noexcept) \
674
MAC(const volatile&& noexcept)
675
// TypeRangeMacros
677
678
#endif
// NEFORCE_CORE_CONFIG_CPPCONFIG_HPP__
include
NeForce
core
config
c++config.hpp
制作者
1.16.0