// 1. copy memory
/// allocates memory and copy from source array
/// \param dst Destination
/// \param src Source
/// \param numT number of array elements
template <class T>
void DeepCopy(T** dst, const T* src, cl_uint numT)
{
if (src == NULL)
{
*dst = NULL;
return;
}
*dst = (T*)malloc(numT * sizeof(T));
memcpy(*dst, src, sizeof(T) * numT);
}
/// allocates memory and copy from source
/// \param dst Destination
/// \param src Source
/// \param size size of the buffer
template <class T>
void AllocCopy(T** dst, const T* src, size_t size)
{
if (src == NULL)
{
*dst = NULL;
return;
}
*dst = (T*)malloc(size);
memcpy(*dst, src, size);
}
// 2. Release
/// \brief release the memory that has been allocated by new
template<typename T>
inline void TuReleaseMemory(T * &ptr)
{
if(ptr == NULL)
{
return;
}
delete ptr;
ptr = NULL;
}
/// \brief release the memory that has been allocated by new[]
template<typename T>
inline void TuReleaseArrayMemory(T * &ptr)
{
if(ptr == NULL)
return;
delete[] ptr;
ptr = NULL;
}