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