]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | /* |
2 | [auto_generated] | |
3 | boost/numeric/odeint/external/eigen/eigen_resize.hpp | |
4 | ||
5 | [begin_description] | |
6 | tba. | |
7 | [end_description] | |
8 | ||
9 | Copyright 2013 Ankur Sinha | |
10 | Copyright 2013 Karsten Ahnert | |
11 | ||
12 | Distributed under the Boost Software License, Version 1.0. | |
13 | (See accompanying file LICENSE_1_0.txt or | |
14 | copy at http://www.boost.org/LICENSE_1_0.txt) | |
15 | */ | |
16 | ||
17 | ||
18 | #ifndef BOOST_NUMERIC_ODEINT_EXTERNAL_EIGEN_EIGEN_RESIZE_HPP_DEFINED | |
19 | #define BOOST_NUMERIC_ODEINT_EXTERNAL_EIGEN_EIGEN_RESIZE_HPP_DEFINED | |
20 | ||
21 | ||
22 | #include <boost/numeric/odeint/util/is_resizeable.hpp> | |
23 | #include <boost/numeric/odeint/util/resize.hpp> | |
24 | #include <boost/numeric/odeint/util/same_size.hpp> | |
25 | ||
26 | #include <boost/utility/enable_if.hpp> | |
27 | #include <boost/type_traits/is_base_of.hpp> | |
28 | ||
29 | #include <Eigen/Dense> | |
30 | ||
31 | namespace boost { | |
32 | namespace numeric { | |
33 | namespace odeint { | |
34 | ||
35 | ||
36 | ||
37 | template< class Derived > | |
38 | struct is_resizeable_sfinae< Derived , | |
39 | typename boost::enable_if< typename boost::is_base_of< Eigen::MatrixBase< Derived > , Derived >::type >::type > | |
40 | { | |
41 | typedef boost::true_type type; | |
42 | const static bool value = type::value; | |
43 | }; | |
44 | ||
45 | ||
46 | template < class Derived > | |
47 | struct is_resizeable_sfinae< Derived , | |
48 | typename boost::enable_if< typename boost::is_base_of< Eigen::ArrayBase< Derived > , Derived >::type >::type > | |
49 | { | |
50 | typedef boost::true_type type; | |
51 | const static bool value = type::value; | |
52 | }; | |
53 | ||
54 | ||
55 | ||
56 | template< class Derived > | |
57 | struct same_size_impl_sfinae< Derived , Derived , | |
58 | typename boost::enable_if< typename boost::is_base_of< Eigen::MatrixBase< Derived > , Derived >::type >::type > | |
59 | { | |
60 | static bool same_size( const Eigen::MatrixBase< Derived > &m1 , const Eigen::MatrixBase< Derived > &m2 ) | |
61 | ||
62 | { | |
63 | return ( ( m1.innerSize () == m2.innerSize () ) && ( m1.outerSize() == m2.outerSize() ) ); | |
64 | } | |
65 | }; | |
66 | ||
67 | template< class Derived > | |
68 | struct same_size_impl_sfinae< Derived , Derived , | |
69 | typename boost::enable_if< typename boost::is_base_of< Eigen::ArrayBase< Derived > , Derived >::type >::type > | |
70 | { | |
71 | static bool same_size( const Eigen::ArrayBase< Derived > &v1 , const Eigen::ArrayBase< Derived > &v2 ) | |
72 | { | |
73 | return ( ( v1.innerSize () == v2.innerSize () ) && ( v1.outerSize() == v2.outerSize() ) ); | |
74 | } | |
75 | }; | |
76 | ||
77 | ||
78 | ||
79 | ||
80 | template< class Derived > | |
81 | struct resize_impl_sfinae< Derived , Derived , | |
82 | typename boost::enable_if< typename boost::is_base_of< Eigen::MatrixBase< Derived > , Derived >::type >::type > | |
83 | { | |
84 | static void resize( Eigen::MatrixBase< Derived > &m1 , const Eigen::MatrixBase< Derived > &m2 ) | |
85 | { | |
86 | m1.derived().resizeLike(m2); | |
87 | } | |
88 | }; | |
89 | ||
90 | template< class Derived > | |
91 | struct resize_impl_sfinae< Derived , Derived , | |
92 | typename boost::enable_if< typename boost::is_base_of< Eigen::ArrayBase< Derived > , Derived >::type >::type > | |
93 | { | |
94 | static void resize( Eigen::ArrayBase< Derived > &v1 , const Eigen::ArrayBase< Derived > &v2 ) | |
95 | { | |
96 | v1.derived().resizeLike(v2); | |
97 | } | |
98 | }; | |
99 | ||
100 | ||
101 | ||
102 | } // namespace odeint | |
103 | } // namespace numeric | |
104 | } // namespace boost | |
105 | ||
106 | ||
107 | #endif // BOOST_NUMERIC_ODEINT_EXTERNAL_EIGEN_EIGEN_RESIZE_HPP_DEFINED |