Lines 784-799
template<typename T> void swap(scoped_ar
Link Here
|
784 |
|
784 |
|
785 |
#endif |
785 |
#endif |
786 |
|
786 |
|
787 |
|
787 |
|
788 |
/***************************************************************************** |
788 |
/***************************************************************************** |
789 |
*** Implementation of EIGEN_MAKE_ALIGNED_OPERATOR_NEW [_IF] *** |
789 |
*** Implementation of EIGEN_MAKE_ALIGNED_OPERATOR_NEW [_IF] *** |
790 |
*****************************************************************************/ |
790 |
*****************************************************************************/ |
791 |
|
791 |
|
|
|
792 |
#if EIGEN_HAS_CXX17_OVERALIGN |
793 |
|
794 |
// C++17 -> no need to bother about alignment anymore :) |
795 |
|
796 |
#define EIGEN_MAKE_ALIGNED_OPERATOR_NEW_NOTHROW(NeedsToAlign) |
797 |
#define EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign) |
798 |
#define EIGEN_MAKE_ALIGNED_OPERATOR_NEW |
799 |
#define EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF_VECTORIZABLE_FIXED_SIZE(Scalar,Size) |
800 |
|
801 |
#else |
802 |
|
792 |
#if EIGEN_MAX_ALIGN_BYTES!=0 |
803 |
#if EIGEN_MAX_ALIGN_BYTES!=0 |
793 |
#define EIGEN_MAKE_ALIGNED_OPERATOR_NEW_NOTHROW(NeedsToAlign) \ |
804 |
#define EIGEN_MAKE_ALIGNED_OPERATOR_NEW_NOTHROW(NeedsToAlign) \ |
794 |
void* operator new(std::size_t size, const std::nothrow_t&) EIGEN_NO_THROW { \ |
805 |
void* operator new(std::size_t size, const std::nothrow_t&) EIGEN_NO_THROW { \ |
795 |
EIGEN_TRY { return Eigen::internal::conditional_aligned_malloc<NeedsToAlign>(size); } \ |
806 |
EIGEN_TRY { return Eigen::internal::conditional_aligned_malloc<NeedsToAlign>(size); } \ |
796 |
EIGEN_CATCH (...) { return 0; } \ |
807 |
EIGEN_CATCH (...) { return 0; } \ |
797 |
} |
808 |
} |
798 |
#define EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign) \ |
809 |
#define EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign) \ |
799 |
void *operator new(std::size_t size) { \ |
810 |
void *operator new(std::size_t size) { \ |
Lines 826-841
template<typename T> void swap(scoped_ar
Link Here
|
826 |
#define EIGEN_MAKE_ALIGNED_OPERATOR_NEW EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(true) |
837 |
#define EIGEN_MAKE_ALIGNED_OPERATOR_NEW EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(true) |
827 |
#define EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF_VECTORIZABLE_FIXED_SIZE(Scalar,Size) \ |
838 |
#define EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF_VECTORIZABLE_FIXED_SIZE(Scalar,Size) \ |
828 |
EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(bool( \ |
839 |
EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(bool( \ |
829 |
((Size)!=Eigen::Dynamic) && \ |
840 |
((Size)!=Eigen::Dynamic) && \ |
830 |
(((EIGEN_MAX_ALIGN_BYTES>=16) && ((sizeof(Scalar)*(Size))%(EIGEN_MAX_ALIGN_BYTES )==0)) || \ |
841 |
(((EIGEN_MAX_ALIGN_BYTES>=16) && ((sizeof(Scalar)*(Size))%(EIGEN_MAX_ALIGN_BYTES )==0)) || \ |
831 |
((EIGEN_MAX_ALIGN_BYTES>=32) && ((sizeof(Scalar)*(Size))%(EIGEN_MAX_ALIGN_BYTES/2)==0)) || \ |
842 |
((EIGEN_MAX_ALIGN_BYTES>=32) && ((sizeof(Scalar)*(Size))%(EIGEN_MAX_ALIGN_BYTES/2)==0)) || \ |
832 |
((EIGEN_MAX_ALIGN_BYTES>=64) && ((sizeof(Scalar)*(Size))%(EIGEN_MAX_ALIGN_BYTES/4)==0)) ))) |
843 |
((EIGEN_MAX_ALIGN_BYTES>=64) && ((sizeof(Scalar)*(Size))%(EIGEN_MAX_ALIGN_BYTES/4)==0)) ))) |
833 |
|
844 |
|
|
|
845 |
#endif |
846 |
|
834 |
/****************************************************************************/ |
847 |
/****************************************************************************/ |
835 |
|
848 |
|
836 |
/** \class aligned_allocator |
849 |
/** \class aligned_allocator |
837 |
* \ingroup Core_Module |
850 |
* \ingroup Core_Module |
838 |
* |
851 |
* |
839 |
* \brief STL compatible allocator to use with types requiring a non standrad alignment. |
852 |
* \brief STL compatible allocator to use with types requiring a non standrad alignment. |
840 |
* |
853 |
* |
841 |
* The memory is aligned as for dynamically aligned matrix/array types such as MatrixXd. |
854 |
* The memory is aligned as for dynamically aligned matrix/array types such as MatrixXd. |