diff options
| author | sschirm <[email protected]> | 2016-12-23 14:20:36 +0100 |
|---|---|---|
| committer | sschirm <[email protected]> | 2016-12-23 14:56:17 +0100 |
| commit | ef6937e69e8ee3f409cf9d460d5ad300a65d5924 (patch) | |
| tree | 710426e8daa605551ce3f34b581897011101c30f /PxShared/src/foundation/include/PsArray.h | |
| parent | Initial commit: (diff) | |
| download | physx-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.h | 16 |
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))); |