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 <assert.h>
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(__GNUC__) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
128
# define NEFORCE_COMPILER_GNUC 1
129
130
# if defined(__clang__) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
135
# define NEFORCE_COMPILER_CLANG 1
136
# endif
137
138
# if defined(__MINGW32__) || defined(__MINGW64__) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
143
# define NEFORCE_COMPILER_MINGW 1
144
# endif
145
146
# if !(defined(NEFORCE_COMPILER_CLANG) || defined(NEFORCE_COMPILER_MINGW)) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
151
# define NEFORCE_COMPILER_GCC 1
152
# endif
153
#endif
154
155
#if defined(_MSC_VER) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
160
# define NEFORCE_COMPILER_MSVC 1
161
#endif
162
163
#if !(defined(NEFORCE_COMPILER_GNUC) || defined(NEFORCE_COMPILER_MSVC))
164
# error "NeForce: 不支持的编译器"
165
#endif
166
167
#ifdef __clang_analyzer__
168
# define NEFORCE_ANALYZER_CLANG 1
169
#endif
170
// CompilerDetection
172
178
179
#if defined(NEFORCE_COMPILER_MSVC) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
184
# define NEFORCE_API_EXPORT_DLL __declspec(dllexport)
189
# define NEFORCE_API_IMPORT_DLL __declspec(dllimport)
190
#endif
191
192
#if defined(NEFORCE_COMPILER_GNUC) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
197
# define NEFORCE_API_EXPORT
198
#endif
199
200
#if defined(NEFORCE_COMPILER_GNUC)
201
# define NEFORCE_API NEFORCE_API_EXPORT
202
#else
203
# if defined(NEFORCE_DLLEXPORTS)
204
# define NEFORCE_API NEFORCE_API_EXPORT_DLL
205
# else
206
# define NEFORCE_API NEFORCE_API_IMPORT_DLL
207
# endif
208
#endif
209
// APIImpExpSpec
211
217
218
#if defined(__i386__) || defined(__i386) || defined(_M_IX86) || defined(__X86__) || defined(_X86_) || \
219
defined(__I86__) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
220
# define NEFORCE_ARCH_X86_32 1
221
#endif
222
223
#if defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(__amd64__) || defined(__amd64) || \
224
defined(_M_AMD64) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
225
# define NEFORCE_ARCH_X86_64 1
226
#endif
227
228
#if defined(NEFORCE_ARCH_X86_32) || defined(NEFORCE_ARCH_X86_64)
229
# define NEFORCE_ARCH_X86 1
230
#endif
231
232
233
#if defined(__arm__) || defined(__arm) || defined(_ARM_) || defined(_M_ARM) || defined(__ARM_ARCH) || \
234
defined(__TARGET_ARCH_ARM) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
235
# define NEFORCE_ARCH_ARM32 1
236
#endif
237
238
#if defined(__aarch64__) || defined(__aarch64) || defined(_M_ARM64) || defined(__ARM64_ARCH_8__) || \
239
defined(__ARM_ARCH_ISA_A64) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
240
# define NEFORCE_ARCH_AARCH64 1
241
#endif
242
243
#if defined(NEFORCE_ARCH_ARM32) || defined(NEFORCE_ARCH_AARCH64)
244
# define NEFORCE_ARCH_ARM 1
245
#endif
246
247
248
#if defined(__riscv) || defined(__riscv__) || defined(riscv) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
249
# define NEFORCE_ARCH_RISCV 1
250
# if __riscv_xlen == 32 || defined(NEXUSFORCE_ENABLE_DOXYGEN)
251
# define NEFORCE_ARCH_RISCV32 1
252
# endif
253
# if __riscv_xlen == 64 || defined(NEXUSFORCE_ENABLE_DOXYGEN)
254
# define NEFORCE_ARCH_RISCV64 1
255
# endif
256
#endif
257
258
259
#if defined(__loongarch__) || defined(__loongarch) || defined(__loongarch32) || defined(__loongarch64) || \
260
defined(_LOONGARCH_SIM) || defined(_LOONGARCH) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
261
# define NEFORCE_ARCH_LOONGARCH 1
262
# if defined(__loongarch32) || defined(_LOONGARCH_SIM == _ABILP32_SIM) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
263
# define NEFORCE_ARCH_LOONGARCH32 1
264
# endif
265
# if defined(__loongarch64) || defined(_LOONGARCH_SIM == _ABILP64_SIM) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
266
# define NEFORCE_ARCH_LOONGARCH64 1
267
# endif
268
#endif
269
270
#if !(defined(NEFORCE_ARCH_X86) || defined(NEFORCE_ARCH_ARM) || defined(NEFORCE_ARCH_RISCV) || \
271
defined(NEFORCE_ARCH_LOONGARCH))
272
# error "NeForce: 不支持的指令集"
273
#endif
274
// ArchitectureDetection
276
282
283
#if defined(NEFORCE_ARCH_X86_64) || defined(NEFORCE_ARCH_AARCH64) || defined(NEFORCE_ARCH_RISCV64) || \
284
defined(NEFORCE_ARCH_LOONGARCH64) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
289
# define NEFORCE_ARCH_BITS_64 1
290
#endif
291
#if defined(NEFORCE_ARCH_X86_32) || defined(NEFORCE_ARCH_ARM32) || defined(NEFORCE_ARCH_RISCV32) || \
292
defined(NEFORCE_ARCH_LOONGARCH32) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
297
# define NEFORCE_ARCH_BITS_32 1
298
#endif
299
300
#if !(defined(NEFORCE_ARCH_BITS_64) || defined(NEFORCE_ARCH_BITS_32))
301
# error "NeForce: 不支持的位宽"
302
#endif
303
// DataBusWidth
305
311
312
#if (__cplusplus >= 202100L) || (_MSVC_LANG >= 202100L) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
317
# define NEFORCE_STANDARD_23 1
318
#endif
319
#if (__cplusplus >= 202002L) || defined(NEFORCE_STANDARD_23) || (_MSVC_LANG >= 202002L) || \
320
defined(NEXUSFORCE_ENABLE_DOXYGEN)
325
# define NEFORCE_STANDARD_20 1
326
#endif
327
#if (__cplusplus >= 201703L) || defined(NEFORCE_STANDARD_20) || (_MSVC_LANG >= 201703L) || \
328
defined(NEXUSFORCE_ENABLE_DOXYGEN)
333
# define NEFORCE_STANDARD_17 1
334
#endif
335
#if (__cplusplus >= 201402L) || defined(NEFORCE_STANDARD_17) || (_MSVC_LANG >= 201402L) || \
336
defined(NEXUSFORCE_ENABLE_DOXYGEN)
341
# define NEFORCE_STANDARD_14 1
342
#endif
343
#if (__cplusplus >= 201103L) || defined(NEFORCE_STANDARD_14) || (_MSVC_LANG >= 201103L) || \
344
defined(NEXUSFORCE_ENABLE_DOXYGEN)
349
# define NEFORCE_STANDARD_11 1
350
#endif
351
#if (__cplusplus >= 199711L) || defined(NEFORCE_STANDARD_11) || (_MSVC_LANG >= 199711L) || \
352
defined(NEXUSFORCE_ENABLE_DOXYGEN)
357
# define NEFORCE_STANDARD_98 1
358
#endif
359
// CxxStandardDetection
361
362
363
#define __NEFORCE_GLOBAL_NAMESPACE__ neforce
364
#define NEFORCE_BEGIN_NAMESPACE__ namespace __NEFORCE_GLOBAL_NAMESPACE__ {
365
#define NEFORCE_END_NAMESPACE__ }
366
#define _NEFORCE __NEFORCE_GLOBAL_NAMESPACE__ ::
367
368
#define __NEFORCE_INNER_NAMESPACE__ inner
369
#define NEFORCE_BEGIN_INNER__ namespace __NEFORCE_INNER_NAMESPACE__ {
370
#define NEFORCE_END_INNER__ }
371
372
#define __NEFORCE_CONSTANTS_NAMESPACE__ constants
373
#define NEFORCE_BEGIN_CONSTANTS__ namespace __NEFORCE_CONSTANTS_NAMESPACE__ {
374
#define NEFORCE_END_CONSTANTS__ }
375
376
#define __NEFORCE_THIS_THREAD_NAMESPACE__ this_thread
377
#define NEFORCE_BEGIN_THIS_THREAD__ namespace __NEFORCE_THIS_THREAD_NAMESPACE__ {
378
#define NEFORCE_END_THIS_THREAD__ }
379
380
#define __NEFORCE_RANGES_NAMESPACE__ ranges
381
#define NEFORCE_BEGIN_RANGES__ namespace __NEFORCE_RANGES_NAMESPACE__ {
382
#define NEFORCE_END_RANGES__ }
383
384
#define __NEFORCE_RANGES_VIEWS_NAMESPACE__ views
385
#define NEFORCE_BEGIN_RANGES_VIEWS__ namespace __NEFORCE_RANGES_VIEWS_NAMESPACE__ {
386
#define NEFORCE_END_RANGES_VIEWS__ }
387
388
#define __NEFORCE_LITERALS_NAMESPACE__ literals
389
#define NEFORCE_BEGIN_LITERALS__ inline namespace __NEFORCE_LITERALS_NAMESPACE__ {
390
#define NEFORCE_END_LITERALS__ }
391
392
#define __NEFORCE_REFLECT_NAMESPACE__ reflect
393
#define NEFORCE_BEGIN_REFLECT__ namespace __NEFORCE_REFLECT_NAMESPACE__ {
394
#define NEFORCE_END_REFLECT__ }
395
396
#define __NEFORCE_HTTP_NAMESPACE__ http
397
#define NEFORCE_BEGIN_HTTP__ namespace __NEFORCE_HTTP_NAMESPACE__ {
398
#define NEFORCE_END_HTTP__ }
399
400
401
#ifdef NEFORCE_STANDARD_11
402
# define NEFORCE_CONSTEXPR11 constexpr
403
#else
404
# define NEFORCE_CONSTEXPR11 inline
405
#endif
// NEFORCE_STANDARD_11
406
407
#ifdef NEFORCE_STANDARD_14
408
# define NEFORCE_CONSTEXPR14 constexpr
409
#else
410
# define NEFORCE_CONSTEXPR14 inline
411
#endif
// NEFORCE_STANDARD_14
412
413
#ifdef NEFORCE_STANDARD_17
414
# define NEFORCE_CONSTEXPR17 constexpr
415
# define NEFORCE_INLINE17 inline
416
#else
417
# define NEFORCE_CONSTEXPR17 inline
418
# define NEFORCE_INLINE17
419
#endif
// NEFORCE_STANDARD_17
420
421
#ifdef NEFORCE_STANDARD_20
422
# define NEFORCE_CONSTEXPR20 constexpr
423
#else
424
# define NEFORCE_CONSTEXPR20 inline
425
#endif
// NEFORCE_STANDARD_20
426
427
#ifdef NEFORCE_STANDARD_23
428
# define NEFORCE_CONSTEXPR23 constexpr
429
#else
430
# define NEFORCE_CONSTEXPR23 inline
431
#endif
// NEFORCE_STANDARD_23
432
433
434
#ifdef NEFORCE_STANDARD_17
435
# define NEFORCE_IF_CONSTEXPR if constexpr
436
#else
437
# define NEFORCE_IF_CONSTEXPR if
438
#endif
439
440
441
#ifdef NEFORCE_STANDARD_17
442
# define NEFORCE_NODISCARD [[nodiscard]]
443
444
# define NEFORCE_ALLOC_NODISCARD [[nodiscard("discard the return of allocators will cause memory leaks.")]]
445
#else
446
# define NEFORCE_NODISCARD
447
448
# define NEFORCE_ALLOC_NODISCARD
449
#endif
450
451
452
#ifdef NEXUSFORCE_ENABLE_DOXYGEN
453
# define NEFORCE_ALWAYS_INLINE inline
454
# define NEFORCE_ALWAYS_INLINE_INLINE inline
455
#elif defined(NEFORCE_COMPILER_GNUC)
456
# define NEFORCE_ALWAYS_INLINE __attribute__((always_inline))
457
# define NEFORCE_ALWAYS_INLINE_INLINE NEFORCE_ALWAYS_INLINE inline
458
#elif defined(NEFORCE_COMPILER_MSVC)
459
# define NEFORCE_ALWAYS_INLINE __forceinline
460
# define NEFORCE_ALWAYS_INLINE_INLINE NEFORCE_ALWAYS_INLINE
461
#else
462
# define NEFORCE_ALWAYS_INLINE inline
463
# define NEFORCE_ALWAYS_INLINE_INLINE inline
464
#endif
465
466
467
#ifdef NEFORCE_COMPILER_GNUC
468
# define NEFORCE_UNUSED __attribute__((unused))
469
#else
470
# define NEFORCE_UNUSED
471
#endif
472
473
474
#ifdef NEFORCE_STANDARD_17
475
# define NEFORCE_UNLIKELY [[unlikely]]
476
#else
477
# define NEFORCE_UNLIKELY
478
#endif
479
480
481
#ifdef NEFORCE_STANDARD_20
482
# define NEFORCE_LIKELY [[likely]]
483
#else
484
# define NEFORCE_LIKELY
485
#endif
486
487
488
#if defined(NEFORCE_STANDARD_11)
489
# define NEFORCE_NORETURN [[noreturn]]
490
#elif defined(NEFORCE_COMPILER_GNUC)
491
# define NEFORCE_NORETURN __attribute__((noreturn))
492
#elif defined(NEFORCE_COMPILER_MSVC)
493
# define NEFORCE_NORETURN __declspec(noreturn)
494
#else
495
# define NEFORCE_NORETURN
496
#endif
497
498
499
#if !defined(NEFORCE_COMPILER_GNUC) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
500
# define NEFORCE_PURE_FUNCTION
501
# define NEFORCE_CONST_FUNCTION
502
#else
503
# define NEFORCE_PURE_FUNCTION __attribute__((__pure__))
504
# define NEFORCE_CONST_FUNCTION __attribute__((__const__))
505
#endif
506
507
508
#ifdef NEFORCE_STANDARD_14
509
# define NEFORCE_DEPRECATED [[deprecated]]
510
# define NEFORCE_DEPRECATED_FOR(MSG) [[deprecated(MSG)]]
511
#else
512
# define NEFORCE_DEPRECATED
513
# define NEFORCE_DEPRECATED_FOR(MSG)
514
#endif
515
516
517
#if defined(NEFORCE_COMPILER_GNUC)
518
# define NEFORCE_NOVTABLE __attribute__((novtable))
519
#elif defined(NEFORCE_COMPILER_MSVC)
520
# define NEFORCE_NOVTABLE __declspec(novtable)
521
#else
522
# define NEFORCE_NOVTABLE
523
#endif
524
525
526
#if defined(NEFORCE_COMPILER_GNUC)
527
# define NEFORCE_ALLOC_OPTIMIZE NEFORCE_ALWAYS_INLINE
528
#elif defined(NEFORCE_COMPILER_MSVC)
529
# define NEFORCE_ALLOC_OPTIMIZE __declspec(allocator)
530
#else
531
# define NEFORCE_ALLOC_OPTIMIZE
532
#endif
533
534
535
#if defined(NEFORCE_COMPILER_GNUC)
536
# define NEFORCE_RESTRICT __restrict__
537
#else
538
# define NEFORCE_RESTRICT __restrict
539
#endif
540
541
549
550
#if defined(NEFORCE_STANDARD_20) || defined(NEXUSFORCE_ENABLE_DOXYGEN)
555
# define NEFORCE_MACRO_RANGE_UNICODE_CHARS(MAC) \
556
MAC(char8_t) \
557
MAC(char16_t) \
558
MAC(char32_t)
559
#else
560
# define NEFORCE_MACRO_RANGE_UNICODE_CHARS(MAC) \
561
MAC(char16_t) \
562
MAC(char32_t)
563
#endif
564
569
#define NEFORCE_MACRO_RANGE_CHARS(MAC) \
570
MAC(char) \
571
MAC(wchar_t) \
572
NEFORCE_MACRO_RANGE_UNICODE_CHARS(MAC)
573
578
#define NEFORCE_MACRO_RANGE_SIGNED_INT(MAC) \
579
MAC(signed char) \
580
MAC(short) \
581
MAC(int) \
582
MAC(long) \
583
MAC(long long)
584
589
#define NEFORCE_MACRO_RANGE_UNSIGNED_INT(MAC) \
590
MAC(unsigned char) \
591
MAC(unsigned short) \
592
MAC(unsigned int) \
593
MAC(unsigned long) \
594
MAC(unsigned long long)
595
600
#define NEFORCE_MACRO_RANGE_INT(MAC) \
601
NEFORCE_MACRO_RANGE_SIGNED_INT(MAC) \
602
NEFORCE_MACRO_RANGE_UNSIGNED_INT(MAC)
603
608
#define NEFORCE_MACRO_RANGE_FLOAT(MAC) \
609
MAC(float) \
610
MAC(double) \
611
MAC(long double)
612
617
#define NEFORCE_MACRO_RANGE_ARITHMETIC(MAC) \
618
NEFORCE_MACRO_RANGE_CHARS(MAC) \
619
NEFORCE_MACRO_RANGE_INT(MAC) \
620
NEFORCE_MACRO_RANGE_FLOAT(MAC)
621
626
#define NEFORCE_MACRO_RANGES_CV(MAC) \
627
MAC(const) \
628
MAC(volatile) \
629
MAC(const volatile)
630
635
#define NEFORCE_MACRO_RANGES_CV_REF(MAC) \
636
MAC(&) \
637
MAC(const&) \
638
MAC(volatile&) \
639
MAC(const volatile&) \
640
MAC(&&) \
641
MAC(const&&) \
642
MAC(volatile&&) \
643
MAC(const volatile&&)
644
649
#define NEFORCE_MACRO_RANGES_CV_REF_NOEXCEPT(MAC) \
650
MAC(noexcept) \
651
MAC(const noexcept) \
652
MAC(volatile noexcept) \
653
MAC(const volatile noexcept) \
654
MAC(& noexcept) \
655
MAC(const& noexcept) \
656
MAC(volatile& noexcept) \
657
MAC(const volatile& noexcept) \
658
MAC(&& noexcept) \
659
MAC(const&& noexcept) \
660
MAC(volatile&& noexcept) \
661
MAC(const volatile&& noexcept)
662
// TypeRangeMacros
664
665
#endif
// NEFORCE_CORE_CONFIG_CPPCONFIG_HPP__
include
NeForce
core
config
c++config.hpp
制作者
1.16.0