summaryrefslogtreecommitdiffstats
path: root/source/core
diff options
context:
space:
mode:
authorEllie Hermaszewska <ellieh@nvidia.com>2023-04-25 23:21:06 +0800
committerGitHub <noreply@github.com>2023-04-25 23:21:06 +0800
commit58858297fd73602cfb7507ce23b0b9e3d9ded2be (patch)
tree8f43deb6fcae4a953feb1b8d5d5f138717884ee1 /source/core
parent7b7c095b37e85ca3a8f55eff1c3d9643d467b8e0 (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.h34
-rw-r--r--source/core/slang-chunked-list.h8
-rw-r--r--source/core/slang-crypto.h2
-rw-r--r--source/core/slang-memory-arena.h2
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;