From cfba28b46a26dccbc06dbdd400b6bf1fb66efe49 Mon Sep 17 00:00:00 2001 From: jcarpent <jcarpent@laas.fr> Date: Tue, 9 Jan 2018 11:49:17 +0100 Subject: [PATCH] [Core] Introduce dedicated struct for allocation --- src/details.hpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/details.hpp b/src/details.hpp index 887880fe..6e9816e6 100644 --- a/src/details.hpp +++ b/src/details.hpp @@ -98,6 +98,16 @@ namespace eigenpy /* --- FROM PYTHON ------------------------------------------------------------ */ + template<typename MatType> + struct EigenObjectAllocator + { + static void allocate(PyArrayObject * pyArray, void * storage) + { + typename MapNumpy<MatType>::EigenMap numpyMap = MapNumpy<MatType>::map(pyArray); + new(storage) MatType(numpyMap); + } + }; + template<typename MatType> struct EigenFromPy { @@ -159,14 +169,13 @@ namespace eigenpy using namespace Eigen; PyArrayObject * pyArray = reinterpret_cast<PyArrayObject*>(pyObj); - typename MapNumpy<MatType>::EigenMap numpyMap = MapNumpy<MatType>::map(pyArray); - assert( (numpyMap.rows()<INT_MAX) && (numpyMap.cols()<INT_MAX) - && "Map range larger than int ... can never happen." ); + assert((PyArray_DIMS(pyArray)[0]<INT_MAX) && (PyArray_DIMS(pyArray)[1]<INT_MAX)); void* storage = ((bp::converter::rvalue_from_python_storage<MatType>*) ((void*)memory))->storage.bytes; - new(storage) MatType(numpyMap); + EigenObjectAllocator<MatType>::allocate(pyArray,storage); + memory->convertible = storage; } }; -- GitLab