1 //Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
2 
3 //Distributed under the Boost Software License, Version 1.0. (See accompanying
4 //file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5 
6 #ifndef BOOST_QVM_AD4F14F2444066D06BC430B7323BA122
7 #define BOOST_QVM_AD4F14F2444066D06BC430B7323BA122
8 
9 //This file was generated by a program. Do not edit manually.
10 
11 #include <boost/qvm/enable_if.hpp>
12 #include <boost/qvm/inline.hpp>
13 #include <boost/qvm/mat_traits.hpp>
14 
15 namespace
16 boost
17     {
18     namespace
19     qvm
20         {
21         template <class A,class B>
22         BOOST_QVM_INLINE_OPERATIONS
23         typename enable_if_c<
24             mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
25             mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
26             A &>::type
assign(A & a,B const & b)27         assign( A & a, B const & b )
28             {
29             mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
30             mat_traits<A>::template write_element<0,1>(a)=mat_traits<B>::template read_element<0,1>(b);
31             mat_traits<A>::template write_element<0,2>(a)=mat_traits<B>::template read_element<0,2>(b);
32             mat_traits<A>::template write_element<0,3>(a)=mat_traits<B>::template read_element<0,3>(b);
33             mat_traits<A>::template write_element<1,0>(a)=mat_traits<B>::template read_element<1,0>(b);
34             mat_traits<A>::template write_element<1,1>(a)=mat_traits<B>::template read_element<1,1>(b);
35             mat_traits<A>::template write_element<1,2>(a)=mat_traits<B>::template read_element<1,2>(b);
36             mat_traits<A>::template write_element<1,3>(a)=mat_traits<B>::template read_element<1,3>(b);
37             mat_traits<A>::template write_element<2,0>(a)=mat_traits<B>::template read_element<2,0>(b);
38             mat_traits<A>::template write_element<2,1>(a)=mat_traits<B>::template read_element<2,1>(b);
39             mat_traits<A>::template write_element<2,2>(a)=mat_traits<B>::template read_element<2,2>(b);
40             mat_traits<A>::template write_element<2,3>(a)=mat_traits<B>::template read_element<2,3>(b);
41             mat_traits<A>::template write_element<3,0>(a)=mat_traits<B>::template read_element<3,0>(b);
42             mat_traits<A>::template write_element<3,1>(a)=mat_traits<B>::template read_element<3,1>(b);
43             mat_traits<A>::template write_element<3,2>(a)=mat_traits<B>::template read_element<3,2>(b);
44             mat_traits<A>::template write_element<3,3>(a)=mat_traits<B>::template read_element<3,3>(b);
45             return a;
46             }
47 
48         namespace
49         sfinae
50             {
51             using ::boost::qvm::assign;
52             }
53 
54         namespace
55         qvm_detail
56             {
57             template <int R,int C>
58             struct assign_mm_defined;
59 
60             template <>
61             struct
62             assign_mm_defined<4,4>
63                 {
64                 static bool const value=true;
65                 };
66             }
67 
68         template <class A,class B>
69         BOOST_QVM_INLINE_OPERATIONS
70         typename enable_if_c<
71             mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
72             mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
73             A &>::type
assign(A & a,B const & b)74         assign( A & a, B const & b )
75             {
76             mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
77             mat_traits<A>::template write_element<1,0>(a)=mat_traits<B>::template read_element<1,0>(b);
78             mat_traits<A>::template write_element<2,0>(a)=mat_traits<B>::template read_element<2,0>(b);
79             mat_traits<A>::template write_element<3,0>(a)=mat_traits<B>::template read_element<3,0>(b);
80             return a;
81             }
82 
83         namespace
84         sfinae
85             {
86             using ::boost::qvm::assign;
87             }
88 
89         namespace
90         qvm_detail
91             {
92             template <int R,int C>
93             struct assign_mm_defined;
94 
95             template <>
96             struct
97             assign_mm_defined<4,1>
98                 {
99                 static bool const value=true;
100                 };
101             }
102 
103         template <class A,class B>
104         BOOST_QVM_INLINE_OPERATIONS
105         typename enable_if_c<
106             mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
107             mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
108             A &>::type
assign(A & a,B const & b)109         assign( A & a, B const & b )
110             {
111             mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
112             mat_traits<A>::template write_element<0,1>(a)=mat_traits<B>::template read_element<0,1>(b);
113             mat_traits<A>::template write_element<0,2>(a)=mat_traits<B>::template read_element<0,2>(b);
114             mat_traits<A>::template write_element<0,3>(a)=mat_traits<B>::template read_element<0,3>(b);
115             return a;
116             }
117 
118         namespace
119         sfinae
120             {
121             using ::boost::qvm::assign;
122             }
123 
124         namespace
125         qvm_detail
126             {
127             template <int R,int C>
128             struct assign_mm_defined;
129 
130             template <>
131             struct
132             assign_mm_defined<1,4>
133                 {
134                 static bool const value=true;
135                 };
136             }
137 
138         }
139     }
140 
141 #endif
142