8#define JPH_VERSION_MAJOR 5
9#define JPH_VERSION_MINOR 6
10#define JPH_VERSION_PATCH 1
13#if !defined(NDEBUG) && !defined(JPH_NO_DEBUG)
18#if defined(JPH_DEBUG) && !defined(JPH_ENABLE_ASSERTS)
19 #define JPH_ENABLE_ASSERTS
23#ifdef JPH_DOUBLE_PRECISION
24 #define JPH_VERSION_FEATURE_BIT_1 1
26 #define JPH_VERSION_FEATURE_BIT_1 0
28#ifdef JPH_CROSS_PLATFORM_DETERMINISTIC
29 #define JPH_VERSION_FEATURE_BIT_2 1
31 #define JPH_VERSION_FEATURE_BIT_2 0
33#ifdef JPH_FLOATING_POINT_EXCEPTIONS_ENABLED
34 #define JPH_VERSION_FEATURE_BIT_3 1
36 #define JPH_VERSION_FEATURE_BIT_3 0
38#ifdef JPH_PROFILE_ENABLED
39 #define JPH_VERSION_FEATURE_BIT_4 1
41 #define JPH_VERSION_FEATURE_BIT_4 0
43#ifdef JPH_EXTERNAL_PROFILE
44 #define JPH_VERSION_FEATURE_BIT_5 1
46 #define JPH_VERSION_FEATURE_BIT_5 0
48#ifdef JPH_DEBUG_RENDERER
49 #define JPH_VERSION_FEATURE_BIT_6 1
51 #define JPH_VERSION_FEATURE_BIT_6 0
53#ifdef JPH_DISABLE_TEMP_ALLOCATOR
54 #define JPH_VERSION_FEATURE_BIT_7 1
56 #define JPH_VERSION_FEATURE_BIT_7 0
58#ifdef JPH_DISABLE_CUSTOM_ALLOCATOR
59 #define JPH_VERSION_FEATURE_BIT_8 1
61 #define JPH_VERSION_FEATURE_BIT_8 0
63#if defined(JPH_OBJECT_LAYER_BITS) && JPH_OBJECT_LAYER_BITS == 32
64 #define JPH_VERSION_FEATURE_BIT_9 1
66 #define JPH_VERSION_FEATURE_BIT_9 0
68#ifdef JPH_ENABLE_ASSERTS
69 #define JPH_VERSION_FEATURE_BIT_10 1
71 #define JPH_VERSION_FEATURE_BIT_10 0
73#ifdef JPH_OBJECT_STREAM
74 #define JPH_VERSION_FEATURE_BIT_11 1
76 #define JPH_VERSION_FEATURE_BIT_11 0
78#define JPH_VERSION_FEATURES (uint64(JPH_VERSION_FEATURE_BIT_1) | (JPH_VERSION_FEATURE_BIT_2 << 1) | (JPH_VERSION_FEATURE_BIT_3 << 2) | (JPH_VERSION_FEATURE_BIT_4 << 3) | (JPH_VERSION_FEATURE_BIT_5 << 4) | (JPH_VERSION_FEATURE_BIT_6 << 5) | (JPH_VERSION_FEATURE_BIT_7 << 6) | (JPH_VERSION_FEATURE_BIT_8 << 7) | (JPH_VERSION_FEATURE_BIT_9 << 8) | (JPH_VERSION_FEATURE_BIT_10 << 9) | (JPH_VERSION_FEATURE_BIT_11 << 10))
81#define JPH_VERSION_ID ((JPH_VERSION_FEATURES << 24) | (JPH_VERSION_MAJOR << 16) | (JPH_VERSION_MINOR << 8) | JPH_VERSION_PATCH)
84#if defined(JPH_PLATFORM_BLUE)
86#elif defined(_WIN32) || defined(_WIN64)
87 #include <winapifamily.h>
88 #if WINAPI_FAMILY == WINAPI_FAMILY_APP
89 #define JPH_PLATFORM_WINDOWS_UWP
91 #define JPH_PLATFORM_WINDOWS
92#elif defined(__ANDROID__)
93 #define JPH_PLATFORM_ANDROID
94#elif defined(__linux__)
95 #define JPH_PLATFORM_LINUX
96#elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
97 #define JPH_PLATFORM_BSD
98#elif defined(__APPLE__)
99 #include <TargetConditionals.h>
100 #if defined(TARGET_OS_IPHONE) && !TARGET_OS_IPHONE
101 #define JPH_PLATFORM_MACOS
103 #define JPH_PLATFORM_IOS
105#elif defined(__EMSCRIPTEN__)
106 #define JPH_PLATFORM_WASM
110#ifdef JPH_PLATFORM_ANDROID
111 #define JPH_IF_NOT_ANDROID(x)
113 #define JPH_IF_NOT_ANDROID(x) x
117#if defined(__clang__)
118 #define JPH_COMPILER_CLANG
119#elif defined(__GNUC__)
120 #define JPH_COMPILER_GCC
121#elif defined(_MSC_VER)
122 #define JPH_COMPILER_MSVC
125#if defined(__MINGW64__) || defined (__MINGW32__)
126 #define JPH_COMPILER_MINGW
130#if defined(__aarch64__) || defined(_M_ARM64) || defined(__arm__) || defined(_M_ARM) || defined(_M_ARM64EC)
133 #if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC)
134 #define JPH_CPU_ARCH_BITS 64
136 #define JPH_VECTOR_ALIGNMENT 16
137 #define JPH_DVECTOR_ALIGNMENT 32
139 #define JPH_CPU_ARCH_BITS 32
140 #define JPH_VECTOR_ALIGNMENT 8
141 #define JPH_DVECTOR_ALIGNMENT 8
143 #ifndef JPH_CROSS_PLATFORM_DETERMINISTIC
144 #if defined(__ARM_FEATURE_FMA) && !defined(JPH_USE_FMADD)
145 #define JPH_USE_FMADD
148#elif defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || defined(_M_IX86)
151 #if defined(__x86_64__) || defined(_M_X64)
152 #define JPH_CPU_ARCH_BITS 64
154 #define JPH_CPU_ARCH_BITS 32
157 #define JPH_VECTOR_ALIGNMENT 16
158 #define JPH_DVECTOR_ALIGNMENT 32
161 #if defined(__AVX512F__) && defined(__AVX512VL__) && defined(__AVX512DQ__) && !defined(JPH_USE_AVX512)
162 #define JPH_USE_AVX512
164 #if (defined(__AVX2__) || defined(JPH_USE_AVX512)) && !defined(JPH_USE_AVX2)
167 #if (defined(__AVX__) || defined(JPH_USE_AVX2)) && !defined(JPH_USE_AVX)
170 #if (defined(__SSE4_2__) || defined(JPH_USE_AVX)) && !defined(JPH_USE_SSE4_2)
171 #define JPH_USE_SSE4_2
173 #if (defined(__SSE4_1__) || defined(JPH_USE_SSE4_2)) && !defined(JPH_USE_SSE4_1)
174 #define JPH_USE_SSE4_1
176 #if (defined(__F16C__) || defined(JPH_USE_AVX2)) && !defined(JPH_USE_F16C)
179 #if (defined(__LZCNT__) || defined(JPH_USE_AVX2)) && !defined(JPH_USE_LZCNT)
180 #define JPH_USE_LZCNT
182 #if (defined(__BMI__) || defined(JPH_USE_AVX2)) && !defined(JPH_USE_TZCNT)
183 #define JPH_USE_TZCNT
185 #ifndef JPH_CROSS_PLATFORM_DETERMINISTIC
186 #if defined(JPH_COMPILER_CLANG) || defined(JPH_COMPILER_GCC)
187 #if defined(__FMA__) && !defined(JPH_USE_FMADD)
188 #define JPH_USE_FMADD
190 #elif defined(JPH_COMPILER_MSVC)
191 #if defined(__AVX2__) && !defined(JPH_USE_FMADD)
192 #define JPH_USE_FMADD
195 #error Undefined compiler
198#elif defined(__riscv)
200 #define JPH_CPU_RISCV
201 #if __riscv_xlen == 64
202 #define JPH_CPU_ARCH_BITS 64
203 #define JPH_VECTOR_ALIGNMENT 16
204 #define JPH_DVECTOR_ALIGNMENT 32
206 #define JPH_CPU_ARCH_BITS 32
207 #define JPH_VECTOR_ALIGNMENT 16
208 #define JPH_DVECTOR_ALIGNMENT 8
210 #if defined(__riscv_vector)
213#elif defined(JPH_PLATFORM_WASM)
216 #if defined(__wasm64__)
217 #define JPH_CPU_ARCH_BITS 64
219 #define JPH_CPU_ARCH_BITS 32
221 #define JPH_VECTOR_ALIGNMENT 16
222 #define JPH_DVECTOR_ALIGNMENT 32
223 #ifdef __wasm_simd128__
225 #define JPH_USE_SSE4_1
226 #define JPH_USE_SSE4_2
228#elif defined(__powerpc__) || defined(__powerpc64__)
231 #if defined(__powerpc64__)
232 #define JPH_CPU_ARCH_BITS 64
234 #define JPH_CPU_ARCH_BITS 32
237 #define JPH_CPU_BIG_ENDIAN
239 #define JPH_VECTOR_ALIGNMENT 16
240 #define JPH_DVECTOR_ALIGNMENT 8
241#elif defined(__loongarch__)
243 #define JPH_CPU_LOONGARCH
244 #if defined(__loongarch64)
245 #define JPH_CPU_ARCH_BITS 64
247 #define JPH_CPU_ARCH_BITS 32
249 #define JPH_VECTOR_ALIGNMENT 16
250 #define JPH_DVECTOR_ALIGNMENT 8
251#elif defined(__e2k__)
254 #define JPH_CPU_ARCH_BITS 64
255 #define JPH_VECTOR_ALIGNMENT 16
256 #define JPH_DVECTOR_ALIGNMENT 32
259 #if defined(__SSE__) && !defined(JPH_USE_SSE)
263 #error Unsupported CPU architecture
267#ifdef JPH_SHARED_LIBRARY
268 #ifdef JPH_BUILD_SHARED_LIBRARY
270 #if defined(JPH_PLATFORM_WINDOWS) && !defined(JPH_COMPILER_MINGW)
271 #define JPH_EXPORT __declspec(dllexport)
273 #define JPH_EXPORT __attribute__ ((visibility ("default")))
274 #if defined(JPH_COMPILER_GCC)
276 #define JPH_EXPORT_GCC_BUG_WORKAROUND [[gnu::visibility("default")]]
281 #if defined(JPH_PLATFORM_WINDOWS) && !defined(JPH_COMPILER_MINGW)
282 #define JPH_EXPORT __declspec(dllimport)
284 #define JPH_EXPORT __attribute__ ((visibility ("default")))
285 #if defined(JPH_COMPILER_GCC)
287 #define JPH_EXPORT_GCC_BUG_WORKAROUND [[gnu::visibility("default")]]
292 #define JPH_IF_SHARED_LIBRARY(x) x
293 #define JPH_IF_NOT_SHARED_LIBRARY(x)
298 #define JPH_IF_SHARED_LIBRARY(x)
299 #define JPH_IF_NOT_SHARED_LIBRARY(x) x
302#ifndef JPH_EXPORT_GCC_BUG_WORKAROUND
303 #define JPH_EXPORT_GCC_BUG_WORKAROUND JPH_EXPORT
310#ifdef JPH_COMPILER_CLANG
311 #define JPH_PRAGMA(x) _Pragma(#x)
312 #define JPH_SUPPRESS_WARNING_PUSH JPH_PRAGMA(clang diagnostic push)
313 #define JPH_SUPPRESS_WARNING_POP JPH_PRAGMA(clang diagnostic pop)
314 #define JPH_CLANG_SUPPRESS_WARNING(w) JPH_PRAGMA(clang diagnostic ignored w)
315 #if __has_warning("-Wdeprecated-copy")
316 #define JPH_CLANG_SUPPRESS_DEPRECATED_COPY_WARNING JPH_CLANG_SUPPRESS_WARNING("-Wdeprecated-copy")
318 #if __has_warning("-Wdeprecated-copy-with-dtor")
319 #define JPH_CLANG_SUPPRESS_DEPRECATED_COPY_WITH_DTOR_WARNING JPH_CLANG_SUPPRESS_WARNING("-Wdeprecated-copy-with-dtor")
321 #if __has_warning("-Wunsafe-buffer-usage")
322 #define JPH_CLANG_SUPPRESS_UNSAFE_BUFFER_USAGE_WARNING JPH_CLANG_SUPPRESS_WARNING("-Wunsafe-buffer-usage")
324 #if __has_warning("-Wimplicit-int-float-conversion")
325 #define JPH_CLANG_SUPPRESS_IMPLICIT_INT_FLOAT_CONVERSION_WARNING JPH_CLANG_SUPPRESS_WARNING("-Wimplicit-int-float-conversion")
327 #if __has_warning("-Wunique-object-duplication")
328 #define JPH_CLANG_SUPPRESS_UNIQUE_OBJECT_DUPLICATION_WARNING JPH_CLANG_SUPPRESS_WARNING("-Wunique-object-duplication")
330 #if __has_warning("-Wnrvo")
331 #define JPH_CLANG_SUPPRESS_NRVO_WARNING JPH_CLANG_SUPPRESS_WARNING("-Wnrvo")
334 #define JPH_CLANG_SUPPRESS_WARNING(w)
336#ifndef JPH_CLANG_SUPPRESS_DEPRECATED_COPY_WARNING
337 #define JPH_CLANG_SUPPRESS_DEPRECATED_COPY_WARNING
339#ifndef JPH_CLANG_SUPPRESS_DEPRECATED_COPY_WITH_DTOR_WARNING
340 #define JPH_CLANG_SUPPRESS_DEPRECATED_COPY_WITH_DTOR_WARNING
342#ifndef JPH_CLANG_SUPPRESS_UNSAFE_BUFFER_USAGE_WARNING
343 #define JPH_CLANG_SUPPRESS_UNSAFE_BUFFER_USAGE_WARNING
345#ifndef JPH_CLANG_SUPPRESS_IMPLICIT_INT_FLOAT_CONVERSION_WARNING
346 #define JPH_CLANG_SUPPRESS_IMPLICIT_INT_FLOAT_CONVERSION_WARNING
348#ifndef JPH_CLANG_SUPPRESS_UNIQUE_OBJECT_DUPLICATION_WARNING
349 #define JPH_CLANG_SUPPRESS_UNIQUE_OBJECT_DUPLICATION_WARNING
351#ifndef JPH_CLANG_SUPPRESS_NRVO_WARNING
352 #define JPH_CLANG_SUPPRESS_NRVO_WARNING
355#ifdef JPH_COMPILER_GCC
356 #define JPH_PRAGMA(x) _Pragma(#x)
357 #define JPH_SUPPRESS_WARNING_PUSH JPH_PRAGMA(GCC diagnostic push)
358 #define JPH_SUPPRESS_WARNING_POP JPH_PRAGMA(GCC diagnostic pop)
359 #define JPH_GCC_SUPPRESS_WARNING(w) JPH_PRAGMA(GCC diagnostic ignored w)
361 #define JPH_GCC_SUPPRESS_WARNING(w)
364#ifdef JPH_COMPILER_MSVC
365 #define JPH_PRAGMA(x) __pragma(x)
366 #define JPH_SUPPRESS_WARNING_PUSH JPH_PRAGMA(warning (push))
367 #define JPH_SUPPRESS_WARNING_POP JPH_PRAGMA(warning (pop))
368 #define JPH_MSVC_SUPPRESS_WARNING(w) JPH_PRAGMA(warning (disable : w))
369 #if _MSC_VER >= 1920 && _MSC_VER < 1930
370 #define JPH_MSVC2019_SUPPRESS_WARNING(w) JPH_MSVC_SUPPRESS_WARNING(w)
372 #define JPH_MSVC2019_SUPPRESS_WARNING(w)
375 #define JPH_MSVC2026_PLUS_SUPPRESS_WARNING(w) JPH_MSVC_SUPPRESS_WARNING(w)
377 #define JPH_MSVC2026_PLUS_SUPPRESS_WARNING(w)
380 #define JPH_MSVC_SUPPRESS_WARNING(w)
381 #define JPH_MSVC2019_SUPPRESS_WARNING(w)
382 #define JPH_MSVC2026_PLUS_SUPPRESS_WARNING(w)
386#define JPH_SUPPRESS_WARNINGS \
387 JPH_CLANG_SUPPRESS_WARNING("-Wc++98-compat") \
388 JPH_CLANG_SUPPRESS_WARNING("-Wc++98-compat-pedantic") \
389 JPH_CLANG_SUPPRESS_WARNING("-Wfloat-equal") \
390 JPH_CLANG_SUPPRESS_WARNING("-Wsign-conversion") \
391 JPH_CLANG_SUPPRESS_WARNING("-Wold-style-cast") \
392 JPH_CLANG_SUPPRESS_WARNING("-Wgnu-anonymous-struct") \
393 JPH_CLANG_SUPPRESS_WARNING("-Wnested-anon-types") \
394 JPH_CLANG_SUPPRESS_WARNING("-Wglobal-constructors") \
395 JPH_CLANG_SUPPRESS_WARNING("-Wexit-time-destructors") \
396 JPH_CLANG_SUPPRESS_WARNING("-Wnonportable-system-include-path") \
397 JPH_CLANG_SUPPRESS_WARNING("-Wlanguage-extension-token") \
398 JPH_CLANG_SUPPRESS_WARNING("-Wunused-parameter") \
399 JPH_CLANG_SUPPRESS_WARNING("-Wformat-nonliteral") \
400 JPH_CLANG_SUPPRESS_WARNING("-Wcovered-switch-default") \
401 JPH_CLANG_SUPPRESS_WARNING("-Wcast-align") \
402 JPH_CLANG_SUPPRESS_WARNING("-Winvalid-offsetof") \
403 JPH_CLANG_SUPPRESS_WARNING("-Wgnu-zero-variadic-macro-arguments") \
404 JPH_CLANG_SUPPRESS_WARNING("-Wdocumentation-unknown-command") \
405 JPH_CLANG_SUPPRESS_WARNING("-Wctad-maybe-unsupported") \
406 JPH_CLANG_SUPPRESS_WARNING("-Wswitch-default") \
407 JPH_CLANG_SUPPRESS_DEPRECATED_COPY_WARNING \
408 JPH_CLANG_SUPPRESS_DEPRECATED_COPY_WITH_DTOR_WARNING \
409 JPH_CLANG_SUPPRESS_UNSAFE_BUFFER_USAGE_WARNING \
410 JPH_CLANG_SUPPRESS_IMPLICIT_INT_FLOAT_CONVERSION_WARNING \
411 JPH_CLANG_SUPPRESS_WARNING("-Wpadded") \
412 JPH_IF_NOT_SHARED_LIBRARY(JPH_CLANG_SUPPRESS_UNIQUE_OBJECT_DUPLICATION_WARNING) \
413 JPH_CLANG_SUPPRESS_NRVO_WARNING \
415 JPH_GCC_SUPPRESS_WARNING("-Wcomment") \
416 JPH_GCC_SUPPRESS_WARNING("-Winvalid-offsetof") \
417 JPH_GCC_SUPPRESS_WARNING("-Wclass-memaccess") \
418 JPH_GCC_SUPPRESS_WARNING("-Wpedantic") \
419 JPH_GCC_SUPPRESS_WARNING("-Wunused-parameter") \
420 JPH_GCC_SUPPRESS_WARNING("-Wmaybe-uninitialized") \
422 JPH_MSVC_SUPPRESS_WARNING(4619) \
423 JPH_MSVC_SUPPRESS_WARNING(4514) \
424 JPH_MSVC_SUPPRESS_WARNING(4710) \
425 JPH_MSVC_SUPPRESS_WARNING(4711) \
426 JPH_MSVC_SUPPRESS_WARNING(4714) \
427 JPH_MSVC_SUPPRESS_WARNING(4820) \
428 JPH_MSVC_SUPPRESS_WARNING(4100) \
429 JPH_MSVC_SUPPRESS_WARNING(4626) \
430 JPH_MSVC_SUPPRESS_WARNING(5027) \
431 JPH_MSVC_SUPPRESS_WARNING(4365) \
432 JPH_MSVC_SUPPRESS_WARNING(4324) \
433 JPH_MSVC_SUPPRESS_WARNING(4625) \
434 JPH_MSVC_SUPPRESS_WARNING(5026) \
435 JPH_MSVC_SUPPRESS_WARNING(4623) \
436 JPH_MSVC_SUPPRESS_WARNING(4201) \
437 JPH_MSVC_SUPPRESS_WARNING(4371) \
438 JPH_MSVC_SUPPRESS_WARNING(5045) \
439 JPH_MSVC_SUPPRESS_WARNING(4583) \
440 JPH_MSVC_SUPPRESS_WARNING(4582) \
441 JPH_MSVC_SUPPRESS_WARNING(5219) \
442 JPH_MSVC_SUPPRESS_WARNING(4826) \
443 JPH_MSVC_SUPPRESS_WARNING(5264) \
444 JPH_MSVC_SUPPRESS_WARNING(4251) \
445 JPH_MSVC_SUPPRESS_WARNING(4738) \
446 JPH_MSVC2019_SUPPRESS_WARNING(5246) \
447 JPH_MSVC2026_PLUS_SUPPRESS_WARNING(5291)
450#if defined(JPH_PLATFORM_WINDOWS)
451 #define JPH_BREAKPOINT __debugbreak()
452#elif defined(JPH_PLATFORM_BLUE)
457 #include <Jolt/Core/PlatformBlue.h>
458#elif defined(JPH_PLATFORM_LINUX) || defined(JPH_PLATFORM_ANDROID) || defined(JPH_PLATFORM_MACOS) || defined(JPH_PLATFORM_IOS) || defined(JPH_PLATFORM_BSD)
459 #if defined(JPH_CPU_X86)
460 #define JPH_BREAKPOINT __asm volatile ("int $0x3")
461 #elif defined(JPH_CPU_ARM) || defined(JPH_CPU_RISCV) || defined(JPH_CPU_E2K) || defined(JPH_CPU_PPC) || defined(JPH_CPU_LOONGARCH)
462 #define JPH_BREAKPOINT __builtin_trap()
464 #error Unknown CPU architecture
466#elif defined(JPH_PLATFORM_WASM)
467 #define JPH_BREAKPOINT do { } while (false)
469 #error Unknown platform
473#define JPH_NAMESPACE_BEGIN \
474 JPH_SUPPRESS_WARNING_PUSH \
475 JPH_SUPPRESS_WARNINGS \
479#define JPH_NAMESPACE_END \
481 JPH_SUPPRESS_WARNING_POP
484#define JPH_SUPPRESS_WARNINGS_STD_BEGIN \
485 JPH_SUPPRESS_WARNING_PUSH \
486 JPH_CLANG_SUPPRESS_WARNING("-Wpadded") \
487 JPH_MSVC_SUPPRESS_WARNING(4365) \
488 JPH_MSVC_SUPPRESS_WARNING(4619) \
489 JPH_MSVC_SUPPRESS_WARNING(4710) \
490 JPH_MSVC_SUPPRESS_WARNING(4711) \
491 JPH_MSVC_SUPPRESS_WARNING(4820) \
492 JPH_MSVC_SUPPRESS_WARNING(4514) \
493 JPH_MSVC_SUPPRESS_WARNING(5262) \
494 JPH_MSVC_SUPPRESS_WARNING(5264) \
495 JPH_MSVC_SUPPRESS_WARNING(4738) \
496 JPH_MSVC_SUPPRESS_WARNING(5045)
498#define JPH_SUPPRESS_WARNINGS_STD_END \
499 JPH_SUPPRESS_WARNING_POP
502#if defined(JPH_COMPILER_MSVC) && (!defined(__cpp_exceptions) || !__cpp_exceptions) && !defined(_HAS_EXCEPTIONS)
503 #define _HAS_EXCEPTIONS 0
518#include <type_traits>
519#if defined(JPH_COMPILER_MSVC) || (defined(JPH_COMPILER_CLANG) && defined(_MSC_VER))
522#if defined(JPH_USE_SSE)
523 #include <immintrin.h>
524#elif defined(JPH_USE_NEON)
525 #ifdef JPH_COMPILER_MSVC
527 #include <arm64_neon.h>
529 #include <arm_neon.h>
531#elif defined(JPH_USE_RVV)
532 #include <riscv_vector.h>
547using std::string_view;
549using std::numeric_limits;
565static_assert(
sizeof(
uint) >= 4,
"Invalid size of uint");
566static_assert(
sizeof(
uint8) == 1,
"Invalid size of uint8");
567static_assert(
sizeof(
uint16) == 2,
"Invalid size of uint16");
568static_assert(
sizeof(
uint32) == 4,
"Invalid size of uint32");
569static_assert(
sizeof(
uint64) == 8,
"Invalid size of uint64");
572#if defined(JPH_NO_FORCE_INLINE)
573 #define JPH_INLINE inline
574#elif defined(JPH_COMPILER_CLANG)
575 #define JPH_INLINE __inline__ __attribute__((always_inline))
576#elif defined(JPH_COMPILER_GCC)
579 #if __GNUC__ >= 14 && defined(JPH_DEBUG)
580 #define JPH_INLINE inline
582 #define JPH_INLINE __inline__ __attribute__((always_inline))
584#elif defined(JPH_COMPILER_MSVC)
585 #define JPH_INLINE __forceinline
592#ifndef JPH_DEFAULT_ALLOCATE_ALIGNMENT
593 #if defined(JPH_COMPILER_MINGW) && JPH_CPU_ARCH_BITS == 32
597 #define JPH_DEFAULT_ALLOCATE_ALIGNMENT 8
599 #define JPH_DEFAULT_ALLOCATE_ALIGNMENT __STDCPP_DEFAULT_NEW_ALIGNMENT__
604#ifndef JPH_CACHE_LINE_SIZE
605 #define JPH_CACHE_LINE_SIZE 64
609#if defined(JPH_COMPILER_CLANG) || defined(JPH_COMPILER_GCC)
610 #define JPH_FUNCTION_NAME __PRETTY_FUNCTION__
611#elif defined(JPH_COMPILER_MSVC)
612 #define JPH_FUNCTION_NAME __FUNCTION__
618#define JPH_STACK_ALLOC(n) alloca(n)
622 #define JPH_IF_DEBUG(...) __VA_ARGS__
623 #define JPH_IF_NOT_DEBUG(...)
625 #define JPH_IF_DEBUG(...)
626 #define JPH_IF_NOT_DEBUG(...) __VA_ARGS__
630#ifdef JPH_FLOATING_POINT_EXCEPTIONS_ENABLED
631 #define JPH_IF_FLOATING_POINT_EXCEPTIONS_ENABLED(...) __VA_ARGS__
633 #define JPH_IF_FLOATING_POINT_EXCEPTIONS_ENABLED(...)
637#ifdef JPH_DOUBLE_PRECISION
638 #define JPH_IF_SINGLE_PRECISION(...)
639 #define JPH_IF_SINGLE_PRECISION_ELSE(s, d) d
640 #define JPH_IF_DOUBLE_PRECISION(...) __VA_ARGS__
642 #define JPH_IF_SINGLE_PRECISION(...) __VA_ARGS__
643 #define JPH_IF_SINGLE_PRECISION_ELSE(s, d) s
644 #define JPH_IF_DOUBLE_PRECISION(...)
648#ifdef JPH_DEBUG_RENDERER
649 #define JPH_IF_DEBUG_RENDERER(...) __VA_ARGS__
650 #define JPH_IF_NOT_DEBUG_RENDERER(...)
652 #define JPH_IF_DEBUG_RENDERER(...)
653 #define JPH_IF_NOT_DEBUG_RENDERER(...) __VA_ARGS__
657#define JPH_UNUSED(x) (void)x
660#if defined(JPH_COMPILER_CLANG)
661 #define JPH_PRECISE_MATH_ON \
662 _Pragma("clang diagnostic push") \
663 _Pragma("clang diagnostic ignored \"-Wignored-pragmas\"") \
664 _Pragma("float_control(precise, on, push)") \
665 _Pragma("clang diagnostic pop")
666 #define JPH_PRECISE_MATH_OFF \
667 _Pragma("clang diagnostic push") \
668 _Pragma("clang diagnostic ignored \"-Wignored-pragmas\"") \
669 _Pragma("float_control(pop)") \
670 _Pragma("clang diagnostic pop")
671#elif defined(JPH_COMPILER_MSVC)
672 #define JPH_PRECISE_MATH_ON \
673 __pragma(float_control(precise, on, push))
674 #define JPH_PRECISE_MATH_OFF \
675 __pragma(float_control(pop))
677 #define JPH_PRECISE_MATH_ON
678 #define JPH_PRECISE_MATH_OFF
683 #if __has_feature(thread_sanitizer)
684 #define JPH_TSAN_ENABLED
687 #ifdef __SANITIZE_THREAD__
688 #define JPH_TSAN_ENABLED
693#ifdef JPH_TSAN_ENABLED
694 #define JPH_TSAN_NO_SANITIZE __attribute__((no_sanitize("thread")))
696 #define JPH_TSAN_NO_SANITIZE
701 #if __has_feature(address_sanitizer)
702 #define JPH_ASAN_ENABLED
705 #ifdef __SANITIZE_ADDRESS__
706 #define JPH_ASAN_ENABLED
711#if defined(JPH_USE_DX12) && !defined(JPH_PLATFORM_WINDOWS)
716#if defined(JPH_USE_MTL) && !defined(JPH_PLATFORM_MACOS) && !defined(JPH_PLATFORM_IOS)
std::uint8_t uint8
Definition Core.h:557
std::int32_t int32
Definition Core.h:560
#define JPH_SUPPRESS_WARNINGS_STD_BEGIN
Definition Core.h:484
std::int64_t int64
Definition Core.h:562
#define JPH_SUPPRESS_WARNINGS_STD_END
Definition Core.h:498
std::uint64_t uint64
Definition Core.h:561
unsigned int uint
Definition Core.h:556
#define JPH_NAMESPACE_END
Definition Core.h:479
std::uint32_t uint32
Definition Core.h:559
#define JPH_NAMESPACE_BEGIN
Definition Core.h:473
std::uint16_t uint16
Definition Core.h:558