diff options
| author | Ellie Hermaszewska <ellieh@nvidia.com> | 2023-04-25 23:21:06 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-04-25 23:21:06 +0800 |
| commit | 58858297fd73602cfb7507ce23b0b9e3d9ded2be (patch) | |
| tree | 8f43deb6fcae4a953feb1b8d5d5f138717884ee1 /source/core | |
| parent | 7b7c095b37e85ca3a8f55eff1c3d9643d467b8e0 (diff) | |
Bump glm and stb + small neatenings (#2831)
* bump glm to fix c++20 warnings
* bump stb_image to fix c++20 warnings
* Use static_assert for SLANG_COMPILE_TIME_ASSERT
* Remove uses of deprecated is_pod
* Remove bit operations between different enums
Diffstat (limited to 'source/core')
| -rw-r--r-- | source/core/slang-allocator.h | 34 | ||||
| -rw-r--r-- | source/core/slang-chunked-list.h | 8 | ||||
| -rw-r--r-- | source/core/slang-crypto.h | 2 | ||||
| -rw-r--r-- | source/core/slang-memory-arena.h | 2 |
4 files changed, 13 insertions, 33 deletions
diff --git a/source/core/slang-allocator.h b/source/core/slang-allocator.h index bc1b880f8..8942f993b 100644 --- a/source/core/slang-allocator.h +++ b/source/core/slang-allocator.h @@ -62,34 +62,6 @@ namespace Slang } }; - // Helper utilties for calling allocators. - template<typename T, int isPOD> - class Initializer; - - template<typename T> - class Initializer<T, 0> - { - public: - static void initialize(T* buffer, Index size) - { - for (Index i = 0; i < size; i++) - new (buffer + i) T(); - } - }; - template<typename T> - class Initializer<T, 1> - { - public: - static void initialize(T* buffer, Index size) - { - SLANG_UNUSED(buffer); - SLANG_UNUSED(size); - // It's pod so no initialization required - //for (int i = 0; i < size; i++) - // new (buffer + i) T; - } - }; - template<typename T, typename TAllocator> class AllocateMethod { @@ -98,7 +70,11 @@ namespace Slang { TAllocator allocator; T* rs = (T*)allocator.allocate(count * sizeof(T)); - Initializer<T, std::is_pod<T>::value>::initialize(rs, count); + if (!std::is_trivially_constructible<T>::value) + { + for (Index i = 0; i < count; i++) + new (rs + i) T(); + } return rs; } static inline void deallocateArray(T* ptr, Index count) diff --git a/source/core/slang-chunked-list.h b/source/core/slang-chunked-list.h index 36f97cedd..0ac26c945 100644 --- a/source/core/slang-chunked-list.h +++ b/source/core/slang-chunked-list.h @@ -40,12 +40,16 @@ private: resultChunk->size = 0; resultChunk->next = nullptr; auto firstItem = resultChunk->begin(); - Initializer<T, std::is_pod<T>::value>::initialize(firstItem, size); + if (!std::is_trivially_constructible_v<T>) + { + for (uint32_t i = 0; i < size; i++) + new (firstItem + i) T(); + } return resultChunk; } void freeChunk(Chunk* chunk) { - if (!std::is_trivially_destructible<T>::value) + if (!std::is_trivially_destructible_v<T>) { for (uint32_t i = 0; i < chunk->capacity; i++) chunk->begin()[i].~T(); diff --git a/source/core/slang-crypto.h b/source/core/slang-crypto.h index 0df02201c..94078861b 100644 --- a/source/core/slang-crypto.h +++ b/source/core/slang-crypto.h @@ -167,7 +167,7 @@ namespace Slang append(digest.data, sizeof(digest.data)); } - template<typename T, typename std::enable_if<std::is_pod<T>::value, int>::type = 0> + template<typename T, std::enable_if_t<std::has_unique_object_representations_v<T>, int> = 0> void append(const List<T>& list) { append(list.getBuffer(), list.getCount() * sizeof(T)); diff --git a/source/core/slang-memory-arena.h b/source/core/slang-memory-arena.h index a947de5a2..75f3faac3 100644 --- a/source/core/slang-memory-arena.h +++ b/source/core/slang-memory-arena.h @@ -377,7 +377,7 @@ SLANG_FORCE_INLINE T* MemoryArena::allocateArray(size_t numElems) template <typename T> SLANG_FORCE_INLINE T* MemoryArena::allocateAndCopyArray(const T* arr, size_t numElems) { - SLANG_COMPILE_TIME_ASSERT(std::is_pod<T>::value); + static_assert(std::is_trivially_copyable_v<T>); if (numElems > 0) { const size_t totalSize = sizeof(T) * numElems; |
