aboutsummaryrefslogtreecommitdiff
path: root/PxShared/src/foundation/include/PsArray.h
diff options
context:
space:
mode:
authorsschirm <[email protected]>2016-12-23 14:20:36 +0100
committersschirm <[email protected]>2016-12-23 14:56:17 +0100
commitef6937e69e8ee3f409cf9d460d5ad300a65d5924 (patch)
tree710426e8daa605551ce3f34b581897011101c30f /PxShared/src/foundation/include/PsArray.h
parentInitial commit: (diff)
downloadphysx-3.4-ef6937e69e8ee3f409cf9d460d5ad300a65d5924.tar.xz
physx-3.4-ef6937e69e8ee3f409cf9d460d5ad300a65d5924.zip
PhysX 3.4 / APEX 1.4 release candidate @21506124
Diffstat (limited to 'PxShared/src/foundation/include/PsArray.h')
-rw-r--r--PxShared/src/foundation/include/PsArray.h16
1 files changed, 10 insertions, 6 deletions
diff --git a/PxShared/src/foundation/include/PsArray.h b/PxShared/src/foundation/include/PsArray.h
index 19ed9b05..b5d7550f 100644
--- a/PxShared/src/foundation/include/PsArray.h
+++ b/PxShared/src/foundation/include/PsArray.h
@@ -433,16 +433,15 @@ class Array : protected Alloc
}
else
{
- T* it = mData + i++;
+ T* it = mData + i;
it->~T();
- do
+ while (++i < mSize)
{
new (it) T(mData[i]);
++it;
it->~T();
- } while(++i < mSize);
+ }
}
-
--mSize;
}
@@ -627,13 +626,18 @@ definition for serialized classes is complete in checked builds.
static PX_INLINE bool isZeroInit(const T& object)
{
+ if (!isArrayOfPOD())
+ return false;
char ZeroBuffOnStack[sizeof(object)] = {};
- return memcmp(&object, ZeroBuffOnStack, sizeof(object)) == 0;
+ // bgaldrikian - casting to void* to avoid compiler error:
+ // error : first operand of this 'memcmp' call is a pointer to dynamic class [...]; vtable pointer will be compared [-Werror,-Wdynamic-class-memaccess]
+ // even though POD check prevents memcmp from being used on a dynamic class
+ return memcmp(reinterpret_cast<const void*>(&object), ZeroBuffOnStack, sizeof(object)) == 0;
}
static PX_INLINE void create(T* first, T* last, const T& a)
{
- if(isArrayOfPOD() && isZeroInit(a))
+ if(isZeroInit(a))
{
if(last > first)
physx::intrinsics::memZero(first, uint32_t((last - first) * sizeof(T)));