diff --git a/CMakeLists.txt b/CMakeLists.txt index 908bd0852e9e8cd9e36407e0183330bca01e2327..1ec991bb415c4c82a25fb436fefee3ce3d2ea74d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -102,6 +102,7 @@ SET(${PROJECT_NAME}_HEADERS include/eigenpy/computation-info.hpp include/eigenpy/eigenpy.hpp include/eigenpy/exception.hpp + include/eigenpy/scalar-conversion.hpp include/eigenpy/expose.hpp include/eigenpy/details.hpp include/eigenpy/fwd.hpp diff --git a/include/eigenpy/details.hpp b/include/eigenpy/details.hpp index 529bc44cc967422322e84edf058e09d11fb0a732..fddd6604b677beb40aeeaa41b4a9df034e30b63c 100644 --- a/include/eigenpy/details.hpp +++ b/include/eigenpy/details.hpp @@ -12,6 +12,7 @@ #include <patchlevel.h> // For PY_MAJOR_VERSION #include <iostream> +#include "eigenpy/scalar-conversion.hpp" #include "eigenpy/eigenpy.hpp" #include "eigenpy/numpy-type.hpp" #include "eigenpy/registration.hpp" @@ -55,36 +56,7 @@ namespace boost { namespace python { namespace detail { namespace eigenpy { - template <typename SCALAR1, typename SCALAR2> - struct FromTypeToType : public boost::false_type {}; - - template <typename SCALAR> - struct FromTypeToType<SCALAR,SCALAR> : public boost::true_type {}; - - template <> struct FromTypeToType<int,long> : public boost::true_type {}; - template <> struct FromTypeToType<int,float> : public boost::true_type {}; - template <> struct FromTypeToType<int,std::complex<float> > : public boost::true_type {}; - template <> struct FromTypeToType<int,double> : public boost::true_type {}; - template <> struct FromTypeToType<int,std::complex<double> > : public boost::true_type {}; - template <> struct FromTypeToType<int,long double> : public boost::true_type {}; - template <> struct FromTypeToType<int,std::complex<long double> > : public boost::true_type {}; - - template <> struct FromTypeToType<long,float> : public boost::true_type {}; - template <> struct FromTypeToType<long,std::complex<float> > : public boost::true_type {}; - template <> struct FromTypeToType<long,double> : public boost::true_type {}; - template <> struct FromTypeToType<long,std::complex<double> > : public boost::true_type {}; - template <> struct FromTypeToType<long,long double> : public boost::true_type {}; - template <> struct FromTypeToType<long,std::complex<long double> > : public boost::true_type {}; - - template <> struct FromTypeToType<float,std::complex<float> > : public boost::true_type {}; - template <> struct FromTypeToType<float,double> : public boost::true_type {}; - template <> struct FromTypeToType<float,std::complex<double> > : public boost::true_type {}; - template <> struct FromTypeToType<float,long double> : public boost::true_type {}; - template <> struct FromTypeToType<float,std::complex<long double> > : public boost::true_type {}; - - template <> struct FromTypeToType<double,std::complex<double> > : public boost::true_type {}; - template <> struct FromTypeToType<double,long double> : public boost::true_type {}; - template <> struct FromTypeToType<double,std::complex<long double> > : public boost::true_type {}; + namespace bp = boost::python; diff --git a/include/eigenpy/scalar-conversion.hpp b/include/eigenpy/scalar-conversion.hpp new file mode 100644 index 0000000000000000000000000000000000000000..b960068af63dc2da18f77942666d129cac320bc1 --- /dev/null +++ b/include/eigenpy/scalar-conversion.hpp @@ -0,0 +1,44 @@ +// +// Copyright (c) 2014-2020 CNRS INRIA +// + +#ifndef __eigenpy_scalar_conversion_hpp__ +#define __eigenpy_scalar_conversion_hpp__ + +#include "eigenpy/config.hpp" + +namespace eigenpy +{ + template <typename SCALAR1, typename SCALAR2> + struct FromTypeToType : public boost::false_type {}; + + template <typename SCALAR> + struct FromTypeToType<SCALAR,SCALAR> : public boost::true_type {}; + + template <> struct FromTypeToType<int,long> : public boost::true_type {}; + template <> struct FromTypeToType<int,float> : public boost::true_type {}; + template <> struct FromTypeToType<int,std::complex<float> > : public boost::true_type {}; + template <> struct FromTypeToType<int,double> : public boost::true_type {}; + template <> struct FromTypeToType<int,std::complex<double> > : public boost::true_type {}; + template <> struct FromTypeToType<int,long double> : public boost::true_type {}; + template <> struct FromTypeToType<int,std::complex<long double> > : public boost::true_type {}; + + template <> struct FromTypeToType<long,float> : public boost::true_type {}; + template <> struct FromTypeToType<long,std::complex<float> > : public boost::true_type {}; + template <> struct FromTypeToType<long,double> : public boost::true_type {}; + template <> struct FromTypeToType<long,std::complex<double> > : public boost::true_type {}; + template <> struct FromTypeToType<long,long double> : public boost::true_type {}; + template <> struct FromTypeToType<long,std::complex<long double> > : public boost::true_type {}; + + template <> struct FromTypeToType<float,std::complex<float> > : public boost::true_type {}; + template <> struct FromTypeToType<float,double> : public boost::true_type {}; + template <> struct FromTypeToType<float,std::complex<double> > : public boost::true_type {}; + template <> struct FromTypeToType<float,long double> : public boost::true_type {}; + template <> struct FromTypeToType<float,std::complex<long double> > : public boost::true_type {}; + + template <> struct FromTypeToType<double,std::complex<double> > : public boost::true_type {}; + template <> struct FromTypeToType<double,long double> : public boost::true_type {}; + template <> struct FromTypeToType<double,std::complex<long double> > : public boost::true_type {}; +} + +#endif // __eigenpy_scalar_conversion_hpp__