swizzle2.hpp 32 KB

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