From 360bf7d6389562418133e4c7ab23b89df470b5b8 Mon Sep 17 00:00:00 2001 From: Justin Carpentier <justin.carpentier@inria.fr> Date: Thu, 20 Jun 2019 21:57:57 +0200 Subject: [PATCH] all: use this new function to expose types --- include/eigenpy/angle-axis.hpp | 23 ++++++++++++++++++----- include/eigenpy/quaternion.hpp | 21 ++++++++++++++++++--- src/angle-axis.cpp | 2 +- src/quaternion.cpp | 2 +- 4 files changed, 38 insertions(+), 10 deletions(-) diff --git a/include/eigenpy/angle-axis.hpp b/include/eigenpy/angle-axis.hpp index b1371237..e7aca37a 100644 --- a/include/eigenpy/angle-axis.hpp +++ b/include/eigenpy/angle-axis.hpp @@ -6,20 +6,35 @@ #ifndef __eigenpy_angle_axis_hpp__ #define __eigenpy_angle_axis_hpp__ +#include "eigenpy/fwd.hpp" + #include <boost/python.hpp> #include <Eigen/Core> #include <Eigen/Geometry> -#include "eigenpy/registration.hpp" - namespace eigenpy { namespace bp = boost::python; + + template<typename AngleAxis> class AngleAxisVisitor; + + namespace internal + { + template<typename Scalar> + struct call_expose< Eigen::AngleAxis<Scalar> > + { + typedef Eigen::AngleAxis<Scalar> type; + static inline void run() + { + AngleAxisVisitor<type>::expose(); + } + }; + } // namespace internal template<typename AngleAxis> class AngleAxisVisitor - : public boost::python::def_visitor< AngleAxisVisitor<AngleAxis> > + : public bp::def_visitor< AngleAxisVisitor<AngleAxis> > { typedef typename AngleAxis::Scalar Scalar; @@ -103,8 +118,6 @@ namespace eigenpy static void expose() { - if(register_symbolic_link_to_registered_type<AngleAxis>()) return; - bp::class_<AngleAxis>("AngleAxis", "AngleAxis representation of rotations.\n\n", bp::no_init) diff --git a/include/eigenpy/quaternion.hpp b/include/eigenpy/quaternion.hpp index ed289d0e..2017d4ea 100644 --- a/include/eigenpy/quaternion.hpp +++ b/include/eigenpy/quaternion.hpp @@ -6,6 +6,8 @@ #ifndef __eigenpy_quaternion_hpp__ #define __eigenpy_quaternion_hpp__ +#include "eigenpy/fwd.hpp" + #include <Eigen/Core> #include <Eigen/Geometry> @@ -27,9 +29,24 @@ namespace eigenpy namespace bp = boost::python; + template<typename QuaternionDerived> class QuaternionVisitor; + + namespace internal + { + template<typename Scalar, int Options> + struct call_expose< Eigen::Quaternion<Scalar,Options> > + { + typedef Eigen::Quaternion<Scalar,Options> type; + static inline void run() + { + QuaternionVisitor<type>::expose(); + } + }; + } // namespace internal + template<typename Quaternion> class QuaternionVisitor - : public boost::python::def_visitor< QuaternionVisitor<Quaternion> > + : public bp::def_visitor< QuaternionVisitor<Quaternion> > { typedef Eigen::QuaternionBase<Quaternion> QuaternionBase; @@ -203,8 +220,6 @@ namespace eigenpy static void expose() { - if(register_symbolic_link_to_registered_type<Quaternion>()) return; - bp::class_<Quaternion>("Quaternion", "Quaternion representing rotation.\n\n" "Supported operations " diff --git a/src/angle-axis.cpp b/src/angle-axis.cpp index 56999b9a..f4e33ef0 100644 --- a/src/angle-axis.cpp +++ b/src/angle-axis.cpp @@ -13,6 +13,6 @@ namespace eigenpy { void exposeAngleAxis() { - AngleAxisVisitor<Eigen::AngleAxisd>::expose(); + expose<Eigen::AngleAxisd>(); } } // namespace eigenpy diff --git a/src/quaternion.cpp b/src/quaternion.cpp index 5690ef44..4ffa866c 100644 --- a/src/quaternion.cpp +++ b/src/quaternion.cpp @@ -13,6 +13,6 @@ namespace eigenpy { void exposeQuaternion() { - QuaternionVisitor<Eigen::Quaterniond>::expose(); + expose<Eigen::Quaterniond>(); } } // namespace eigenpy -- GitLab