]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/qvm/test/test_qvm_matrix.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / qvm / test / test_qvm_matrix.hpp
CommitLineData
b32b8144
FG
1//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.\r
2\r
3//Distributed under the Boost Software License, Version 1.0. (See accompanying\r
4//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\r
5\r
6#ifndef UUID_9C471450B3A611DEAF56C1F155D89593\r
7#define UUID_9C471450B3A611DEAF56C1F155D89593\r
8\r
9#include <boost/qvm/mat_traits_defaults.hpp>\r
10#include <boost/qvm/deduce_mat.hpp>\r
11#include <boost/qvm/assert.hpp>\r
12#include "test_qvm.hpp"\r
13\r
14namespace\r
15test_qvm\r
16 {\r
17 template <class Tag,int Rows,int Cols,class T=float>\r
18 struct\r
19 matrix\r
20 {\r
21 T a[Rows][Cols];\r
22 mutable T b[Rows][Cols];\r
23\r
24 explicit\r
25 matrix( T start=T(0), T step=T(0) )\r
26 {\r
27 for( int i=0; i!=Rows; ++i )\r
28 for( int j=0; j!=Cols; ++j,start+=step )\r
29 a[i][j]=b[i][j]=start;\r
30 }\r
31 };\r
32\r
33 template <int Rows,int Cols,class Tag1,class T1,class Tag2,class T2>\r
34 void\r
35 dump_ab( matrix<Tag1,Rows,Cols,T1> const & a, matrix<Tag2,Rows,Cols,T2> const & b )\r
36 {\r
37 detail::dump_ab(a.a,b.a);\r
38 }\r
39 }\r
40\r
41namespace\r
42boost\r
43 {\r
44 namespace\r
45 qvm\r
46 {\r
47 template <class Tag,int Rows,int Cols,class T>\r
48 struct\r
49 mat_traits< test_qvm::matrix<Tag,Rows,Cols,T> >:\r
50 mat_traits_defaults<test_qvm::matrix<Tag,Rows,Cols,T>,T,Rows,Cols>\r
51 {\r
52 typedef mat_traits_defaults<test_qvm::matrix<Tag,Rows,Cols,T>,T,Rows,Cols> base;\r
53\r
54 template <int R,int C>\r
55 static\r
56 typename base::scalar_type &\r
57 write_element( typename base::mat_type & m )\r
58 {\r
59 BOOST_QVM_STATIC_ASSERT(R>=0);\r
60 BOOST_QVM_STATIC_ASSERT(R<Rows);\r
61 BOOST_QVM_STATIC_ASSERT(C>=0);\r
62 BOOST_QVM_STATIC_ASSERT(C<Cols);\r
63 return m.a[R][C];\r
64 }\r
65\r
66 using base::write_element_idx;\r
67 };\r
68\r
69 template <class Tag,class T,int R1,int C1,int R2,int C2,int Rows,int Cols>\r
70 struct\r
71 deduce_mat2<test_qvm::matrix<Tag,R1,C1,T>,test_qvm::matrix<Tag,R2,C2,T>,Rows,Cols>\r
72 {\r
73 typedef test_qvm::matrix<Tag,Rows,Cols,T> type;\r
74 };\r
75 }\r
76 }\r
77\r
78namespace\r
79 {\r
80 struct M1;\r
81 struct M2;\r
82 struct M3;\r
83 }\r
84\r
85#endif\r