swizzle2.hpp 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709
  1. #ifndef BOOST_QVM_GEN_SWIZZLE2_HPP_INCLUDED
  2. #define BOOST_QVM_GEN_SWIZZLE2_HPP_INCLUDED
  3. /// Copyright (c) 2008-2021 Emil Dotchevski and Reverge Studios, Inc.
  4. /// Distributed under the Boost Software License, Version 1.0. (See accompanying
  5. /// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  6. /// This file was generated by a program. Do not edit manually.
  7. #include <boost/qvm/detail/swizzle_traits.hpp>
  8. #include <boost/qvm/enable_if.hpp>
  9. #include <boost/qvm/inline.hpp>
  10. namespace boost { namespace qvm {
  11. BOOST_QVM_INLINE_TRIVIAL
  12. qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > const &
  13. _11()
  14. {
  15. return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > const *>(qvm_detail::get_null());
  16. }
  17. BOOST_QVM_INLINE_TRIVIAL
  18. qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > const &
  19. _01()
  20. {
  21. return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > const *>(qvm_detail::get_null());
  22. }
  23. template <class V>
  24. BOOST_QVM_INLINE_TRIVIAL
  25. typename enable_if_c<
  26. is_vec<V>::value && vec_traits<V>::dim>=4,
  27. qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > const &>::type
  28. W1( V const & a )
  29. {
  30. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > const &>(a);
  31. }
  32. template <class V>
  33. BOOST_QVM_INLINE_TRIVIAL
  34. typename enable_if_c<
  35. is_vec<V>::value && vec_traits<V>::dim>=4,
  36. qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > &>::type
  37. W1( V & a )
  38. {
  39. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > &>(a);
  40. }
  41. template <class V>
  42. BOOST_QVM_INLINE_TRIVIAL
  43. typename enable_if_c<
  44. is_vec<V>::value && vec_traits<V>::dim>=3,
  45. qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > const &>::type
  46. Z1( V const & a )
  47. {
  48. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > const &>(a);
  49. }
  50. template <class V>
  51. BOOST_QVM_INLINE_TRIVIAL
  52. typename enable_if_c<
  53. is_vec<V>::value && vec_traits<V>::dim>=3,
  54. qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > &>::type
  55. Z1( V & a )
  56. {
  57. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > &>(a);
  58. }
  59. template <class V>
  60. BOOST_QVM_INLINE_TRIVIAL
  61. typename enable_if_c<
  62. is_vec<V>::value && vec_traits<V>::dim>=2,
  63. qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > const &>::type
  64. Y1( V const & a )
  65. {
  66. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > const &>(a);
  67. }
  68. template <class V>
  69. BOOST_QVM_INLINE_TRIVIAL
  70. typename enable_if_c<
  71. is_vec<V>::value && vec_traits<V>::dim>=2,
  72. qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > &>::type
  73. Y1( V & a )
  74. {
  75. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > &>(a);
  76. }
  77. template <class V>
  78. BOOST_QVM_INLINE_TRIVIAL
  79. typename enable_if_c<
  80. is_vec<V>::value && vec_traits<V>::dim>=1,
  81. qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > const &>::type
  82. X1( V const & a )
  83. {
  84. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > const &>(a);
  85. }
  86. template <class S>
  87. BOOST_QVM_INLINE_TRIVIAL
  88. typename enable_if_c<
  89. is_scalar<S>::value,
  90. qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > const &>::type
  91. X1( S const & a )
  92. {
  93. return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > const &>(a);
  94. }
  95. template <class V>
  96. BOOST_QVM_INLINE_TRIVIAL
  97. typename enable_if_c<
  98. is_vec<V>::value && vec_traits<V>::dim>=1,
  99. qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > &>::type
  100. X1( V & a )
  101. {
  102. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > &>(a);
  103. }
  104. template <class S>
  105. BOOST_QVM_INLINE_TRIVIAL
  106. typename enable_if_c<
  107. is_scalar<S>::value,
  108. qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > &>::type
  109. X1( S & a )
  110. {
  111. return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > &>(a);
  112. }
  113. BOOST_QVM_INLINE_TRIVIAL
  114. qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > const &
  115. _10()
  116. {
  117. return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > const *>(qvm_detail::get_null());
  118. }
  119. BOOST_QVM_INLINE_TRIVIAL
  120. qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > const &
  121. _00()
  122. {
  123. return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > const *>(qvm_detail::get_null());
  124. }
  125. template <class V>
  126. BOOST_QVM_INLINE_TRIVIAL
  127. typename enable_if_c<
  128. is_vec<V>::value && vec_traits<V>::dim>=4,
  129. qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > const &>::type
  130. W0( V const & a )
  131. {
  132. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > const &>(a);
  133. }
  134. template <class V>
  135. BOOST_QVM_INLINE_TRIVIAL
  136. typename enable_if_c<
  137. is_vec<V>::value && vec_traits<V>::dim>=4,
  138. qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > &>::type
  139. W0( V & a )
  140. {
  141. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > &>(a);
  142. }
  143. template <class V>
  144. BOOST_QVM_INLINE_TRIVIAL
  145. typename enable_if_c<
  146. is_vec<V>::value && vec_traits<V>::dim>=3,
  147. qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > const &>::type
  148. Z0( V const & a )
  149. {
  150. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > const &>(a);
  151. }
  152. template <class V>
  153. BOOST_QVM_INLINE_TRIVIAL
  154. typename enable_if_c<
  155. is_vec<V>::value && vec_traits<V>::dim>=3,
  156. qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > &>::type
  157. Z0( V & a )
  158. {
  159. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > &>(a);
  160. }
  161. template <class V>
  162. BOOST_QVM_INLINE_TRIVIAL
  163. typename enable_if_c<
  164. is_vec<V>::value && vec_traits<V>::dim>=2,
  165. qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > const &>::type
  166. Y0( V const & a )
  167. {
  168. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > const &>(a);
  169. }
  170. template <class V>
  171. BOOST_QVM_INLINE_TRIVIAL
  172. typename enable_if_c<
  173. is_vec<V>::value && vec_traits<V>::dim>=2,
  174. qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > &>::type
  175. Y0( V & a )
  176. {
  177. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > &>(a);
  178. }
  179. template <class V>
  180. BOOST_QVM_INLINE_TRIVIAL
  181. typename enable_if_c<
  182. is_vec<V>::value && vec_traits<V>::dim>=1,
  183. qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > const &>::type
  184. X0( V const & a )
  185. {
  186. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > const &>(a);
  187. }
  188. template <class S>
  189. BOOST_QVM_INLINE_TRIVIAL
  190. typename enable_if_c<
  191. is_scalar<S>::value,
  192. qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > const &>::type
  193. X0( S const & a )
  194. {
  195. return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > const &>(a);
  196. }
  197. template <class V>
  198. BOOST_QVM_INLINE_TRIVIAL
  199. typename enable_if_c<
  200. is_vec<V>::value && vec_traits<V>::dim>=1,
  201. qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > &>::type
  202. X0( V & a )
  203. {
  204. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > &>(a);
  205. }
  206. template <class S>
  207. BOOST_QVM_INLINE_TRIVIAL
  208. typename enable_if_c<
  209. is_scalar<S>::value,
  210. qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > &>::type
  211. X0( S & a )
  212. {
  213. return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > &>(a);
  214. }
  215. template <class V>
  216. BOOST_QVM_INLINE_TRIVIAL
  217. typename enable_if_c<
  218. is_vec<V>::value && vec_traits<V>::dim>=4,
  219. qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > const &>::type
  220. _1W( V const & a )
  221. {
  222. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > const &>(a);
  223. }
  224. template <class V>
  225. BOOST_QVM_INLINE_TRIVIAL
  226. typename enable_if_c<
  227. is_vec<V>::value && vec_traits<V>::dim>=4,
  228. qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > &>::type
  229. _1W( V & a )
  230. {
  231. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > &>(a);
  232. }
  233. template <class V>
  234. BOOST_QVM_INLINE_TRIVIAL
  235. typename enable_if_c<
  236. is_vec<V>::value && vec_traits<V>::dim>=4,
  237. qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > const &>::type
  238. _0W( V const & a )
  239. {
  240. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > const &>(a);
  241. }
  242. template <class V>
  243. BOOST_QVM_INLINE_TRIVIAL
  244. typename enable_if_c<
  245. is_vec<V>::value && vec_traits<V>::dim>=4,
  246. qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > &>::type
  247. _0W( V & a )
  248. {
  249. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > &>(a);
  250. }
  251. template <class V>
  252. BOOST_QVM_INLINE_TRIVIAL
  253. typename enable_if_c<
  254. is_vec<V>::value && vec_traits<V>::dim>=4,
  255. qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > const &>::type
  256. WW( V const & a )
  257. {
  258. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > const &>(a);
  259. }
  260. template <class V>
  261. BOOST_QVM_INLINE_TRIVIAL
  262. typename enable_if_c<
  263. is_vec<V>::value && vec_traits<V>::dim>=4,
  264. qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > &>::type
  265. WW( V & a )
  266. {
  267. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > &>(a);
  268. }
  269. template <class V>
  270. BOOST_QVM_INLINE_TRIVIAL
  271. typename enable_if_c<
  272. is_vec<V>::value && vec_traits<V>::dim>=4,
  273. qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > const &>::type
  274. ZW( V const & a )
  275. {
  276. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > const &>(a);
  277. }
  278. template <class V>
  279. BOOST_QVM_INLINE_TRIVIAL
  280. typename enable_if_c<
  281. is_vec<V>::value && vec_traits<V>::dim>=4,
  282. qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > &>::type
  283. ZW( V & a )
  284. {
  285. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > &>(a);
  286. }
  287. template <class V>
  288. BOOST_QVM_INLINE_TRIVIAL
  289. typename enable_if_c<
  290. is_vec<V>::value && vec_traits<V>::dim>=4,
  291. qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > const &>::type
  292. YW( V const & a )
  293. {
  294. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > const &>(a);
  295. }
  296. template <class V>
  297. BOOST_QVM_INLINE_TRIVIAL
  298. typename enable_if_c<
  299. is_vec<V>::value && vec_traits<V>::dim>=4,
  300. qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > &>::type
  301. YW( V & a )
  302. {
  303. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > &>(a);
  304. }
  305. template <class V>
  306. BOOST_QVM_INLINE_TRIVIAL
  307. typename enable_if_c<
  308. is_vec<V>::value && vec_traits<V>::dim>=4,
  309. qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > const &>::type
  310. XW( V const & a )
  311. {
  312. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > const &>(a);
  313. }
  314. template <class V>
  315. BOOST_QVM_INLINE_TRIVIAL
  316. typename enable_if_c<
  317. is_vec<V>::value && vec_traits<V>::dim>=4,
  318. qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > &>::type
  319. XW( V & a )
  320. {
  321. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > &>(a);
  322. }
  323. template <class V>
  324. BOOST_QVM_INLINE_TRIVIAL
  325. typename enable_if_c<
  326. is_vec<V>::value && vec_traits<V>::dim>=3,
  327. qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > const &>::type
  328. _1Z( V const & a )
  329. {
  330. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > const &>(a);
  331. }
  332. template <class V>
  333. BOOST_QVM_INLINE_TRIVIAL
  334. typename enable_if_c<
  335. is_vec<V>::value && vec_traits<V>::dim>=3,
  336. qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > &>::type
  337. _1Z( V & a )
  338. {
  339. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > &>(a);
  340. }
  341. template <class V>
  342. BOOST_QVM_INLINE_TRIVIAL
  343. typename enable_if_c<
  344. is_vec<V>::value && vec_traits<V>::dim>=3,
  345. qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > const &>::type
  346. _0Z( V const & a )
  347. {
  348. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > const &>(a);
  349. }
  350. template <class V>
  351. BOOST_QVM_INLINE_TRIVIAL
  352. typename enable_if_c<
  353. is_vec<V>::value && vec_traits<V>::dim>=3,
  354. qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > &>::type
  355. _0Z( V & a )
  356. {
  357. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > &>(a);
  358. }
  359. template <class V>
  360. BOOST_QVM_INLINE_TRIVIAL
  361. typename enable_if_c<
  362. is_vec<V>::value && vec_traits<V>::dim>=4,
  363. qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > const &>::type
  364. WZ( V const & a )
  365. {
  366. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > const &>(a);
  367. }
  368. template <class V>
  369. BOOST_QVM_INLINE_TRIVIAL
  370. typename enable_if_c<
  371. is_vec<V>::value && vec_traits<V>::dim>=4,
  372. qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > &>::type
  373. WZ( V & a )
  374. {
  375. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > &>(a);
  376. }
  377. template <class V>
  378. BOOST_QVM_INLINE_TRIVIAL
  379. typename enable_if_c<
  380. is_vec<V>::value && vec_traits<V>::dim>=3,
  381. qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > const &>::type
  382. ZZ( V const & a )
  383. {
  384. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > const &>(a);
  385. }
  386. template <class V>
  387. BOOST_QVM_INLINE_TRIVIAL
  388. typename enable_if_c<
  389. is_vec<V>::value && vec_traits<V>::dim>=3,
  390. qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > &>::type
  391. ZZ( V & a )
  392. {
  393. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > &>(a);
  394. }
  395. template <class V>
  396. BOOST_QVM_INLINE_TRIVIAL
  397. typename enable_if_c<
  398. is_vec<V>::value && vec_traits<V>::dim>=3,
  399. qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > const &>::type
  400. YZ( V const & a )
  401. {
  402. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > const &>(a);
  403. }
  404. template <class V>
  405. BOOST_QVM_INLINE_TRIVIAL
  406. typename enable_if_c<
  407. is_vec<V>::value && vec_traits<V>::dim>=3,
  408. qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > &>::type
  409. YZ( V & a )
  410. {
  411. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > &>(a);
  412. }
  413. template <class V>
  414. BOOST_QVM_INLINE_TRIVIAL
  415. typename enable_if_c<
  416. is_vec<V>::value && vec_traits<V>::dim>=3,
  417. qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > const &>::type
  418. XZ( V const & a )
  419. {
  420. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > const &>(a);
  421. }
  422. template <class V>
  423. BOOST_QVM_INLINE_TRIVIAL
  424. typename enable_if_c<
  425. is_vec<V>::value && vec_traits<V>::dim>=3,
  426. qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > &>::type
  427. XZ( V & a )
  428. {
  429. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > &>(a);
  430. }
  431. template <class V>
  432. BOOST_QVM_INLINE_TRIVIAL
  433. typename enable_if_c<
  434. is_vec<V>::value && vec_traits<V>::dim>=2,
  435. qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > const &>::type
  436. _1Y( V const & a )
  437. {
  438. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > const &>(a);
  439. }
  440. template <class V>
  441. BOOST_QVM_INLINE_TRIVIAL
  442. typename enable_if_c<
  443. is_vec<V>::value && vec_traits<V>::dim>=2,
  444. qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > &>::type
  445. _1Y( V & a )
  446. {
  447. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > &>(a);
  448. }
  449. template <class V>
  450. BOOST_QVM_INLINE_TRIVIAL
  451. typename enable_if_c<
  452. is_vec<V>::value && vec_traits<V>::dim>=2,
  453. qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > const &>::type
  454. _0Y( V const & a )
  455. {
  456. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > const &>(a);
  457. }
  458. template <class V>
  459. BOOST_QVM_INLINE_TRIVIAL
  460. typename enable_if_c<
  461. is_vec<V>::value && vec_traits<V>::dim>=2,
  462. qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > &>::type
  463. _0Y( V & a )
  464. {
  465. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > &>(a);
  466. }
  467. template <class V>
  468. BOOST_QVM_INLINE_TRIVIAL
  469. typename enable_if_c<
  470. is_vec<V>::value && vec_traits<V>::dim>=4,
  471. qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > const &>::type
  472. WY( V const & a )
  473. {
  474. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > const &>(a);
  475. }
  476. template <class V>
  477. BOOST_QVM_INLINE_TRIVIAL
  478. typename enable_if_c<
  479. is_vec<V>::value && vec_traits<V>::dim>=4,
  480. qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > &>::type
  481. WY( V & a )
  482. {
  483. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > &>(a);
  484. }
  485. template <class V>
  486. BOOST_QVM_INLINE_TRIVIAL
  487. typename enable_if_c<
  488. is_vec<V>::value && vec_traits<V>::dim>=3,
  489. qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > const &>::type
  490. ZY( V const & a )
  491. {
  492. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > const &>(a);
  493. }
  494. template <class V>
  495. BOOST_QVM_INLINE_TRIVIAL
  496. typename enable_if_c<
  497. is_vec<V>::value && vec_traits<V>::dim>=3,
  498. qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > &>::type
  499. ZY( V & a )
  500. {
  501. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > &>(a);
  502. }
  503. template <class V>
  504. BOOST_QVM_INLINE_TRIVIAL
  505. typename enable_if_c<
  506. is_vec<V>::value && vec_traits<V>::dim>=2,
  507. qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > const &>::type
  508. YY( V const & a )
  509. {
  510. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > const &>(a);
  511. }
  512. template <class V>
  513. BOOST_QVM_INLINE_TRIVIAL
  514. typename enable_if_c<
  515. is_vec<V>::value && vec_traits<V>::dim>=2,
  516. qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > &>::type
  517. YY( V & a )
  518. {
  519. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > &>(a);
  520. }
  521. template <class V>
  522. BOOST_QVM_INLINE_TRIVIAL
  523. typename enable_if_c<
  524. is_vec<V>::value && vec_traits<V>::dim>=2,
  525. qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > const &>::type
  526. XY( V const & a )
  527. {
  528. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > const &>(a);
  529. }
  530. template <class V>
  531. BOOST_QVM_INLINE_TRIVIAL
  532. typename enable_if_c<
  533. is_vec<V>::value && vec_traits<V>::dim>=2,
  534. qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > &>::type
  535. XY( V & a )
  536. {
  537. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > &>(a);
  538. }
  539. template <class V>
  540. BOOST_QVM_INLINE_TRIVIAL
  541. typename enable_if_c<
  542. is_vec<V>::value && vec_traits<V>::dim>=1,
  543. qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > const &>::type
  544. _1X( V const & a )
  545. {
  546. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > const &>(a);
  547. }
  548. template <class S>
  549. BOOST_QVM_INLINE_TRIVIAL
  550. typename enable_if_c<
  551. is_scalar<S>::value,
  552. qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > const &>::type
  553. _1X( S const & a )
  554. {
  555. return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > const &>(a);
  556. }
  557. template <class V>
  558. BOOST_QVM_INLINE_TRIVIAL
  559. typename enable_if_c<
  560. is_vec<V>::value && vec_traits<V>::dim>=1,
  561. qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > &>::type
  562. _1X( V & a )
  563. {
  564. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > &>(a);
  565. }
  566. template <class S>
  567. BOOST_QVM_INLINE_TRIVIAL
  568. typename enable_if_c<
  569. is_scalar<S>::value,
  570. qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > &>::type
  571. _1X( S & a )
  572. {
  573. return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > &>(a);
  574. }
  575. template <class V>
  576. BOOST_QVM_INLINE_TRIVIAL
  577. typename enable_if_c<
  578. is_vec<V>::value && vec_traits<V>::dim>=1,
  579. qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > const &>::type
  580. _0X( V const & a )
  581. {
  582. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > const &>(a);
  583. }
  584. template <class S>
  585. BOOST_QVM_INLINE_TRIVIAL
  586. typename enable_if_c<
  587. is_scalar<S>::value,
  588. qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > const &>::type
  589. _0X( S const & a )
  590. {
  591. return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > const &>(a);
  592. }
  593. template <class V>
  594. BOOST_QVM_INLINE_TRIVIAL
  595. typename enable_if_c<
  596. is_vec<V>::value && vec_traits<V>::dim>=1,
  597. qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > &>::type
  598. _0X( V & a )
  599. {
  600. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > &>(a);
  601. }
  602. template <class S>
  603. BOOST_QVM_INLINE_TRIVIAL
  604. typename enable_if_c<
  605. is_scalar<S>::value,
  606. qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > &>::type
  607. _0X( S & a )
  608. {
  609. return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > &>(a);
  610. }
  611. template <class V>
  612. BOOST_QVM_INLINE_TRIVIAL
  613. typename enable_if_c<
  614. is_vec<V>::value && vec_traits<V>::dim>=4,
  615. qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > const &>::type
  616. WX( V const & a )
  617. {
  618. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > const &>(a);
  619. }
  620. template <class V>
  621. BOOST_QVM_INLINE_TRIVIAL
  622. typename enable_if_c<
  623. is_vec<V>::value && vec_traits<V>::dim>=4,
  624. qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > &>::type
  625. WX( V & a )
  626. {
  627. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > &>(a);
  628. }
  629. template <class V>
  630. BOOST_QVM_INLINE_TRIVIAL
  631. typename enable_if_c<
  632. is_vec<V>::value && vec_traits<V>::dim>=3,
  633. qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > const &>::type
  634. ZX( V const & a )
  635. {
  636. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > const &>(a);
  637. }
  638. template <class V>
  639. BOOST_QVM_INLINE_TRIVIAL
  640. typename enable_if_c<
  641. is_vec<V>::value && vec_traits<V>::dim>=3,
  642. qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > &>::type
  643. ZX( V & a )
  644. {
  645. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > &>(a);
  646. }
  647. template <class V>
  648. BOOST_QVM_INLINE_TRIVIAL
  649. typename enable_if_c<
  650. is_vec<V>::value && vec_traits<V>::dim>=2,
  651. qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > const &>::type
  652. YX( V const & a )
  653. {
  654. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > const &>(a);
  655. }
  656. template <class V>
  657. BOOST_QVM_INLINE_TRIVIAL
  658. typename enable_if_c<
  659. is_vec<V>::value && vec_traits<V>::dim>=2,
  660. qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > &>::type
  661. YX( V & a )
  662. {
  663. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > &>(a);
  664. }
  665. template <class V>
  666. BOOST_QVM_INLINE_TRIVIAL
  667. typename enable_if_c<
  668. is_vec<V>::value && vec_traits<V>::dim>=1,
  669. qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > const &>::type
  670. XX( V const & a )
  671. {
  672. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > const &>(a);
  673. }
  674. template <class S>
  675. BOOST_QVM_INLINE_TRIVIAL
  676. typename enable_if_c<
  677. is_scalar<S>::value,
  678. qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > const &>::type
  679. XX( S const & a )
  680. {
  681. return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > const &>(a);
  682. }
  683. template <class V>
  684. BOOST_QVM_INLINE_TRIVIAL
  685. typename enable_if_c<
  686. is_vec<V>::value && vec_traits<V>::dim>=1,
  687. qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > &>::type
  688. XX( V & a )
  689. {
  690. return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > &>(a);
  691. }
  692. template <class S>
  693. BOOST_QVM_INLINE_TRIVIAL
  694. typename enable_if_c<
  695. is_scalar<S>::value,
  696. qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > &>::type
  697. XX( S & a )
  698. {
  699. return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > &>(a);
  700. }
  701. } }
  702. #endif