mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-07-23 05:14:26 +08:00
61 lines
1.4 KiB
Plaintext
61 lines
1.4 KiB
Plaintext
#ifndef EIGEN_QTMALLOC_MODULE_H
|
|
#define EIGEN_QTMALLOC_MODULE_H
|
|
|
|
#ifdef QVECTOR_H
|
|
#error You must include <Eigen/QtAlignedMalloc> before <QtCore/QVector>.
|
|
#endif
|
|
|
|
#ifdef Q_DECL_IMPORT
|
|
#define Q_DECL_IMPORT_ORIG Q_DECL_IMPORT
|
|
#undef Q_DECL_IMPORT
|
|
#define Q_DECL_IMPORT
|
|
#else
|
|
#define Q_DECL_IMPORT
|
|
#endif
|
|
|
|
#include "Core"
|
|
|
|
#include <QtCore/QVector>
|
|
#include <QtCore/QVectorData>
|
|
|
|
#if (!EIGEN_MALLOC_ALREADY_ALIGNED)
|
|
|
|
inline void *qMalloc(size_t size)
|
|
{
|
|
return Eigen::ei_aligned_malloc(size);
|
|
}
|
|
|
|
inline void qFree(void *ptr)
|
|
{
|
|
Eigen::ei_aligned_free(ptr);
|
|
}
|
|
|
|
inline void *qRealloc(void *ptr, size_t size)
|
|
{
|
|
void* newPtr = Eigen::ei_aligned_malloc(size);
|
|
memcpy(newPtr, ptr, size);
|
|
Eigen::ei_aligned_free(ptr);
|
|
return newPtr;
|
|
}
|
|
|
|
// needed to copy that too because it is implemented in the qt binary library, hence
|
|
// wouldn't otherwise honor our qMalloc.
|
|
QVectorData *QVectorData::malloc(int sizeofTypedData, int size, int sizeofT, QVectorData *init)
|
|
{
|
|
QVectorData* p = (QVectorData *)qMalloc(sizeofTypedData + (size - 1) * sizeofT);
|
|
Q_CHECK_PTR(p);
|
|
::memcpy(p, init, sizeofTypedData + (qMin(size, init->alloc) - 1) * sizeofT);
|
|
return p;
|
|
}
|
|
|
|
#endif
|
|
|
|
#ifdef Q_DECL_IMPORT_ORIG
|
|
#define Q_DECL_IMPORT Q_DECL_IMPORT_ORIG
|
|
#undef Q_DECL_IMPORT_ORIG
|
|
#else
|
|
#undef Q_DECL_IMPORT
|
|
#endif
|
|
|
|
#endif // EIGEN_QTMALLOC_MODULE_H
|