Revision control
Copy as Markdown
// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
// SPDX-FileCopyrightText: Copyright (c) 2008-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
// SPDX-License-Identifier: Apache-2.0
#ifndef PX_MEMORY_H
#define PX_MEMORY_H
#include "foundation/PxSimpleTypes.h"
#include "foundation/PxMathIntrinsics.h"
#include "foundation/PxSimpleTypes.h"
#if !PX_DOXYGEN
namespace physx
{
#endif
/**
\brief Sets the bytes of the provided buffer to zero.
\param dest [out] Pointer to block of memory to set zero.
\param count [in] Number of bytes to set to zero.
\return Pointer to memory block (same as input)
*/
PX_FORCE_INLINE void* PxMemZero(void* dest, size_t count)
{
// This is to avoid undefined behavior
return (count != 0) ? physx::intrinsics::memZero(dest, count) : NULL;
}
/**
\brief Sets the bytes of the provided buffer to the specified value.
\param dest [out] Pointer to block of memory to set to the specified value.
\param c [in] Value to set the bytes of the block of memory to.
\param count [in] Number of bytes to set to the specified value.
\return Pointer to memory block (same as input)
*/
PX_FORCE_INLINE void* PxMemSet(void* dest, PxI32 c, size_t count)
{
// This is to avoid undefined behavior
return (count != 0) ? physx::intrinsics::memSet(dest, c, count) : NULL;
}
/**
\brief Copies the bytes of one memory block to another. The memory blocks must not overlap.
\note Use #PxMemMove if memory blocks overlap.
\param dest [out] Pointer to block of memory to copy to.
\param src [in] Pointer to block of memory to copy from.
\param count [in] Number of bytes to copy.
\return Pointer to destination memory block
*/
PX_FORCE_INLINE void* PxMemCopy(void* dest, const void* src, size_t count)
{
// This is to avoid undefined behavior
return (count != 0) ? physx::intrinsics::memCopy(dest, src, count) : NULL;
}
/**
\brief Copies the bytes of one memory block to another. The memory blocks can overlap.
\note Use #PxMemCopy if memory blocks do not overlap.
\param dest [out] Pointer to block of memory to copy to.
\param src [in] Pointer to block of memory to copy from.
\param count [in] Number of bytes to copy.
\return Pointer to destination memory block
*/
PX_FORCE_INLINE void* PxMemMove(void* dest, const void* src, size_t count)
{
return physx::intrinsics::memMove(dest, src, count);
}
/**
Mark a specified amount of memory with 0xcd pattern. This is used to check that the meta data
definition for serialized classes is complete in checked builds.
\param ptr [out] Pointer to block of memory to initialize.
\param byteSize [in] Number of bytes to initialize.
*/
PX_INLINE void PxMarkSerializedMemory(void* ptr, size_t byteSize)
{
#if PX_CHECKED
PxMemSet(ptr, 0xcd, byteSize);
#else
PX_UNUSED(ptr);
PX_UNUSED(byteSize);
#endif
}
#if !PX_DOXYGEN
} // namespace physx
#endif
#endif