]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/boost/qvm/vec_traits_defaults.hpp
Add patch for failing prerm scripts
[ceph.git] / ceph / src / boost / boost / qvm / vec_traits_defaults.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_DFFD61ACC72311E6955FFF1F07624D53\r
7#define UUID_DFFD61ACC72311E6955FFF1F07624D53\r
8\r
9#include <boost/qvm/inline.hpp>\r
10#include <boost/qvm/assert.hpp>\r
11\r
12namespace\r
13boost\r
14 {\r
15 namespace\r
16 qvm\r
17 {\r
18 template <class>\r
19 struct vec_traits;\r
20\r
21 namespace\r
22 qvm_detail\r
23 {\r
24 template <int I,int N>\r
25 struct\r
26 vector_w\r
27 {\r
28 template <class A>\r
29 static\r
30 BOOST_QVM_INLINE_CRITICAL\r
31 typename vec_traits<A>::scalar_type &\r
32 write_element_idx( int i, A & a )\r
33 {\r
34 return I==i?\r
35 vec_traits<A>::template write_element<I>(a) :\r
36 vector_w<I+1,N>::write_element_idx(i,a);\r
37 }\r
38 };\r
39\r
40 template <int N>\r
41 struct\r
42 vector_w<N,N>\r
43 {\r
44 template <class A>\r
45 static\r
46 BOOST_QVM_INLINE_TRIVIAL\r
47 typename vec_traits<A>::scalar_type &\r
48 write_element_idx( int, A & a )\r
49 {\r
50 BOOST_QVM_ASSERT(0);\r
51 return vec_traits<A>::template write_element<0>(a);\r
52 }\r
53 };\r
54 }\r
55\r
56 template <class VecType,class ScalarType,int Dim>\r
57 struct\r
58 vec_traits_defaults\r
59 {\r
60 typedef VecType vec_type;\r
61 typedef ScalarType scalar_type;\r
62 static int const dim=Dim;\r
63\r
64 template <int I>\r
65 static\r
66 BOOST_QVM_INLINE_CRITICAL\r
67 scalar_type\r
68 read_element( vec_type const & x )\r
69 {\r
70 return vec_traits<vec_type>::template write_element<I>(const_cast<vec_type &>(x));\r
71 }\r
72\r
73 static\r
74 BOOST_QVM_INLINE_CRITICAL\r
75 scalar_type\r
76 read_element_idx( int i, vec_type const & x )\r
77 {\r
78 return vec_traits<vec_type>::write_element_idx(i,const_cast<vec_type &>(x));\r
79 }\r
80\r
81 protected:\r
82\r
83 static\r
84 BOOST_QVM_INLINE_TRIVIAL\r
85 scalar_type &\r
86 write_element_idx( int i, vec_type & m )\r
87 {\r
88 return qvm_detail::vector_w<0,vec_traits<vec_type>::dim>::write_element_idx(i,m);\r
89 }\r
90 };\r
91 }\r
92 }\r
93\r
94#endif\r