File indexing completed on 2025-01-18 09:50:43
0001 #ifndef BOOST_QVM_GEN_MAT_ASSIGN3_HPP_INCLUDED
0002 #define BOOST_QVM_GEN_MAT_ASSIGN3_HPP_INCLUDED
0003
0004
0005
0006
0007
0008
0009
0010
0011 #include <boost/qvm/config.hpp>
0012 #include <boost/qvm/enable_if.hpp>
0013 #include <boost/qvm/mat_traits.hpp>
0014
0015 namespace boost { namespace qvm {
0016
0017 template <class A,class B>
0018 BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS
0019 typename enable_if_c<
0020 mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
0021 mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
0022 A &>::type
0023 assign( A & a, B const & b )
0024 {
0025 write_mat_element<0,0>(a,mat_traits<B>::template read_element<0,0>(b));
0026 write_mat_element<0,1>(a,mat_traits<B>::template read_element<0,1>(b));
0027 write_mat_element<0,2>(a,mat_traits<B>::template read_element<0,2>(b));
0028 write_mat_element<1,0>(a,mat_traits<B>::template read_element<1,0>(b));
0029 write_mat_element<1,1>(a,mat_traits<B>::template read_element<1,1>(b));
0030 write_mat_element<1,2>(a,mat_traits<B>::template read_element<1,2>(b));
0031 write_mat_element<2,0>(a,mat_traits<B>::template read_element<2,0>(b));
0032 write_mat_element<2,1>(a,mat_traits<B>::template read_element<2,1>(b));
0033 write_mat_element<2,2>(a,mat_traits<B>::template read_element<2,2>(b));
0034 return a;
0035 }
0036
0037 namespace
0038 sfinae
0039 {
0040 using ::boost::qvm::assign;
0041 }
0042
0043 namespace
0044 qvm_detail
0045 {
0046 template <int R,int C>
0047 struct assign_mm_defined;
0048
0049 template <>
0050 struct
0051 assign_mm_defined<3,3>
0052 {
0053 static bool const value=true;
0054 };
0055 }
0056
0057 template <class A,class B>
0058 BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS
0059 typename enable_if_c<
0060 mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
0061 mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
0062 A &>::type
0063 assign( A & a, B const & b )
0064 {
0065 write_mat_element<0,0>(a,mat_traits<B>::template read_element<0,0>(b));
0066 write_mat_element<1,0>(a,mat_traits<B>::template read_element<1,0>(b));
0067 write_mat_element<2,0>(a,mat_traits<B>::template read_element<2,0>(b));
0068 return a;
0069 }
0070
0071 namespace
0072 sfinae
0073 {
0074 using ::boost::qvm::assign;
0075 }
0076
0077 namespace
0078 qvm_detail
0079 {
0080 template <int R,int C>
0081 struct assign_mm_defined;
0082
0083 template <>
0084 struct
0085 assign_mm_defined<3,1>
0086 {
0087 static bool const value=true;
0088 };
0089 }
0090
0091 template <class A,class B>
0092 BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS
0093 typename enable_if_c<
0094 mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
0095 mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
0096 A &>::type
0097 assign( A & a, B const & b )
0098 {
0099 write_mat_element<0,0>(a,mat_traits<B>::template read_element<0,0>(b));
0100 write_mat_element<0,1>(a,mat_traits<B>::template read_element<0,1>(b));
0101 write_mat_element<0,2>(a,mat_traits<B>::template read_element<0,2>(b));
0102 return a;
0103 }
0104
0105 namespace
0106 sfinae
0107 {
0108 using ::boost::qvm::assign;
0109 }
0110
0111 namespace
0112 qvm_detail
0113 {
0114 template <int R,int C>
0115 struct assign_mm_defined;
0116
0117 template <>
0118 struct
0119 assign_mm_defined<1,3>
0120 {
0121 static bool const value=true;
0122 };
0123 }
0124
0125 } }
0126
0127 #endif