Skip to content

Commit c76bbd2

Browse files
committed
core: change the way ti expose Eigen::MatrixBase<Derived>
1 parent 8fbd8ef commit c76bbd2

File tree

1 file changed

+30
-3
lines changed

1 file changed

+30
-3
lines changed

include/eigenpy/details.hpp

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,33 @@ namespace eigenpy
425425
}
426426
};
427427

428+
template<typename MatType>
429+
struct EigenFromPy< Eigen::MatrixBase<MatType> >
430+
{
431+
typedef EigenFromPy<MatType> EigenFromPyDerived;
432+
typedef Eigen::MatrixBase<MatType> Base;
433+
434+
/// \brief Determine if pyObj can be converted into a MatType object
435+
static void* convertible(PyArrayObject* pyObj)
436+
{
437+
std::cout << "call: EigenFromPy< Eigen::MatrixBase<MatType> >::convertible" << std::endl;
438+
return EigenFromPyDerived::convertible(pyObj);
439+
}
440+
441+
/// \brief Allocate memory and copy pyObj in the new storage
442+
static void construct(PyObject* pyObj,
443+
bp::converter::rvalue_from_python_stage1_data* memory)
444+
{
445+
std::cout << "call: EigenFromPy< Eigen::MatrixBase<MatType> >::construct" << std::endl;
446+
EigenFromPyDerived::construct(pyObj,memory);
447+
}
448+
449+
static void registration()
450+
{
451+
bp::converter::registry::push_back
452+
(reinterpret_cast<void *(*)(_object *)>(&EigenFromPy::convertible),
453+
&EigenFromPy::construct,bp::type_id<Base>());
454+
}
428455
};
429456

430457
#define numpy_import_array() {if (_import_array() < 0) {PyErr_Print(); PyErr_SetString(PyExc_ImportError, "numpy.core.multiarray failed to import"); } }
@@ -441,10 +468,10 @@ namespace eigenpy
441468
static void registration()
442469
{
443470
EigenFromPy<MatType>::registration();
471+
444472
// Add also conversion to Eigen::MatrixBase<MatType>
445-
bp::converter::registry::push_back
446-
(reinterpret_cast<void *(*)(_object *)>(&EigenFromPy<MatType>::convertible),
447-
&EigenFromPy<MatType>::construct,bp::type_id< Eigen::MatrixBase<MatType> >());
473+
typedef Eigen::MatrixBase<MatType> MatTypeBase;
474+
EigenFromPy<MatTypeBase>::registration();
448475
}
449476
};
450477

0 commit comments

Comments
 (0)