From 62214a21a8bf91c341e2dadc4929738eae538aae Mon Sep 17 00:00:00 2001 From: Dirk Eddelbuettel Date: Sun, 17 Dec 2023 09:48:15 -0600 Subject: [PATCH 1/2] Adding qvm and timer (closes #84 #97) --- inst/include/boost/qvm.hpp | 11 + inst/include/boost/qvm/all.hpp | 7 + inst/include/boost/qvm/deduce_quat.hpp | 94 + inst/include/boost/qvm/detail/quat_assign.hpp | 31 + .../boost/qvm/detail/swizzle_traits.hpp | 382 + .../boost/qvm/detail/vec_register_impl.hpp | 138 + inst/include/boost/qvm/gen/swizzle2.hpp | 709 + inst/include/boost/qvm/gen/swizzle3.hpp | 4153 +++ inst/include/boost/qvm/gen/swizzle4.hpp | 24325 ++++++++++++++++ .../include/boost/qvm/gen/vec_operations2.hpp | 627 + .../include/boost/qvm/gen/vec_operations3.hpp | 648 + .../include/boost/qvm/gen/vec_operations4.hpp | 669 + inst/include/boost/qvm/lite.hpp | 28 + inst/include/boost/qvm/map.hpp | 13 + inst/include/boost/qvm/map_vec_mat.hpp | 794 + .../include/boost/qvm/mat_traits_defaults.hpp | 91 + inst/include/boost/qvm/operations.hpp | 15 + inst/include/boost/qvm/quat.hpp | 68 + inst/include/boost/qvm/quat_access.hpp | 180 + inst/include/boost/qvm/quat_operations.hpp | 1573 + inst/include/boost/qvm/quat_traits_array.hpp | 287 + .../boost/qvm/quat_traits_defaults.hpp | 36 + .../include/boost/qvm/quat_vec_operations.hpp | 58 + inst/include/boost/qvm/swizzle.hpp | 13 + inst/include/boost/qvm/swizzle2.hpp | 6 + inst/include/boost/qvm/swizzle3.hpp | 6 + inst/include/boost/qvm/swizzle4.hpp | 6 + inst/include/boost/qvm/vec_operations.hpp | 1018 + inst/include/boost/qvm/vec_operations2.hpp | 6 + inst/include/boost/qvm/vec_operations3.hpp | 6 + inst/include/boost/qvm/vec_operations4.hpp | 6 + inst/include/boost/qvm/vec_register.hpp | 14 + inst/include/boost/qvm/vec_register2.hpp | 25 + inst/include/boost/qvm/vec_register3.hpp | 27 + inst/include/boost/qvm/vec_register4.hpp | 29 + inst/include/boost/qvm/vec_traits_array.hpp | 244 + .../include/boost/qvm/vec_traits_defaults.hpp | 90 + inst/include/boost/qvm/vec_traits_gnuc.hpp | 99 + inst/include/boost/timer/progress_display.hpp | 94 + 39 files changed, 36626 insertions(+) create mode 100644 inst/include/boost/qvm.hpp create mode 100644 inst/include/boost/qvm/all.hpp create mode 100644 inst/include/boost/qvm/deduce_quat.hpp create mode 100644 inst/include/boost/qvm/detail/quat_assign.hpp create mode 100644 inst/include/boost/qvm/detail/swizzle_traits.hpp create mode 100644 inst/include/boost/qvm/detail/vec_register_impl.hpp create mode 100644 inst/include/boost/qvm/gen/swizzle2.hpp create mode 100644 inst/include/boost/qvm/gen/swizzle3.hpp create mode 100644 inst/include/boost/qvm/gen/swizzle4.hpp create mode 100644 inst/include/boost/qvm/gen/vec_operations2.hpp create mode 100644 inst/include/boost/qvm/gen/vec_operations3.hpp create mode 100644 inst/include/boost/qvm/gen/vec_operations4.hpp create mode 100644 inst/include/boost/qvm/lite.hpp create mode 100644 inst/include/boost/qvm/map.hpp create mode 100644 inst/include/boost/qvm/map_vec_mat.hpp create mode 100644 inst/include/boost/qvm/mat_traits_defaults.hpp create mode 100644 inst/include/boost/qvm/operations.hpp create mode 100644 inst/include/boost/qvm/quat.hpp create mode 100644 inst/include/boost/qvm/quat_access.hpp create mode 100644 inst/include/boost/qvm/quat_operations.hpp create mode 100644 inst/include/boost/qvm/quat_traits_array.hpp create mode 100644 inst/include/boost/qvm/quat_traits_defaults.hpp create mode 100644 inst/include/boost/qvm/quat_vec_operations.hpp create mode 100644 inst/include/boost/qvm/swizzle.hpp create mode 100644 inst/include/boost/qvm/swizzle2.hpp create mode 100644 inst/include/boost/qvm/swizzle3.hpp create mode 100644 inst/include/boost/qvm/swizzle4.hpp create mode 100644 inst/include/boost/qvm/vec_operations.hpp create mode 100644 inst/include/boost/qvm/vec_operations2.hpp create mode 100644 inst/include/boost/qvm/vec_operations3.hpp create mode 100644 inst/include/boost/qvm/vec_operations4.hpp create mode 100644 inst/include/boost/qvm/vec_register.hpp create mode 100644 inst/include/boost/qvm/vec_register2.hpp create mode 100644 inst/include/boost/qvm/vec_register3.hpp create mode 100644 inst/include/boost/qvm/vec_register4.hpp create mode 100644 inst/include/boost/qvm/vec_traits_array.hpp create mode 100644 inst/include/boost/qvm/vec_traits_defaults.hpp create mode 100644 inst/include/boost/qvm/vec_traits_gnuc.hpp create mode 100644 inst/include/boost/timer/progress_display.hpp diff --git a/inst/include/boost/qvm.hpp b/inst/include/boost/qvm.hpp new file mode 100644 index 000000000..4987e8e94 --- /dev/null +++ b/inst/include/boost/qvm.hpp @@ -0,0 +1,11 @@ +#ifndef BOOST_QVM_HPP_INCLUDED +#define BOOST_QVM_HPP_INCLUDED + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include + +#endif diff --git a/inst/include/boost/qvm/all.hpp b/inst/include/boost/qvm/all.hpp new file mode 100644 index 000000000..42c919e8d --- /dev/null +++ b/inst/include/boost/qvm/all.hpp @@ -0,0 +1,7 @@ +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include diff --git a/inst/include/boost/qvm/deduce_quat.hpp b/inst/include/boost/qvm/deduce_quat.hpp new file mode 100644 index 000000000..d29adaa39 --- /dev/null +++ b/inst/include/boost/qvm/deduce_quat.hpp @@ -0,0 +1,94 @@ +#ifndef BOOST_QVM_DEDUCE_QUAT_HPP_INCLUDED +#define BOOST_QVM_DEDUCE_QUAT_HPP_INCLUDED + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include + +namespace boost { namespace qvm { + +template +struct quat; + +namespace +qvm_detail + { + template ::scalar_type> + struct + deduce_q_default + { + BOOST_QVM_STATIC_ASSERT(is_quat::value); + typedef quat::scalar_type> type; + }; + + template + struct + deduce_q_default + { + BOOST_QVM_STATIC_ASSERT(is_quat::value); + typedef Q type; + }; + } + +template ::scalar_type> +struct +deduce_quat + { + BOOST_QVM_STATIC_ASSERT(is_quat::value); + typedef typename qvm_detail::deduce_q_default::type type; + }; + +namespace +qvm_detail + { + template ::value, + bool IsScalarB=is_scalar::value> + struct + deduce_q2_default + { + typedef quat type; + }; + + template + struct + deduce_q2_default + { + BOOST_QVM_STATIC_ASSERT(is_quat::value); + typedef Q type; + }; + + template + struct + deduce_q2_default + { + BOOST_QVM_STATIC_ASSERT(is_quat::value); + typedef typename deduce_quat::type type; + }; + + template + struct + deduce_q2_default + { + BOOST_QVM_STATIC_ASSERT(is_quat::value); + typedef typename deduce_quat::type type; + }; + } + +template ::type,typename scalar::type>::type> +struct +deduce_quat2 + { + BOOST_QVM_STATIC_ASSERT(is_quat::value || is_quat::value); + typedef typename qvm_detail::deduce_q2_default::type type; + }; + +} } + +#endif diff --git a/inst/include/boost/qvm/detail/quat_assign.hpp b/inst/include/boost/qvm/detail/quat_assign.hpp new file mode 100644 index 000000000..934305b10 --- /dev/null +++ b/inst/include/boost/qvm/detail/quat_assign.hpp @@ -0,0 +1,31 @@ +#ifndef BOOST_QVM_DETAIL_QUAT_ASSIGN_HPP_INCLUDED +#define BOOST_QVM_DETAIL_QUAT_ASSIGN_HPP_INCLUDED + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include + +namespace boost { namespace qvm { + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_quat::value && is_quat::value, + A &>::type +assign( A & a, B const & b ) + { + write_quat_element<0>(a,quat_traits::template read_element<0>(b)); + write_quat_element<1>(a,quat_traits::template read_element<1>(b)); + write_quat_element<2>(a,quat_traits::template read_element<2>(b)); + write_quat_element<3>(a,quat_traits::template read_element<3>(b)); + return a; + } + +} } + +#endif diff --git a/inst/include/boost/qvm/detail/swizzle_traits.hpp b/inst/include/boost/qvm/detail/swizzle_traits.hpp new file mode 100644 index 000000000..f197fc409 --- /dev/null +++ b/inst/include/boost/qvm/detail/swizzle_traits.hpp @@ -0,0 +1,382 @@ +#ifndef BOOST_QVM_DETAIL_SWIZZLE_TRAITS_HPP_INCLUDED +#define BOOST_QVM_DETAIL_SWIZZLE_TRAITS_HPP_INCLUDED + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include + +namespace boost { namespace qvm { + +namespace +qvm_detail + { + BOOST_QVM_INLINE_CRITICAL + void const * + get_null() + { + static int const obj=0; + return &obj; + } + + template struct swizzle_idx { static int const value=A; typedef Next next; }; + + template + struct + const_value + { + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + typename vec_traits::scalar_type + value() + { + BOOST_QVM_ASSERT(0); + return typename vec_traits::scalar_type(); + } + }; + + template + struct + const_value + { + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + typename vec_traits::scalar_type + value() + { + return scalar_traits::scalar_type>::value(0); + } + }; + + template + struct + const_value + { + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + typename vec_traits::scalar_type + value() + { + return scalar_traits::scalar_type>::value(1); + } + }; + + template + struct neg_zero; + + template + struct + neg_zero + { + static int const value=0; + }; + + template + struct + neg_zero + { + static int const value=Index; + }; + + template + struct + swizzle + { + static int const value=swizzle::value; + }; + + template + struct + swizzle + { + static int const value=SwizzleList::value; + }; + + template + struct swizzle; + + template + struct + swizzle_list_length + { + static int const value=swizzle_list_length::value; + }; + + template + struct + swizzle_list_length + { + static int const value=C; + }; + + template + struct + validate_swizzle_list + { + static bool const value = + ((SwizzleList::value)::value; + }; + + template + struct + validate_swizzle_list + { + static bool const value=true; + }; + + template + class + sw_ + { + sw_( sw_ const & ); + sw_ & operator=( sw_ const & ); + ~sw_(); + + BOOST_QVM_STATIC_ASSERT((validate_swizzle_list::dim>::value)); + + public: + + template + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + sw_ & + operator=( T const & x ) + { + assign(*this,x); + return *this; + } + + template = 201103L + , class = typename enable_if >::type +#endif + > + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + operator R() const + { + R r; + assign(r,*this); + return r; + } + }; + + template ::value> + struct sw_write_traits; + + template + struct + sw_write_traits + { + typedef qvm_detail::sw_ this_vector; + typedef typename vec_traits::scalar_type scalar_type; + static int const dim=qvm_detail::swizzle_list_length::value; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type & + write_element( this_vector & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I::value; + BOOST_QVM_STATIC_ASSERT(idx>=0); + BOOST_QVM_STATIC_ASSERT(idx::dim); + return vec_traits::template write_element(reinterpret_cast(x)); + } + }; + + template + struct + sw_write_traits + { + typedef qvm_detail::sw_ this_vector; + typedef typename vec_traits::scalar_type scalar_type; + static int const dim=qvm_detail::swizzle_list_length::value; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + void + write_element( this_vector & x, scalar_type s ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I::value; + BOOST_QVM_STATIC_ASSERT(idx>=0); + BOOST_QVM_STATIC_ASSERT(idx::dim); + vec_traits::template write_element(reinterpret_cast(x), s); + } + }; + + template + class + sw01_ + { + sw01_( sw01_ const & ); + sw01_ & operator=( sw01_ const & ); + ~sw01_(); + + public: + + template = 201103L + , class = typename enable_if >::type +#endif + > + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + operator R() const + { + R r; + assign(r,*this); + return r; + } + }; + + template + class + sws_ + { + sws_( sws_ const & ); + sws_ & operator=( sws_ const & ); + ~sws_(); + + BOOST_QVM_STATIC_ASSERT((validate_swizzle_list::value)); + + public: + + template = 201103L + , class = typename enable_if >::type +#endif + > + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + operator R() const + { + R r; + assign(r,*this); + return r; + } + }; + } + +template +struct +vec_traits >: + qvm_detail::sw_write_traits + { + typedef qvm_detail::sw_ this_vector; + typedef typename vec_traits::scalar_type scalar_type; + static int const dim=qvm_detail::swizzle_list_length::value; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( this_vector const & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I::value; + BOOST_QVM_STATIC_ASSERT(idx::dim); + return idx>=0? + vec_traits::template read_element::value>(reinterpret_cast(x)) : + qvm_detail::const_value::value(); + } + }; + +template +struct +vec_traits > + { + typedef qvm_detail::sw01_ this_vector; + typedef int scalar_type; + static int const dim=qvm_detail::swizzle_list_length::value; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( this_vector const & ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I::value; + BOOST_QVM_STATIC_ASSERT(idx<0); + return qvm_detail::const_value::value(); + } + }; + +template +struct +vec_traits > + { + typedef qvm_detail::sws_ this_vector; + typedef OriginalScalar scalar_type; + static int const dim=qvm_detail::swizzle_list_length::value; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( this_vector const & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I::value; + BOOST_QVM_STATIC_ASSERT(idx<1); + return idx==0? + reinterpret_cast(x) : + qvm_detail::const_value::value(); + } + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type & + write_element( this_vector & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I::value; + BOOST_QVM_STATIC_ASSERT(idx<1); + return reinterpret_cast(x); + } + }; + +template +struct +deduce_vec,D> + { + typedef vec::scalar_type,D> type; + }; + +template +struct +deduce_vec2,qvm_detail::sw_,D> + { + typedef vec::scalar_type,D> type; + }; + +template +struct +deduce_vec,D> + { + typedef vec type; + }; + +template +struct +deduce_vec2,qvm_detail::sws_,D> + { + typedef vec type; + }; + +} } + +#endif diff --git a/inst/include/boost/qvm/detail/vec_register_impl.hpp b/inst/include/boost/qvm/detail/vec_register_impl.hpp new file mode 100644 index 000000000..21eae9862 --- /dev/null +++ b/inst/include/boost/qvm/detail/vec_register_impl.hpp @@ -0,0 +1,138 @@ +#ifndef BOOST_QVM_DETAIL_VEC_REGISTER_IMPL_HPP +#define BOOST_QVM_DETAIL_VEC_REGISTER_IMPL_HPP + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. +// Copyright 2018 agate-pris + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include + +namespace boost { namespace qvm { namespace qvm_detail { + +template +struct vec_register_common +{ + typedef VecType vec_type; + typedef ScalarType scalar_type; + static int const dim = Dim; +}; + +template +struct vec_register_read +{ + template static ScalarType read_element(VecType const& v); + + template struct read_element_idx_detail + { + static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL ScalarType impl(int const i, VecType const& v) + { + return I == i + ? read_element(v) + : read_element_idx_detail::impl(i, v); + } + }; + + template struct read_element_idx_detail + { + static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL ScalarType impl(int, VecType const& v) + { + BOOST_QVM_ASSERT(0); + return read_element<0>(v); + } + }; + + static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL ScalarType read_element_idx(int const i, VecType const& v) + { + return read_element_idx_detail<0, Dim>::impl(i, v); + } +}; + +template +struct vec_register_write +{ + template static ScalarType& write_element(VecType& v); + + template struct write_element_idx_detail + { + static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL ScalarType& impl(int const i, VecType& v) + { + return I == i + ? write_element(v) + : write_element_idx_detail::impl(i, v); + } + }; + + template struct write_element_idx_detail + { + static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL ScalarType& impl(int, VecType& v) + { + BOOST_QVM_ASSERT(0); + return write_element<0>(v); + } + }; + + static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL ScalarType& write_element_idx(int const i, VecType& v) + { + return write_element_idx_detail<0, Dim>::impl(i, v); + } +}; + +}}} + +#define BOOST_QVM_DETAIL_SPECIALIZE_QVM_DETAIL_VEC_REGISTER_READ(VecType, ScalarType, Dim, I, Read) \ +namespace boost { namespace qvm {namespace qvm_detail{ \ +template<> \ +template<> \ +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL \ +ScalarType vec_register_read::read_element(VecType const& v) \ +{ \ + BOOST_QVM_STATIC_ASSERT(I>=0); \ + BOOST_QVM_STATIC_ASSERT(I \ +template<> \ +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL \ +ScalarType& vec_register_write::write_element(VecType& v) \ +{ \ + BOOST_QVM_STATIC_ASSERT(I>=0); \ + BOOST_QVM_STATIC_ASSERT(I \ +struct vec_traits \ +: qvm_detail::vec_register_common \ +, qvm_detail::vec_register_read \ +{ \ +}; \ +}} + +#define BOOST_QVM_DETAIL_REGISTER_VEC_SPECIALIZE_VEC_TRAITS_READ_WRITE(VecType, ScalarType, Dim)\ +namespace boost { namespace qvm { \ +template<> \ +struct vec_traits \ +: qvm_detail::vec_register_common \ +, qvm_detail::vec_register_read \ +, qvm_detail::vec_register_write \ +{ \ +}; \ +}} + +#endif diff --git a/inst/include/boost/qvm/gen/swizzle2.hpp b/inst/include/boost/qvm/gen/swizzle2.hpp new file mode 100644 index 000000000..16475b976 --- /dev/null +++ b/inst/include/boost/qvm/gen/swizzle2.hpp @@ -0,0 +1,709 @@ +#ifndef BOOST_QVM_GEN_SWIZZLE2_HPP_INCLUDED +#define BOOST_QVM_GEN_SWIZZLE2_HPP_INCLUDED + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// This file was generated by a program. Do not edit manually. + +#include +#include +#include + +namespace boost { namespace qvm { + +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > const & +_11() + { + return *reinterpret_cast > > const *>(qvm_detail::get_null()); + } +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > const & +_01() + { + return *reinterpret_cast > > const *>(qvm_detail::get_null()); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > const &>::type +W1( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > &>::type +W1( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > const &>::type +Z1( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > &>::type +Z1( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > const &>::type +Y1( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > &>::type +Y1( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > const &>::type +X1( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > const &>::type +X1( S const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > &>::type +X1( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > &>::type +X1( S & a ) + { + return reinterpret_cast > > &>(a); + } +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > const & +_10() + { + return *reinterpret_cast > > const *>(qvm_detail::get_null()); + } +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > const & +_00() + { + return *reinterpret_cast > > const *>(qvm_detail::get_null()); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > const &>::type +W0( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > &>::type +W0( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > const &>::type +Z0( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > &>::type +Z0( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > const &>::type +Y0( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > &>::type +Y0( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > const &>::type +X0( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > const &>::type +X0( S const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > &>::type +X0( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > &>::type +X0( S & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > const &>::type +_1W( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > &>::type +_1W( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > const &>::type +_0W( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > &>::type +_0W( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > const &>::type +WW( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > &>::type +WW( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > const &>::type +ZW( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > &>::type +ZW( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > const &>::type +YW( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > &>::type +YW( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > const &>::type +XW( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > &>::type +XW( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > const &>::type +_1Z( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > &>::type +_1Z( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > const &>::type +_0Z( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > &>::type +_0Z( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > const &>::type +WZ( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > &>::type +WZ( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > const &>::type +ZZ( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > &>::type +ZZ( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > const &>::type +YZ( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > &>::type +YZ( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > const &>::type +XZ( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > &>::type +XZ( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > const &>::type +_1Y( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > &>::type +_1Y( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > const &>::type +_0Y( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > &>::type +_0Y( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > const &>::type +WY( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > &>::type +WY( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > const &>::type +ZY( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > &>::type +ZY( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > const &>::type +YY( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > &>::type +YY( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > const &>::type +XY( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > &>::type +XY( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > const &>::type +_1X( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > const &>::type +_1X( S const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > &>::type +_1X( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > &>::type +_1X( S & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > const &>::type +_0X( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > const &>::type +_0X( S const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > &>::type +_0X( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > &>::type +_0X( S & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > const &>::type +WX( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > &>::type +WX( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > const &>::type +ZX( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > &>::type +ZX( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > const &>::type +YX( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > &>::type +YX( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > const &>::type +XX( V const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > const &>::type +XX( S const & a ) + { + return reinterpret_cast > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > &>::type +XX( V & a ) + { + return reinterpret_cast > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > &>::type +XX( S & a ) + { + return reinterpret_cast > > &>(a); + } +} } + +#endif diff --git a/inst/include/boost/qvm/gen/swizzle3.hpp b/inst/include/boost/qvm/gen/swizzle3.hpp new file mode 100644 index 000000000..63a31f438 --- /dev/null +++ b/inst/include/boost/qvm/gen/swizzle3.hpp @@ -0,0 +1,4153 @@ +#ifndef BOOST_QVM_GEN_SWIZZLE3_HPP_INCLUDED +#define BOOST_QVM_GEN_SWIZZLE3_HPP_INCLUDED + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// This file was generated by a program. Do not edit manually. + +#include +#include +#include + +namespace boost { namespace qvm { + +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > > const & +_111() + { + return *reinterpret_cast > > > const *>(qvm_detail::get_null()); + } +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > > const & +_011() + { + return *reinterpret_cast > > > const *>(qvm_detail::get_null()); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +W11( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +W11( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +Z11( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +Z11( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +Y11( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +Y11( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > const &>::type +X11( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > const &>::type +X11( S const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > &>::type +X11( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > &>::type +X11( S & a ) + { + return reinterpret_cast > > > &>(a); + } +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > > const & +_101() + { + return *reinterpret_cast > > > const *>(qvm_detail::get_null()); + } +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > > const & +_001() + { + return *reinterpret_cast > > > const *>(qvm_detail::get_null()); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +W01( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +W01( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +Z01( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +Z01( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +Y01( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +Y01( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > const &>::type +X01( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > const &>::type +X01( S const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > &>::type +X01( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > &>::type +X01( S & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +_1W1( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +_1W1( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +_0W1( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +_0W1( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +WW1( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +WW1( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +ZW1( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +ZW1( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +YW1( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +YW1( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +XW1( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +XW1( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +_1Z1( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +_1Z1( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +_0Z1( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +_0Z1( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +WZ1( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +WZ1( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +ZZ1( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +ZZ1( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +YZ1( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +YZ1( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +XZ1( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +XZ1( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +_1Y1( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +_1Y1( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +_0Y1( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +_0Y1( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +WY1( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +WY1( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +ZY1( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +ZY1( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +YY1( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +YY1( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +XY1( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +XY1( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > const &>::type +_1X1( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > const &>::type +_1X1( S const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > &>::type +_1X1( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > &>::type +_1X1( S & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > const &>::type +_0X1( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > const &>::type +_0X1( S const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > &>::type +_0X1( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > &>::type +_0X1( S & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +WX1( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +WX1( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +ZX1( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +ZX1( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +YX1( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +YX1( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > const &>::type +XX1( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > const &>::type +XX1( S const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > &>::type +XX1( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > &>::type +XX1( S & a ) + { + return reinterpret_cast > > > &>(a); + } +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > > const & +_110() + { + return *reinterpret_cast > > > const *>(qvm_detail::get_null()); + } +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > > const & +_010() + { + return *reinterpret_cast > > > const *>(qvm_detail::get_null()); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +W10( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +W10( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +Z10( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +Z10( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +Y10( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +Y10( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > const &>::type +X10( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > const &>::type +X10( S const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > &>::type +X10( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > &>::type +X10( S & a ) + { + return reinterpret_cast > > > &>(a); + } +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > > const & +_100() + { + return *reinterpret_cast > > > const *>(qvm_detail::get_null()); + } +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > > const & +_000() + { + return *reinterpret_cast > > > const *>(qvm_detail::get_null()); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +W00( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +W00( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +Z00( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +Z00( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +Y00( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +Y00( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > const &>::type +X00( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > const &>::type +X00( S const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > &>::type +X00( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > &>::type +X00( S & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +_1W0( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +_1W0( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +_0W0( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +_0W0( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +WW0( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +WW0( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +ZW0( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +ZW0( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +YW0( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +YW0( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +XW0( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +XW0( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +_1Z0( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +_1Z0( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +_0Z0( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +_0Z0( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +WZ0( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +WZ0( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +ZZ0( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +ZZ0( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +YZ0( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +YZ0( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +XZ0( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +XZ0( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +_1Y0( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +_1Y0( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +_0Y0( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +_0Y0( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +WY0( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +WY0( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +ZY0( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +ZY0( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +YY0( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +YY0( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +XY0( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +XY0( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > const &>::type +_1X0( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > const &>::type +_1X0( S const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > &>::type +_1X0( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > &>::type +_1X0( S & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > const &>::type +_0X0( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > const &>::type +_0X0( S const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > &>::type +_0X0( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > &>::type +_0X0( S & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +WX0( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +WX0( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +ZX0( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +ZX0( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +YX0( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +YX0( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > const &>::type +XX0( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > const &>::type +XX0( S const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > &>::type +XX0( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > &>::type +XX0( S & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +_11W( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +_11W( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +_01W( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +_01W( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +W1W( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +W1W( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +Z1W( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +Z1W( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +Y1W( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +Y1W( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +X1W( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +X1W( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +_10W( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +_10W( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +_00W( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +_00W( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +W0W( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +W0W( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +Z0W( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +Z0W( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +Y0W( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +Y0W( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +X0W( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +X0W( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +_1WW( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +_1WW( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +_0WW( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +_0WW( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +WWW( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +WWW( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +ZWW( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +ZWW( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +YWW( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +YWW( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +XWW( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +XWW( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +_1ZW( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +_1ZW( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +_0ZW( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +_0ZW( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +WZW( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +WZW( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +ZZW( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +ZZW( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +YZW( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +YZW( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +XZW( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +XZW( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +_1YW( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +_1YW( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +_0YW( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +_0YW( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +WYW( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +WYW( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +ZYW( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +ZYW( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +YYW( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +YYW( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +XYW( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +XYW( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +_1XW( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +_1XW( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +_0XW( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +_0XW( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +WXW( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +WXW( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +ZXW( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +ZXW( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +YXW( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +YXW( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +XXW( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +XXW( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +_11Z( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +_11Z( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +_01Z( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +_01Z( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +W1Z( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +W1Z( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +Z1Z( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +Z1Z( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +Y1Z( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +Y1Z( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +X1Z( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +X1Z( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +_10Z( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +_10Z( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +_00Z( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +_00Z( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +W0Z( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +W0Z( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +Z0Z( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +Z0Z( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +Y0Z( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +Y0Z( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +X0Z( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +X0Z( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +_1WZ( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +_1WZ( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +_0WZ( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +_0WZ( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +WWZ( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +WWZ( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +ZWZ( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +ZWZ( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +YWZ( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +YWZ( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +XWZ( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +XWZ( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +_1ZZ( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +_1ZZ( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +_0ZZ( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +_0ZZ( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +WZZ( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +WZZ( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +ZZZ( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +ZZZ( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +YZZ( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +YZZ( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +XZZ( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +XZZ( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +_1YZ( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +_1YZ( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +_0YZ( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +_0YZ( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +WYZ( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +WYZ( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +ZYZ( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +ZYZ( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +YYZ( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +YYZ( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +XYZ( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +XYZ( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +_1XZ( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +_1XZ( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +_0XZ( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +_0XZ( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +WXZ( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +WXZ( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +ZXZ( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +ZXZ( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +YXZ( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +YXZ( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +XXZ( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +XXZ( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +_11Y( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +_11Y( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +_01Y( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +_01Y( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +W1Y( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +W1Y( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +Z1Y( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +Z1Y( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +Y1Y( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +Y1Y( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +X1Y( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +X1Y( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +_10Y( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +_10Y( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +_00Y( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +_00Y( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +W0Y( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +W0Y( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +Z0Y( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +Z0Y( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +Y0Y( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +Y0Y( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +X0Y( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +X0Y( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +_1WY( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +_1WY( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +_0WY( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +_0WY( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +WWY( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +WWY( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +ZWY( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +ZWY( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +YWY( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +YWY( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +XWY( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +XWY( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +_1ZY( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +_1ZY( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +_0ZY( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +_0ZY( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +WZY( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +WZY( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +ZZY( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +ZZY( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +YZY( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +YZY( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +XZY( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +XZY( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +_1YY( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +_1YY( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +_0YY( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +_0YY( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +WYY( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +WYY( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +ZYY( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +ZYY( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +YYY( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +YYY( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +XYY( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +XYY( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +_1XY( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +_1XY( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +_0XY( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +_0XY( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +WXY( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +WXY( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +ZXY( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +ZXY( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +YXY( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +YXY( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +XXY( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +XXY( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > const &>::type +_11X( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > const &>::type +_11X( S const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > &>::type +_11X( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > &>::type +_11X( S & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > const &>::type +_01X( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > const &>::type +_01X( S const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > &>::type +_01X( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > &>::type +_01X( S & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +W1X( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +W1X( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +Z1X( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +Z1X( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +Y1X( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +Y1X( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > const &>::type +X1X( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > const &>::type +X1X( S const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > &>::type +X1X( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > &>::type +X1X( S & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > const &>::type +_10X( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > const &>::type +_10X( S const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > &>::type +_10X( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > &>::type +_10X( S & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > const &>::type +_00X( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > const &>::type +_00X( S const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > &>::type +_00X( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > &>::type +_00X( S & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +W0X( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +W0X( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +Z0X( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +Z0X( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +Y0X( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +Y0X( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > const &>::type +X0X( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > const &>::type +X0X( S const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > &>::type +X0X( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > &>::type +X0X( S & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +_1WX( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +_1WX( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +_0WX( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +_0WX( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +WWX( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +WWX( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +ZWX( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +ZWX( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +YWX( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +YWX( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +XWX( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +XWX( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +_1ZX( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +_1ZX( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +_0ZX( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +_0ZX( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +WZX( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +WZX( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +ZZX( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +ZZX( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +YZX( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +YZX( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +XZX( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +XZX( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +_1YX( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +_1YX( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +_0YX( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +_0YX( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +WYX( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +WYX( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +ZYX( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +ZYX( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +YYX( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +YYX( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +XYX( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +XYX( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > const &>::type +_1XX( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > const &>::type +_1XX( S const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > &>::type +_1XX( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > &>::type +_1XX( S & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > const &>::type +_0XX( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > const &>::type +_0XX( S const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > &>::type +_0XX( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > &>::type +_0XX( S & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > const &>::type +WXX( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > &>::type +WXX( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > const &>::type +ZXX( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > &>::type +ZXX( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > const &>::type +YXX( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > &>::type +YXX( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > const &>::type +XXX( V const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > const &>::type +XXX( S const & a ) + { + return reinterpret_cast > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > &>::type +XXX( V & a ) + { + return reinterpret_cast > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > &>::type +XXX( S & a ) + { + return reinterpret_cast > > > &>(a); + } +} } + +#endif diff --git a/inst/include/boost/qvm/gen/swizzle4.hpp b/inst/include/boost/qvm/gen/swizzle4.hpp new file mode 100644 index 000000000..ccd7fc025 --- /dev/null +++ b/inst/include/boost/qvm/gen/swizzle4.hpp @@ -0,0 +1,24325 @@ +#ifndef BOOST_QVM_GEN_SWIZZLE4_HPP_INCLUDED +#define BOOST_QVM_GEN_SWIZZLE4_HPP_INCLUDED + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// This file was generated by a program. Do not edit manually. + +#include +#include +#include + +namespace boost { namespace qvm { + +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > > > const & +_1111() + { + return *reinterpret_cast > > > > const *>(qvm_detail::get_null()); + } +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > > > const & +_0111() + { + return *reinterpret_cast > > > > const *>(qvm_detail::get_null()); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W111( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W111( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z111( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z111( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y111( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y111( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +X111( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +X111( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +X111( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +X111( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > > > const & +_1011() + { + return *reinterpret_cast > > > > const *>(qvm_detail::get_null()); + } +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > > > const & +_0011() + { + return *reinterpret_cast > > > > const *>(qvm_detail::get_null()); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W011( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W011( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z011( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z011( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y011( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y011( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +X011( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +X011( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +X011( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +X011( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1W11( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1W11( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0W11( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0W11( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WW11( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WW11( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZW11( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZW11( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YW11( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YW11( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XW11( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XW11( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1Z11( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1Z11( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0Z11( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0Z11( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZ11( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZ11( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZZ11( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZZ11( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YZ11( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YZ11( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XZ11( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XZ11( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_1Y11( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_1Y11( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_0Y11( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_0Y11( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WY11( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WY11( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZY11( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZY11( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YY11( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YY11( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +XY11( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +XY11( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_1X11( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_1X11( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_1X11( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_1X11( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_0X11( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_0X11( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_0X11( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_0X11( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WX11( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WX11( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZX11( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZX11( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YX11( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YX11( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +XX11( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +XX11( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +XX11( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +XX11( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > > > const & +_1101() + { + return *reinterpret_cast > > > > const *>(qvm_detail::get_null()); + } +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > > > const & +_0101() + { + return *reinterpret_cast > > > > const *>(qvm_detail::get_null()); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W101( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W101( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z101( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z101( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y101( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y101( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +X101( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +X101( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +X101( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +X101( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > > > const & +_1001() + { + return *reinterpret_cast > > > > const *>(qvm_detail::get_null()); + } +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > > > const & +_0001() + { + return *reinterpret_cast > > > > const *>(qvm_detail::get_null()); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W001( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W001( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z001( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z001( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y001( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y001( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +X001( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +X001( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +X001( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +X001( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1W01( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1W01( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0W01( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0W01( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WW01( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WW01( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZW01( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZW01( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YW01( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YW01( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XW01( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XW01( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1Z01( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1Z01( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0Z01( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0Z01( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZ01( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZ01( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZZ01( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZZ01( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YZ01( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YZ01( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XZ01( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XZ01( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_1Y01( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_1Y01( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_0Y01( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_0Y01( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WY01( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WY01( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZY01( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZY01( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YY01( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YY01( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +XY01( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +XY01( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_1X01( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_1X01( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_1X01( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_1X01( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_0X01( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_0X01( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_0X01( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_0X01( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WX01( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WX01( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZX01( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZX01( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YX01( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YX01( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +XX01( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +XX01( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +XX01( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +XX01( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_11W1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_11W1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_01W1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_01W1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W1W1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W1W1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Z1W1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Z1W1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Y1W1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Y1W1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +X1W1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +X1W1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_10W1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_10W1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_00W1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_00W1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W0W1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W0W1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Z0W1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Z0W1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Y0W1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Y0W1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +X0W1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +X0W1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1WW1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1WW1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0WW1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0WW1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WWW1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WWW1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZWW1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZWW1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YWW1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YWW1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XWW1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XWW1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1ZW1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1ZW1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0ZW1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0ZW1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZW1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZW1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZZW1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZZW1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YZW1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YZW1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XZW1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XZW1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1YW1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1YW1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0YW1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0YW1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WYW1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WYW1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZYW1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZYW1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YYW1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YYW1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XYW1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XYW1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1XW1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1XW1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0XW1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0XW1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WXW1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WXW1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZXW1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZXW1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YXW1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YXW1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XXW1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XXW1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_11Z1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_11Z1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_01Z1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_01Z1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W1Z1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W1Z1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z1Z1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z1Z1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Y1Z1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Y1Z1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +X1Z1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +X1Z1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_10Z1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_10Z1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_00Z1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_00Z1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W0Z1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W0Z1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z0Z1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z0Z1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Y0Z1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Y0Z1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +X0Z1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +X0Z1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1WZ1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1WZ1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0WZ1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0WZ1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WWZ1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WWZ1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZWZ1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZWZ1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YWZ1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YWZ1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XWZ1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XWZ1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1ZZ1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1ZZ1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0ZZ1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0ZZ1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZZ1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZZ1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZZZ1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZZZ1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YZZ1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YZZ1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XZZ1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XZZ1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1YZ1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1YZ1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0YZ1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0YZ1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WYZ1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WYZ1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZYZ1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZYZ1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YYZ1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YYZ1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XYZ1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XYZ1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1XZ1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1XZ1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0XZ1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0XZ1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WXZ1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WXZ1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZXZ1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZXZ1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YXZ1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YXZ1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XXZ1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XXZ1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_11Y1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_11Y1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_01Y1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_01Y1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W1Y1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W1Y1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z1Y1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z1Y1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y1Y1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y1Y1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +X1Y1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +X1Y1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_10Y1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_10Y1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_00Y1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_00Y1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W0Y1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W0Y1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z0Y1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z0Y1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y0Y1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y0Y1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +X0Y1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +X0Y1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1WY1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1WY1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0WY1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0WY1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WWY1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WWY1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZWY1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZWY1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YWY1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YWY1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XWY1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XWY1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1ZY1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1ZY1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0ZY1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0ZY1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZY1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZY1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZZY1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZZY1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YZY1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YZY1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XZY1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XZY1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_1YY1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_1YY1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_0YY1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_0YY1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WYY1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WYY1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZYY1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZYY1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YYY1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YYY1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +XYY1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +XYY1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_1XY1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_1XY1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_0XY1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_0XY1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WXY1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WXY1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZXY1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZXY1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YXY1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YXY1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +XXY1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +XXY1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_11X1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_11X1( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_11X1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_11X1( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_01X1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_01X1( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_01X1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_01X1( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W1X1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W1X1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z1X1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z1X1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y1X1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y1X1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +X1X1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +X1X1( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +X1X1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +X1X1( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_10X1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_10X1( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_10X1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_10X1( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_00X1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_00X1( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_00X1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_00X1( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W0X1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W0X1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z0X1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z0X1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y0X1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y0X1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +X0X1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +X0X1( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +X0X1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +X0X1( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1WX1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1WX1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0WX1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0WX1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WWX1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WWX1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZWX1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZWX1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YWX1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YWX1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XWX1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XWX1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1ZX1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1ZX1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0ZX1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0ZX1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZX1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZX1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZZX1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZZX1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YZX1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YZX1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XZX1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XZX1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_1YX1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_1YX1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_0YX1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_0YX1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WYX1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WYX1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZYX1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZYX1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YYX1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YYX1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +XYX1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +XYX1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_1XX1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_1XX1( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_1XX1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_1XX1( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_0XX1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_0XX1( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_0XX1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_0XX1( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WXX1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WXX1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZXX1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZXX1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YXX1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YXX1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +XXX1( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +XXX1( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +XXX1( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +XXX1( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > > > const & +_1110() + { + return *reinterpret_cast > > > > const *>(qvm_detail::get_null()); + } +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > > > const & +_0110() + { + return *reinterpret_cast > > > > const *>(qvm_detail::get_null()); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W110( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W110( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z110( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z110( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y110( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y110( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +X110( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +X110( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +X110( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +X110( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > > > const & +_1010() + { + return *reinterpret_cast > > > > const *>(qvm_detail::get_null()); + } +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > > > const & +_0010() + { + return *reinterpret_cast > > > > const *>(qvm_detail::get_null()); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W010( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W010( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z010( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z010( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y010( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y010( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +X010( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +X010( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +X010( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +X010( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1W10( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1W10( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0W10( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0W10( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WW10( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WW10( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZW10( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZW10( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YW10( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YW10( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XW10( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XW10( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1Z10( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1Z10( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0Z10( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0Z10( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZ10( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZ10( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZZ10( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZZ10( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YZ10( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YZ10( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XZ10( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XZ10( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_1Y10( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_1Y10( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_0Y10( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_0Y10( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WY10( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WY10( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZY10( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZY10( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YY10( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YY10( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +XY10( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +XY10( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_1X10( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_1X10( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_1X10( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_1X10( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_0X10( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_0X10( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_0X10( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_0X10( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WX10( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WX10( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZX10( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZX10( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YX10( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YX10( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +XX10( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +XX10( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +XX10( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +XX10( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > > > const & +_1100() + { + return *reinterpret_cast > > > > const *>(qvm_detail::get_null()); + } +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > > > const & +_0100() + { + return *reinterpret_cast > > > > const *>(qvm_detail::get_null()); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W100( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W100( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z100( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z100( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y100( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y100( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +X100( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +X100( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +X100( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +X100( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > > > const & +_1000() + { + return *reinterpret_cast > > > > const *>(qvm_detail::get_null()); + } +BOOST_QVM_INLINE_TRIVIAL +qvm_detail::sw01_ > > > > const & +_0000() + { + return *reinterpret_cast > > > > const *>(qvm_detail::get_null()); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W000( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W000( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z000( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z000( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y000( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y000( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +X000( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +X000( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +X000( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +X000( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1W00( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1W00( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0W00( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0W00( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WW00( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WW00( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZW00( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZW00( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YW00( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YW00( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XW00( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XW00( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1Z00( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1Z00( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0Z00( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0Z00( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZ00( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZ00( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZZ00( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZZ00( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YZ00( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YZ00( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XZ00( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XZ00( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_1Y00( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_1Y00( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_0Y00( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_0Y00( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WY00( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WY00( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZY00( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZY00( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YY00( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YY00( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +XY00( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +XY00( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_1X00( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_1X00( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_1X00( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_1X00( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_0X00( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_0X00( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_0X00( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_0X00( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WX00( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WX00( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZX00( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZX00( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YX00( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YX00( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +XX00( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +XX00( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +XX00( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +XX00( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_11W0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_11W0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_01W0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_01W0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W1W0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W1W0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Z1W0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Z1W0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Y1W0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Y1W0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +X1W0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +X1W0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_10W0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_10W0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_00W0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_00W0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W0W0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W0W0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Z0W0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Z0W0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Y0W0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Y0W0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +X0W0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +X0W0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1WW0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1WW0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0WW0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0WW0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WWW0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WWW0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZWW0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZWW0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YWW0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YWW0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XWW0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XWW0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1ZW0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1ZW0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0ZW0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0ZW0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZW0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZW0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZZW0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZZW0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YZW0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YZW0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XZW0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XZW0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1YW0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1YW0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0YW0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0YW0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WYW0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WYW0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZYW0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZYW0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YYW0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YYW0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XYW0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XYW0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1XW0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1XW0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0XW0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0XW0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WXW0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WXW0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZXW0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZXW0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YXW0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YXW0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XXW0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XXW0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_11Z0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_11Z0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_01Z0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_01Z0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W1Z0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W1Z0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z1Z0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z1Z0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Y1Z0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Y1Z0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +X1Z0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +X1Z0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_10Z0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_10Z0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_00Z0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_00Z0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W0Z0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W0Z0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z0Z0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z0Z0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Y0Z0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Y0Z0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +X0Z0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +X0Z0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1WZ0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1WZ0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0WZ0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0WZ0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WWZ0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WWZ0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZWZ0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZWZ0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YWZ0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YWZ0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XWZ0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XWZ0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1ZZ0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1ZZ0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0ZZ0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0ZZ0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZZ0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZZ0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZZZ0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZZZ0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YZZ0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YZZ0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XZZ0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XZZ0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1YZ0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1YZ0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0YZ0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0YZ0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WYZ0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WYZ0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZYZ0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZYZ0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YYZ0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YYZ0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XYZ0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XYZ0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1XZ0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1XZ0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0XZ0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0XZ0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WXZ0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WXZ0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZXZ0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZXZ0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YXZ0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YXZ0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XXZ0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XXZ0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_11Y0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_11Y0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_01Y0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_01Y0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W1Y0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W1Y0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z1Y0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z1Y0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y1Y0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y1Y0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +X1Y0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +X1Y0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_10Y0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_10Y0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_00Y0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_00Y0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W0Y0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W0Y0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z0Y0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z0Y0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y0Y0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y0Y0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +X0Y0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +X0Y0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1WY0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1WY0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0WY0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0WY0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WWY0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WWY0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZWY0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZWY0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YWY0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YWY0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XWY0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XWY0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1ZY0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1ZY0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0ZY0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0ZY0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZY0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZY0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZZY0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZZY0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YZY0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YZY0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XZY0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XZY0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_1YY0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_1YY0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_0YY0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_0YY0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WYY0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WYY0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZYY0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZYY0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YYY0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YYY0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +XYY0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +XYY0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_1XY0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_1XY0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_0XY0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_0XY0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WXY0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WXY0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZXY0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZXY0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YXY0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YXY0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +XXY0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +XXY0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_11X0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_11X0( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_11X0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_11X0( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_01X0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_01X0( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_01X0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_01X0( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W1X0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W1X0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z1X0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z1X0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y1X0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y1X0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +X1X0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +X1X0( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +X1X0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +X1X0( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_10X0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_10X0( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_10X0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_10X0( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_00X0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_00X0( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_00X0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_00X0( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W0X0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W0X0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z0X0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z0X0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y0X0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y0X0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +X0X0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +X0X0( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +X0X0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +X0X0( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1WX0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1WX0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0WX0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0WX0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WWX0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WWX0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZWX0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZWX0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YWX0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YWX0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XWX0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XWX0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1ZX0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1ZX0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0ZX0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0ZX0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZX0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZX0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZZX0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZZX0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YZX0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YZX0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XZX0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XZX0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_1YX0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_1YX0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_0YX0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_0YX0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WYX0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WYX0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZYX0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZYX0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YYX0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YYX0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +XYX0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +XYX0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_1XX0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_1XX0( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_1XX0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_1XX0( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_0XX0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_0XX0( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_0XX0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_0XX0( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WXX0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WXX0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZXX0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZXX0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YXX0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YXX0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +XXX0( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +XXX0( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +XXX0( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +XXX0( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_111W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_111W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_011W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_011W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W11W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W11W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Z11W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Z11W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Y11W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Y11W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +X11W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +X11W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_101W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_101W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_001W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_001W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W01W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W01W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Z01W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Z01W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Y01W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Y01W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +X01W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +X01W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1W1W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1W1W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0W1W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0W1W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WW1W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WW1W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZW1W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZW1W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YW1W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YW1W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XW1W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XW1W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1Z1W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1Z1W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0Z1W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0Z1W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZ1W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZ1W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZZ1W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZZ1W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YZ1W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YZ1W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XZ1W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XZ1W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1Y1W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1Y1W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0Y1W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0Y1W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WY1W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WY1W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZY1W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZY1W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YY1W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YY1W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XY1W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XY1W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1X1W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1X1W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0X1W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0X1W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WX1W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WX1W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZX1W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZX1W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YX1W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YX1W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XX1W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XX1W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_110W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_110W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_010W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_010W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W10W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W10W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Z10W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Z10W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Y10W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Y10W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +X10W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +X10W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_100W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_100W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_000W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_000W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W00W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W00W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Z00W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Z00W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Y00W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Y00W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +X00W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +X00W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1W0W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1W0W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0W0W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0W0W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WW0W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WW0W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZW0W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZW0W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YW0W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YW0W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XW0W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XW0W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1Z0W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1Z0W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0Z0W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0Z0W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZ0W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZ0W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZZ0W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZZ0W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YZ0W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YZ0W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XZ0W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XZ0W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1Y0W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1Y0W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0Y0W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0Y0W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WY0W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WY0W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZY0W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZY0W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YY0W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YY0W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XY0W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XY0W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1X0W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1X0W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0X0W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0X0W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WX0W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WX0W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZX0W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZX0W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YX0W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YX0W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XX0W( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XX0W( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_11WW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_11WW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_01WW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_01WW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W1WW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W1WW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Z1WW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Z1WW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Y1WW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Y1WW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +X1WW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +X1WW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_10WW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_10WW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_00WW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_00WW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W0WW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W0WW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Z0WW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Z0WW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Y0WW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Y0WW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +X0WW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +X0WW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1WWW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1WWW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0WWW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0WWW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WWWW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WWWW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZWWW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZWWW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YWWW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YWWW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XWWW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XWWW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1ZWW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1ZWW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0ZWW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0ZWW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZWW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZWW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZZWW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZZWW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YZWW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YZWW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XZWW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XZWW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1YWW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1YWW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0YWW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0YWW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WYWW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WYWW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZYWW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZYWW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YYWW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YYWW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XYWW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XYWW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1XWW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1XWW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0XWW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0XWW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WXWW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WXWW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZXWW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZXWW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YXWW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YXWW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XXWW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XXWW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_11ZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_11ZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_01ZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_01ZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W1ZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W1ZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Z1ZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Z1ZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Y1ZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Y1ZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +X1ZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +X1ZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_10ZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_10ZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_00ZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_00ZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W0ZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W0ZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Z0ZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Z0ZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Y0ZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Y0ZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +X0ZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +X0ZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1WZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1WZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0WZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0WZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WWZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WWZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZWZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZWZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YWZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YWZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XWZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XWZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1ZZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1ZZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0ZZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0ZZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZZZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZZZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YZZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YZZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XZZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XZZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1YZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1YZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0YZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0YZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WYZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WYZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZYZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZYZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YYZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YYZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XYZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XYZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1XZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1XZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0XZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0XZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WXZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WXZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZXZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZXZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YXZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YXZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XXZW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XXZW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_11YW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_11YW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_01YW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_01YW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W1YW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W1YW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Z1YW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Z1YW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Y1YW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Y1YW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +X1YW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +X1YW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_10YW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_10YW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_00YW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_00YW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W0YW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W0YW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Z0YW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Z0YW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Y0YW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Y0YW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +X0YW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +X0YW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1WYW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1WYW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0WYW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0WYW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WWYW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WWYW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZWYW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZWYW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YWYW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YWYW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XWYW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XWYW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1ZYW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1ZYW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0ZYW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0ZYW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZYW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZYW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZZYW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZZYW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YZYW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YZYW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XZYW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XZYW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1YYW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1YYW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0YYW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0YYW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WYYW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WYYW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZYYW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZYYW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YYYW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YYYW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XYYW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XYYW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1XYW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1XYW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0XYW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0XYW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WXYW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WXYW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZXYW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZXYW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YXYW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YXYW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XXYW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XXYW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_11XW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_11XW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_01XW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_01XW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W1XW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W1XW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Z1XW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Z1XW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Y1XW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Y1XW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +X1XW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +X1XW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_10XW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_10XW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_00XW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_00XW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W0XW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W0XW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Z0XW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Z0XW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Y0XW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Y0XW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +X0XW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +X0XW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1WXW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1WXW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0WXW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0WXW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WWXW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WWXW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZWXW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZWXW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YWXW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YWXW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XWXW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XWXW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1ZXW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1ZXW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0ZXW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0ZXW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZXW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZXW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZZXW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZZXW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YZXW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YZXW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XZXW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XZXW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1YXW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1YXW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0YXW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0YXW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WYXW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WYXW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZYXW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZYXW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YYXW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YYXW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XYXW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XYXW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1XXW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1XXW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0XXW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0XXW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WXXW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WXXW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZXXW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZXXW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YXXW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YXXW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XXXW( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XXXW( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_111Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_111Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_011Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_011Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W11Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W11Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z11Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z11Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Y11Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Y11Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +X11Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +X11Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_101Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_101Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_001Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_001Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W01Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W01Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z01Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z01Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Y01Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Y01Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +X01Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +X01Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1W1Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1W1Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0W1Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0W1Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WW1Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WW1Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZW1Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZW1Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YW1Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YW1Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XW1Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XW1Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1Z1Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1Z1Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0Z1Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0Z1Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZ1Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZ1Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZZ1Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZZ1Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YZ1Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YZ1Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XZ1Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XZ1Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1Y1Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1Y1Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0Y1Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0Y1Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WY1Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WY1Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZY1Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZY1Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YY1Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YY1Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XY1Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XY1Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1X1Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1X1Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0X1Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0X1Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WX1Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WX1Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZX1Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZX1Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YX1Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YX1Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XX1Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XX1Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_110Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_110Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_010Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_010Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W10Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W10Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z10Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z10Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Y10Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Y10Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +X10Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +X10Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_100Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_100Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_000Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_000Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W00Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W00Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z00Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z00Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Y00Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Y00Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +X00Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +X00Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1W0Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1W0Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0W0Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0W0Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WW0Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WW0Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZW0Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZW0Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YW0Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YW0Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XW0Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XW0Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1Z0Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1Z0Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0Z0Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0Z0Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZ0Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZ0Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZZ0Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZZ0Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YZ0Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YZ0Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XZ0Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XZ0Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1Y0Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1Y0Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0Y0Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0Y0Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WY0Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WY0Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZY0Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZY0Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YY0Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YY0Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XY0Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XY0Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1X0Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1X0Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0X0Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0X0Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WX0Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WX0Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZX0Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZX0Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YX0Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YX0Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XX0Z( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XX0Z( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_11WZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_11WZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_01WZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_01WZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W1WZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W1WZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Z1WZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Z1WZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Y1WZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Y1WZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +X1WZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +X1WZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_10WZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_10WZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_00WZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_00WZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W0WZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W0WZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Z0WZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Z0WZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Y0WZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Y0WZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +X0WZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +X0WZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1WWZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1WWZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0WWZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0WWZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WWWZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WWWZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZWWZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZWWZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YWWZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YWWZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XWWZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XWWZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1ZWZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1ZWZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0ZWZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0ZWZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZWZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZWZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZZWZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZZWZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YZWZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YZWZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XZWZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XZWZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1YWZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1YWZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0YWZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0YWZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WYWZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WYWZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZYWZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZYWZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YYWZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YYWZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XYWZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XYWZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1XWZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1XWZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0XWZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0XWZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WXWZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WXWZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZXWZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZXWZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YXWZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YXWZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XXWZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XXWZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_11ZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_11ZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_01ZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_01ZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W1ZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W1ZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z1ZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z1ZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Y1ZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Y1ZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +X1ZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +X1ZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_10ZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_10ZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_00ZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_00ZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W0ZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W0ZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z0ZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z0ZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Y0ZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Y0ZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +X0ZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +X0ZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1WZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1WZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0WZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0WZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WWZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WWZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZWZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZWZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YWZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YWZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XWZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XWZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1ZZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1ZZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0ZZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0ZZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZZZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZZZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YZZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YZZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XZZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XZZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1YZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1YZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0YZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0YZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WYZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WYZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZYZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZYZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YYZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YYZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XYZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XYZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1XZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1XZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0XZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0XZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WXZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WXZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZXZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZXZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YXZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YXZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XXZZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XXZZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_11YZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_11YZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_01YZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_01YZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W1YZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W1YZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z1YZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z1YZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Y1YZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Y1YZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +X1YZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +X1YZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_10YZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_10YZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_00YZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_00YZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W0YZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W0YZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z0YZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z0YZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Y0YZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Y0YZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +X0YZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +X0YZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1WYZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1WYZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0WYZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0WYZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WWYZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WWYZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZWYZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZWYZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YWYZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YWYZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XWYZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XWYZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1ZYZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1ZYZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0ZYZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0ZYZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZYZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZYZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZZYZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZZYZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YZYZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YZYZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XZYZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XZYZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1YYZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1YYZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0YYZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0YYZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WYYZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WYYZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZYYZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZYYZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YYYZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YYYZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XYYZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XYYZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1XYZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1XYZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0XYZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0XYZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WXYZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WXYZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZXYZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZXYZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YXYZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YXYZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XXYZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XXYZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_11XZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_11XZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_01XZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_01XZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W1XZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W1XZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z1XZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z1XZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Y1XZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Y1XZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +X1XZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +X1XZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_10XZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_10XZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_00XZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_00XZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W0XZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W0XZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z0XZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z0XZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Y0XZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Y0XZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +X0XZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +X0XZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1WXZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1WXZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0WXZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0WXZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WWXZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WWXZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZWXZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZWXZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YWXZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YWXZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XWXZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XWXZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1ZXZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1ZXZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0ZXZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0ZXZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZXZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZXZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZZXZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZZXZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YZXZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YZXZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XZXZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XZXZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1YXZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1YXZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0YXZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0YXZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WYXZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WYXZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZYXZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZYXZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YYXZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YYXZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XYXZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XYXZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1XXZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1XXZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0XXZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0XXZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WXXZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WXXZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZXXZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZXXZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YXXZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YXXZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XXXZ( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XXXZ( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_111Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_111Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_011Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_011Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W11Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W11Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z11Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z11Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y11Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y11Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +X11Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +X11Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_101Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_101Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_001Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_001Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W01Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W01Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z01Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z01Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y01Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y01Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +X01Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +X01Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1W1Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1W1Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0W1Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0W1Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WW1Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WW1Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZW1Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZW1Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YW1Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YW1Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XW1Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XW1Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1Z1Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1Z1Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0Z1Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0Z1Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZ1Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZ1Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZZ1Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZZ1Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YZ1Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YZ1Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XZ1Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XZ1Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_1Y1Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_1Y1Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_0Y1Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_0Y1Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WY1Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WY1Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZY1Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZY1Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YY1Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YY1Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +XY1Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +XY1Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_1X1Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_1X1Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_0X1Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_0X1Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WX1Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WX1Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZX1Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZX1Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YX1Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YX1Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +XX1Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +XX1Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_110Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_110Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_010Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_010Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W10Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W10Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z10Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z10Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y10Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y10Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +X10Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +X10Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_100Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_100Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_000Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_000Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W00Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W00Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z00Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z00Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y00Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y00Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +X00Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +X00Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1W0Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1W0Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0W0Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0W0Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WW0Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WW0Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZW0Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZW0Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YW0Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YW0Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XW0Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XW0Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1Z0Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1Z0Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0Z0Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0Z0Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZ0Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZ0Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZZ0Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZZ0Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YZ0Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YZ0Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XZ0Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XZ0Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_1Y0Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_1Y0Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_0Y0Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_0Y0Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WY0Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WY0Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZY0Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZY0Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YY0Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YY0Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +XY0Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +XY0Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_1X0Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_1X0Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_0X0Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_0X0Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WX0Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WX0Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZX0Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZX0Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YX0Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YX0Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +XX0Y( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +XX0Y( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_11WY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_11WY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_01WY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_01WY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W1WY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W1WY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Z1WY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Z1WY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Y1WY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Y1WY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +X1WY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +X1WY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_10WY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_10WY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_00WY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_00WY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W0WY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W0WY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Z0WY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Z0WY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Y0WY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Y0WY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +X0WY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +X0WY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1WWY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1WWY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0WWY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0WWY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WWWY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WWWY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZWWY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZWWY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YWWY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YWWY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XWWY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XWWY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1ZWY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1ZWY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0ZWY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0ZWY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZWY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZWY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZZWY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZZWY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YZWY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YZWY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XZWY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XZWY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1YWY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1YWY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0YWY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0YWY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WYWY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WYWY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZYWY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZYWY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YYWY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YYWY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XYWY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XYWY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1XWY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1XWY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0XWY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0XWY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WXWY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WXWY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZXWY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZXWY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YXWY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YXWY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XXWY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XXWY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_11ZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_11ZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_01ZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_01ZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W1ZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W1ZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z1ZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z1ZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Y1ZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Y1ZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +X1ZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +X1ZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_10ZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_10ZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_00ZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_00ZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W0ZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W0ZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z0ZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z0ZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Y0ZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Y0ZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +X0ZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +X0ZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1WZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1WZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0WZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0WZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WWZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WWZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZWZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZWZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YWZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YWZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XWZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XWZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1ZZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1ZZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0ZZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0ZZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZZZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZZZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YZZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YZZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XZZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XZZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1YZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1YZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0YZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0YZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WYZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WYZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZYZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZYZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YYZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YYZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XYZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XYZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1XZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1XZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0XZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0XZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WXZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WXZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZXZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZXZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YXZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YXZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XXZY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XXZY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_11YY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_11YY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_01YY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_01YY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W1YY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W1YY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z1YY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z1YY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y1YY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y1YY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +X1YY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +X1YY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_10YY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_10YY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_00YY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_00YY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W0YY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W0YY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z0YY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z0YY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y0YY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y0YY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +X0YY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +X0YY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1WYY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1WYY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0WYY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0WYY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WWYY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WWYY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZWYY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZWYY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YWYY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YWYY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XWYY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XWYY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1ZYY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1ZYY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0ZYY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0ZYY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZYY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZYY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZZYY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZZYY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YZYY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YZYY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XZYY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XZYY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_1YYY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_1YYY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_0YYY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_0YYY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WYYY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WYYY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZYYY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZYYY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YYYY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YYYY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +XYYY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +XYYY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_1XYY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_1XYY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_0XYY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_0XYY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WXYY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WXYY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZXYY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZXYY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YXYY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YXYY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +XXYY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +XXYY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_11XY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_11XY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_01XY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_01XY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W1XY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W1XY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z1XY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z1XY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y1XY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y1XY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +X1XY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +X1XY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_10XY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_10XY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_00XY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_00XY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W0XY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W0XY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z0XY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z0XY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y0XY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y0XY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +X0XY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +X0XY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1WXY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1WXY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0WXY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0WXY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WWXY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WWXY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZWXY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZWXY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YWXY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YWXY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XWXY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XWXY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1ZXY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1ZXY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0ZXY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0ZXY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZXY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZXY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZZXY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZZXY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YZXY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YZXY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XZXY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XZXY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_1YXY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_1YXY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_0YXY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_0YXY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WYXY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WYXY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZYXY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZYXY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YYXY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YYXY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +XYXY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +XYXY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_1XXY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_1XXY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_0XXY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_0XXY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WXXY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WXXY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZXXY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZXXY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YXXY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YXXY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +XXXY( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +XXXY( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_111X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_111X( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_111X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_111X( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_011X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_011X( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_011X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_011X( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W11X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W11X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z11X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z11X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y11X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y11X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +X11X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +X11X( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +X11X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +X11X( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_101X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_101X( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_101X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_101X( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_001X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_001X( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_001X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_001X( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W01X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W01X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z01X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z01X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y01X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y01X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +X01X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +X01X( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +X01X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +X01X( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1W1X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1W1X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0W1X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0W1X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WW1X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WW1X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZW1X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZW1X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YW1X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YW1X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XW1X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XW1X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1Z1X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1Z1X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0Z1X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0Z1X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZ1X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZ1X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZZ1X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZZ1X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YZ1X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YZ1X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XZ1X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XZ1X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_1Y1X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_1Y1X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_0Y1X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_0Y1X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WY1X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WY1X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZY1X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZY1X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YY1X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YY1X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +XY1X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +XY1X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_1X1X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_1X1X( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_1X1X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_1X1X( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_0X1X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_0X1X( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_0X1X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_0X1X( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WX1X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WX1X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZX1X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZX1X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YX1X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YX1X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +XX1X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +XX1X( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +XX1X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +XX1X( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_110X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_110X( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_110X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_110X( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_010X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_010X( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_010X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_010X( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W10X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W10X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z10X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z10X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y10X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y10X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +X10X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +X10X( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +X10X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +X10X( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_100X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_100X( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_100X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_100X( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_000X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_000X( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_000X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_000X( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W00X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W00X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z00X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z00X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y00X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y00X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +X00X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +X00X( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +X00X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +X00X( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1W0X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1W0X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0W0X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0W0X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WW0X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WW0X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZW0X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZW0X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YW0X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YW0X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XW0X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XW0X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1Z0X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1Z0X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0Z0X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0Z0X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZ0X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZ0X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZZ0X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZZ0X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YZ0X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YZ0X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XZ0X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XZ0X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_1Y0X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_1Y0X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_0Y0X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_0Y0X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WY0X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WY0X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZY0X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZY0X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YY0X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YY0X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +XY0X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +XY0X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_1X0X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_1X0X( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_1X0X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_1X0X( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_0X0X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_0X0X( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_0X0X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_0X0X( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WX0X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WX0X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZX0X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZX0X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YX0X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YX0X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +XX0X( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +XX0X( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +XX0X( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +XX0X( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_11WX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_11WX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_01WX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_01WX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W1WX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W1WX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Z1WX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Z1WX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Y1WX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Y1WX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +X1WX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +X1WX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_10WX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_10WX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_00WX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_00WX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W0WX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W0WX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Z0WX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Z0WX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +Y0WX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +Y0WX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +X0WX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +X0WX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1WWX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1WWX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0WWX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0WWX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WWWX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WWWX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZWWX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZWWX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YWWX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YWWX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XWWX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XWWX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1ZWX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1ZWX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0ZWX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0ZWX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZWX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZWX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZZWX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZZWX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YZWX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YZWX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XZWX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XZWX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1YWX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1YWX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0YWX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0YWX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WYWX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WYWX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZYWX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZYWX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YYWX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YYWX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XYWX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XYWX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1XWX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1XWX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0XWX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0XWX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WXWX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WXWX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZXWX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZXWX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YXWX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YXWX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XXWX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XXWX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_11ZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_11ZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_01ZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_01ZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W1ZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W1ZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z1ZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z1ZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Y1ZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Y1ZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +X1ZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +X1ZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_10ZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_10ZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_00ZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_00ZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W0ZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W0ZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z0ZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z0ZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Y0ZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Y0ZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +X0ZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +X0ZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1WZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1WZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0WZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0WZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WWZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WWZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZWZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZWZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YWZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YWZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XWZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XWZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1ZZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1ZZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0ZZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0ZZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZZZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZZZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YZZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YZZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XZZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XZZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1YZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1YZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0YZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0YZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WYZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WYZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZYZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZYZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YYZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YYZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XYZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XYZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1XZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1XZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0XZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0XZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WXZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WXZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZXZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZXZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YXZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YXZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XXZX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XXZX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_11YX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_11YX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_01YX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_01YX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W1YX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W1YX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z1YX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z1YX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y1YX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y1YX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +X1YX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +X1YX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_10YX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_10YX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_00YX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_00YX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W0YX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W0YX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z0YX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z0YX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y0YX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y0YX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +X0YX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +X0YX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1WYX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1WYX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0WYX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0WYX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WWYX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WWYX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZWYX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZWYX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YWYX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YWYX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XWYX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XWYX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1ZYX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1ZYX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0ZYX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0ZYX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZYX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZYX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZZYX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZZYX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YZYX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YZYX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XZYX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XZYX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_1YYX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_1YYX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_0YYX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_0YYX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WYYX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WYYX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZYYX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZYYX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YYYX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YYYX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +XYYX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +XYYX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_1XYX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_1XYX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_0XYX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_0XYX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WXYX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WXYX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZXYX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZXYX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YXYX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YXYX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +XXYX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +XXYX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_11XX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_11XX( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_11XX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_11XX( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_01XX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_01XX( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_01XX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_01XX( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W1XX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W1XX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z1XX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z1XX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y1XX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y1XX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +X1XX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +X1XX( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +X1XX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +X1XX( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_10XX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_10XX( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_10XX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_10XX( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_00XX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_00XX( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_00XX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_00XX( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +W0XX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +W0XX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +Z0XX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +Z0XX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +Y0XX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +Y0XX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +X0XX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +X0XX( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +X0XX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +X0XX( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_1WXX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_1WXX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +_0WXX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +_0WXX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WWXX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WWXX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +ZWXX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +ZWXX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +YWXX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +YWXX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +XWXX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +XWXX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_1ZXX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_1ZXX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +_0ZXX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +_0ZXX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WZXX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WZXX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZZXX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZZXX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +YZXX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +YZXX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +XZXX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +XZXX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_1YXX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_1YXX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +_0YXX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +_0YXX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WYXX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WYXX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZYXX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZYXX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YYXX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YYXX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +XYXX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +XYXX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_1XXX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_1XXX( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_1XXX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_1XXX( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +_0XXX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +_0XXX( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +_0XXX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +_0XXX( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > const &>::type +WXXX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=4, + qvm_detail::sw_ > > > > &>::type +WXXX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > const &>::type +ZXXX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=3, + qvm_detail::sw_ > > > > &>::type +ZXXX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > const &>::type +YXXX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=2, + qvm_detail::sw_ > > > > &>::type +YXXX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > const &>::type +XXXX( V const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > const &>::type +XXXX( S const & a ) + { + return reinterpret_cast > > > > const &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && vec_traits::dim>=1, + qvm_detail::sw_ > > > > &>::type +XXXX( V & a ) + { + return reinterpret_cast > > > > &>(a); + } +template +BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_scalar::value, + qvm_detail::sws_ > > > > &>::type +XXXX( S & a ) + { + return reinterpret_cast > > > > &>(a); + } +} } + +#endif diff --git a/inst/include/boost/qvm/gen/vec_operations2.hpp b/inst/include/boost/qvm/gen/vec_operations2.hpp new file mode 100644 index 000000000..b52dee2b9 --- /dev/null +++ b/inst/include/boost/qvm/gen/vec_operations2.hpp @@ -0,0 +1,627 @@ +#ifndef BOOST_QVM_GEN_VEC_OPERATIONS2_HPP_INCLUDED +#define BOOST_QVM_GEN_VEC_OPERATIONS2_HPP_INCLUDED + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// This file was generated by a program. Do not edit manually. + +#include +#include +#include +#include +#include +#include +#include + +namespace boost { namespace qvm { + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + vec_traits::dim==2 && vec_traits::dim==2, + deduce_vec2 >::type +operator+( A const & a, B const & b ) + { + typedef typename deduce_vec2::type R; + BOOST_QVM_STATIC_ASSERT(vec_traits::dim==2); + R r; + write_vec_element<0>(r,vec_traits::template read_element<0>(a)+vec_traits::template read_element<0>(b)); + write_vec_element<1>(r,vec_traits::template read_element<1>(a)+vec_traits::template read_element<1>(b)); + return r; + } + +namespace +sfinae + { + using ::boost::qvm::operator+; + } + +namespace +qvm_detail + { + template + struct plus_vv_defined; + + template <> + struct + plus_vv_defined<2> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + vec_traits::dim==2 && vec_traits::dim==2, + deduce_vec2 >::type +operator-( A const & a, B const & b ) + { + typedef typename deduce_vec2::type R; + BOOST_QVM_STATIC_ASSERT(vec_traits::dim==2); + R r; + write_vec_element<0>(r,vec_traits::template read_element<0>(a)-vec_traits::template read_element<0>(b)); + write_vec_element<1>(r,vec_traits::template read_element<1>(a)-vec_traits::template read_element<1>(b)); + return r; + } + +namespace +sfinae + { + using ::boost::qvm::operator-; + } + +namespace +qvm_detail + { + template + struct minus_vv_defined; + + template <> + struct + minus_vv_defined<2> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + vec_traits::dim==2 && vec_traits::dim==2, + A &>::type +operator+=( A & a, B const & b ) + { + write_vec_element<0>(a,vec_traits::template read_element<0>(a)+vec_traits::template read_element<0>(b)); + write_vec_element<1>(a,vec_traits::template read_element<1>(a)+vec_traits::template read_element<1>(b)); + return a; + } + +namespace +sfinae + { + using ::boost::qvm::operator+=; + } + +namespace +qvm_detail + { + template + struct plus_eq_vv_defined; + + template <> + struct + plus_eq_vv_defined<2> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + vec_traits::dim==2 && vec_traits::dim==2, + A &>::type +operator-=( A & a, B const & b ) + { + write_vec_element<0>(a,vec_traits::template read_element<0>(a)-vec_traits::template read_element<0>(b)); + write_vec_element<1>(a,vec_traits::template read_element<1>(a)-vec_traits::template read_element<1>(b)); + return a; + } + +namespace +sfinae + { + using ::boost::qvm::operator-=; + } + +namespace +qvm_detail + { + template + struct minus_eq_vv_defined; + + template <> + struct + minus_eq_vv_defined<2> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + vec_traits::dim==2 && is_scalar::value, + deduce_vec2::dim> >::type +operator*( A const & a, B b ) + { + typedef typename deduce_vec2::dim>::type R; + R r; + write_vec_element<0>(r,vec_traits::template read_element<0>(a)*b); + write_vec_element<1>(r,vec_traits::template read_element<1>(a)*b); + return r; + } + +namespace +sfinae + { + using ::boost::qvm::operator*; + } + +namespace +qvm_detail + { + template + struct mul_vs_defined; + + template <> + struct + mul_vs_defined<2> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_scalar::value && vec_traits::dim==2, + deduce_vec2::dim> >::type +operator*( A a, B const & b ) + { + typedef typename deduce_vec2::dim>::type R; + R r; + write_vec_element<0>(r,a*vec_traits::template read_element<0>(b)); + write_vec_element<1>(r,a*vec_traits::template read_element<1>(b)); + return r; + } + +namespace +sfinae + { + using ::boost::qvm::operator*; + } + +namespace +qvm_detail + { + template + struct mul_sv_defined; + + template <> + struct + mul_sv_defined<2> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + vec_traits::dim==2 && is_scalar::value, + A &>::type +operator*=( A & a, B b ) + { + write_vec_element<0>(a, vec_traits::template read_element<0>(a)*b); + write_vec_element<1>(a, vec_traits::template read_element<1>(a)*b); + return a; + } + +namespace +sfinae + { + using ::boost::qvm::operator*=; + } + +namespace +qvm_detail + { + template + struct mul_eq_vs_defined; + + template <> + struct + mul_eq_vs_defined<2> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + vec_traits::dim==2 && is_scalar::value, + deduce_vec2::dim> >::type +operator/( A const & a, B b ) + { + typedef typename deduce_vec2::dim>::type R; + R r; + write_vec_element<0>(r,vec_traits::template read_element<0>(a)/b); + write_vec_element<1>(r,vec_traits::template read_element<1>(a)/b); + return r; + } + +namespace +sfinae + { + using ::boost::qvm::operator/; + } + +namespace +qvm_detail + { + template + struct div_vs_defined; + + template <> + struct + div_vs_defined<2> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + vec_traits::dim==2 && is_scalar::value, + A &>::type +operator/=( A & a, B b ) + { + write_vec_element<0>(a, vec_traits::template read_element<0>(a)/b); + write_vec_element<1>(a, vec_traits::template read_element<1>(a)/b); + return a; + } + +namespace +sfinae + { + using ::boost::qvm::operator/=; + } + +namespace +qvm_detail + { + template + struct div_eq_vs_defined; + + template <> + struct + div_eq_vs_defined<2> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_vec::value && + vec_traits::dim==2 && vec_traits::dim==2, + R>::type +convert_to( A const & a ) + { + R r; + write_vec_element<0>(r,vec_traits::template read_element<0>(a)); + write_vec_element<1>(r,vec_traits::template read_element<1>(a)); + return r; + } + +namespace +sfinae + { + using ::boost::qvm::convert_to; + } + +namespace +qvm_detail + { + template + struct convert_to_v_defined; + + template <> + struct + convert_to_v_defined<2> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + vec_traits::dim==2 && vec_traits::dim==2, +bool>::type +operator==( A const & a, B const & b ) + { + return + vec_traits::template read_element<0>(a)==vec_traits::template read_element<0>(b) && + vec_traits::template read_element<1>(a)==vec_traits::template read_element<1>(b); + } + +namespace +sfinae + { + using ::boost::qvm::operator==; + } + +namespace +qvm_detail + { + template + struct eq_vv_defined; + + template <> + struct + eq_vv_defined<2> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + vec_traits::dim==2 && vec_traits::dim==2, +bool>::type +operator!=( A const & a, B const & b ) + { + return + !(vec_traits::template read_element<0>(a)==vec_traits::template read_element<0>(b)) || + !(vec_traits::template read_element<1>(a)==vec_traits::template read_element<1>(b)); + } + +namespace +sfinae + { + using ::boost::qvm::operator!=; + } + +namespace +qvm_detail + { + template + struct neq_vv_defined; + + template <> + struct + neq_vv_defined<2> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + vec_traits::dim==2, + deduce_vec >::type +operator-( A const & a ) + { + typedef typename deduce_vec::type R; + R r; + write_vec_element<0>(r,-vec_traits::template read_element<0>(a)); + write_vec_element<1>(r,-vec_traits::template read_element<1>(a)); + return r; + } + +namespace +sfinae + { + using ::boost::qvm::operator-; + } + +namespace +qvm_detail + { + template + struct minus_v_defined; + + template <> + struct + minus_v_defined<2> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_vec::value && vec_traits::dim==2, + typename vec_traits::scalar_type>::type +mag( A const & a ) + { + typedef typename vec_traits::scalar_type T; + T const a0=vec_traits::template read_element<0>(a); + T const a1=vec_traits::template read_element<1>(a); + T const m2=a0*a0+a1*a1; + T const mag=sqrt(m2); + return mag; + } + +namespace +sfinae + { + using ::boost::qvm::mag; + } + +namespace +qvm_detail + { + template + struct mag_v_defined; + + template <> + struct + mag_v_defined<2> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_vec::value && vec_traits::dim==2, + typename vec_traits::scalar_type>::type +mag_sqr( A const & a ) + { + typedef typename vec_traits::scalar_type T; + T const a0=vec_traits::template read_element<0>(a); + T const a1=vec_traits::template read_element<1>(a); + T const m2=a0*a0+a1*a1; + return m2; + } + +namespace +sfinae + { + using ::boost::qvm::mag_sqr; + } + +namespace +qvm_detail + { + template + struct mag_sqr_v_defined; + + template <> + struct + mag_sqr_v_defined<2> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + vec_traits::dim==2, + deduce_vec >::type +normalized( A const & a ) + { + typedef typename vec_traits::scalar_type T; + T const a0=vec_traits::template read_element<0>(a); + T const a1=vec_traits::template read_element<1>(a); + T const m2=a0*a0+a1*a1; + if( m2==scalar_traits::scalar_type>::value(0) ) + BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error()); + T const rm=scalar_traits::value(1)/sqrt(m2); + typedef typename deduce_vec::type R; + R r; + write_vec_element<0>(r,a0*rm); + write_vec_element<1>(r,a1*rm); + return r; + } + +namespace +sfinae + { + using ::boost::qvm::normalized; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + vec_traits::dim==2, + void>::type +normalize( A & a ) + { + typedef typename vec_traits::scalar_type T; + T const a0=vec_traits::template read_element<0>(a); + T const a1=vec_traits::template read_element<1>(a); + T const m2=a0*a0+a1*a1; + if( m2==scalar_traits::scalar_type>::value(0) ) + BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error()); + T const rm=scalar_traits::value(1)/sqrt(m2); + write_vec_element<0>(a,vec_traits::template read_element<0>(a)*rm); + write_vec_element<1>(a,vec_traits::template read_element<1>(a)*rm); + } + +namespace +sfinae + { + using ::boost::qvm::normalize; + } + +namespace +qvm_detail + { + template + struct normalize_v_defined; + + template <> + struct + normalize_v_defined<2> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + vec_traits::dim==2 && vec_traits::dim==2, + deduce_scalar::scalar_type,typename vec_traits::scalar_type> >::type +dot( A const & a, B const & b ) + { + typedef typename vec_traits::scalar_type Ta; + typedef typename vec_traits::scalar_type Tb; + typedef typename deduce_scalar::type Tr; + Ta const a0=vec_traits::template read_element<0>(a); + Ta const a1=vec_traits::template read_element<1>(a); + Tb const b0=vec_traits::template read_element<0>(b); + Tb const b1=vec_traits::template read_element<1>(b); + Tr const dot=a0*b0+a1*b1; + return dot; + } + +namespace +sfinae + { + using ::boost::qvm::dot; + } + +namespace +qvm_detail + { + template + struct dot_vv_defined; + + template <> + struct + dot_vv_defined<2> + { + static bool const value=true; + }; + } + +} } + +#endif diff --git a/inst/include/boost/qvm/gen/vec_operations3.hpp b/inst/include/boost/qvm/gen/vec_operations3.hpp new file mode 100644 index 000000000..53b3dd6ae --- /dev/null +++ b/inst/include/boost/qvm/gen/vec_operations3.hpp @@ -0,0 +1,648 @@ +#ifndef BOOST_QVM_GEN_VEC_OPERATIONS3_HPP_INCLUDED +#define BOOST_QVM_GEN_VEC_OPERATIONS3_HPP_INCLUDED + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// This file was generated by a program. Do not edit manually. + +#include +#include +#include +#include +#include +#include +#include + +namespace boost { namespace qvm { + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + vec_traits::dim==3 && vec_traits::dim==3, + deduce_vec2 >::type +operator+( A const & a, B const & b ) + { + typedef typename deduce_vec2::type R; + BOOST_QVM_STATIC_ASSERT(vec_traits::dim==3); + R r; + write_vec_element<0>(r,vec_traits::template read_element<0>(a)+vec_traits::template read_element<0>(b)); + write_vec_element<1>(r,vec_traits::template read_element<1>(a)+vec_traits::template read_element<1>(b)); + write_vec_element<2>(r,vec_traits::template read_element<2>(a)+vec_traits::template read_element<2>(b)); + return r; + } + +namespace +sfinae + { + using ::boost::qvm::operator+; + } + +namespace +qvm_detail + { + template + struct plus_vv_defined; + + template <> + struct + plus_vv_defined<3> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + vec_traits::dim==3 && vec_traits::dim==3, + deduce_vec2 >::type +operator-( A const & a, B const & b ) + { + typedef typename deduce_vec2::type R; + BOOST_QVM_STATIC_ASSERT(vec_traits::dim==3); + R r; + write_vec_element<0>(r,vec_traits::template read_element<0>(a)-vec_traits::template read_element<0>(b)); + write_vec_element<1>(r,vec_traits::template read_element<1>(a)-vec_traits::template read_element<1>(b)); + write_vec_element<2>(r,vec_traits::template read_element<2>(a)-vec_traits::template read_element<2>(b)); + return r; + } + +namespace +sfinae + { + using ::boost::qvm::operator-; + } + +namespace +qvm_detail + { + template + struct minus_vv_defined; + + template <> + struct + minus_vv_defined<3> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + vec_traits::dim==3 && vec_traits::dim==3, + A &>::type +operator+=( A & a, B const & b ) + { + write_vec_element<0>(a,vec_traits::template read_element<0>(a)+vec_traits::template read_element<0>(b)); + write_vec_element<1>(a,vec_traits::template read_element<1>(a)+vec_traits::template read_element<1>(b)); + write_vec_element<2>(a,vec_traits::template read_element<2>(a)+vec_traits::template read_element<2>(b)); + return a; + } + +namespace +sfinae + { + using ::boost::qvm::operator+=; + } + +namespace +qvm_detail + { + template + struct plus_eq_vv_defined; + + template <> + struct + plus_eq_vv_defined<3> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + vec_traits::dim==3 && vec_traits::dim==3, + A &>::type +operator-=( A & a, B const & b ) + { + write_vec_element<0>(a,vec_traits::template read_element<0>(a)-vec_traits::template read_element<0>(b)); + write_vec_element<1>(a,vec_traits::template read_element<1>(a)-vec_traits::template read_element<1>(b)); + write_vec_element<2>(a,vec_traits::template read_element<2>(a)-vec_traits::template read_element<2>(b)); + return a; + } + +namespace +sfinae + { + using ::boost::qvm::operator-=; + } + +namespace +qvm_detail + { + template + struct minus_eq_vv_defined; + + template <> + struct + minus_eq_vv_defined<3> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + vec_traits::dim==3 && is_scalar::value, + deduce_vec2::dim> >::type +operator*( A const & a, B b ) + { + typedef typename deduce_vec2::dim>::type R; + R r; + write_vec_element<0>(r,vec_traits::template read_element<0>(a)*b); + write_vec_element<1>(r,vec_traits::template read_element<1>(a)*b); + write_vec_element<2>(r,vec_traits::template read_element<2>(a)*b); + return r; + } + +namespace +sfinae + { + using ::boost::qvm::operator*; + } + +namespace +qvm_detail + { + template + struct mul_vs_defined; + + template <> + struct + mul_vs_defined<3> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_scalar::value && vec_traits::dim==3, + deduce_vec2::dim> >::type +operator*( A a, B const & b ) + { + typedef typename deduce_vec2::dim>::type R; + R r; + write_vec_element<0>(r,a*vec_traits::template read_element<0>(b)); + write_vec_element<1>(r,a*vec_traits::template read_element<1>(b)); + write_vec_element<2>(r,a*vec_traits::template read_element<2>(b)); + return r; + } + +namespace +sfinae + { + using ::boost::qvm::operator*; + } + +namespace +qvm_detail + { + template + struct mul_sv_defined; + + template <> + struct + mul_sv_defined<3> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + vec_traits::dim==3 && is_scalar::value, + A &>::type +operator*=( A & a, B b ) + { + write_vec_element<0>(a, vec_traits::template read_element<0>(a)*b); + write_vec_element<1>(a, vec_traits::template read_element<1>(a)*b); + write_vec_element<2>(a, vec_traits::template read_element<2>(a)*b); + return a; + } + +namespace +sfinae + { + using ::boost::qvm::operator*=; + } + +namespace +qvm_detail + { + template + struct mul_eq_vs_defined; + + template <> + struct + mul_eq_vs_defined<3> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + vec_traits::dim==3 && is_scalar::value, + deduce_vec2::dim> >::type +operator/( A const & a, B b ) + { + typedef typename deduce_vec2::dim>::type R; + R r; + write_vec_element<0>(r,vec_traits::template read_element<0>(a)/b); + write_vec_element<1>(r,vec_traits::template read_element<1>(a)/b); + write_vec_element<2>(r,vec_traits::template read_element<2>(a)/b); + return r; + } + +namespace +sfinae + { + using ::boost::qvm::operator/; + } + +namespace +qvm_detail + { + template + struct div_vs_defined; + + template <> + struct + div_vs_defined<3> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + vec_traits::dim==3 && is_scalar::value, + A &>::type +operator/=( A & a, B b ) + { + write_vec_element<0>(a, vec_traits::template read_element<0>(a)/b); + write_vec_element<1>(a, vec_traits::template read_element<1>(a)/b); + write_vec_element<2>(a, vec_traits::template read_element<2>(a)/b); + return a; + } + +namespace +sfinae + { + using ::boost::qvm::operator/=; + } + +namespace +qvm_detail + { + template + struct div_eq_vs_defined; + + template <> + struct + div_eq_vs_defined<3> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_vec::value && + vec_traits::dim==3 && vec_traits::dim==3, + R>::type +convert_to( A const & a ) + { + R r; + write_vec_element<0>(r,vec_traits::template read_element<0>(a)); + write_vec_element<1>(r,vec_traits::template read_element<1>(a)); + write_vec_element<2>(r,vec_traits::template read_element<2>(a)); + return r; + } + +namespace +sfinae + { + using ::boost::qvm::convert_to; + } + +namespace +qvm_detail + { + template + struct convert_to_v_defined; + + template <> + struct + convert_to_v_defined<3> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + vec_traits::dim==3 && vec_traits::dim==3, +bool>::type +operator==( A const & a, B const & b ) + { + return + vec_traits::template read_element<0>(a)==vec_traits::template read_element<0>(b) && + vec_traits::template read_element<1>(a)==vec_traits::template read_element<1>(b) && + vec_traits::template read_element<2>(a)==vec_traits::template read_element<2>(b); + } + +namespace +sfinae + { + using ::boost::qvm::operator==; + } + +namespace +qvm_detail + { + template + struct eq_vv_defined; + + template <> + struct + eq_vv_defined<3> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + vec_traits::dim==3 && vec_traits::dim==3, +bool>::type +operator!=( A const & a, B const & b ) + { + return + !(vec_traits::template read_element<0>(a)==vec_traits::template read_element<0>(b)) || + !(vec_traits::template read_element<1>(a)==vec_traits::template read_element<1>(b)) || + !(vec_traits::template read_element<2>(a)==vec_traits::template read_element<2>(b)); + } + +namespace +sfinae + { + using ::boost::qvm::operator!=; + } + +namespace +qvm_detail + { + template + struct neq_vv_defined; + + template <> + struct + neq_vv_defined<3> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + vec_traits::dim==3, + deduce_vec >::type +operator-( A const & a ) + { + typedef typename deduce_vec::type R; + R r; + write_vec_element<0>(r,-vec_traits::template read_element<0>(a)); + write_vec_element<1>(r,-vec_traits::template read_element<1>(a)); + write_vec_element<2>(r,-vec_traits::template read_element<2>(a)); + return r; + } + +namespace +sfinae + { + using ::boost::qvm::operator-; + } + +namespace +qvm_detail + { + template + struct minus_v_defined; + + template <> + struct + minus_v_defined<3> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_vec::value && vec_traits::dim==3, + typename vec_traits::scalar_type>::type +mag( A const & a ) + { + typedef typename vec_traits::scalar_type T; + T const a0=vec_traits::template read_element<0>(a); + T const a1=vec_traits::template read_element<1>(a); + T const a2=vec_traits::template read_element<2>(a); + T const m2=a0*a0+a1*a1+a2*a2; + T const mag=sqrt(m2); + return mag; + } + +namespace +sfinae + { + using ::boost::qvm::mag; + } + +namespace +qvm_detail + { + template + struct mag_v_defined; + + template <> + struct + mag_v_defined<3> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_vec::value && vec_traits::dim==3, + typename vec_traits::scalar_type>::type +mag_sqr( A const & a ) + { + typedef typename vec_traits::scalar_type T; + T const a0=vec_traits::template read_element<0>(a); + T const a1=vec_traits::template read_element<1>(a); + T const a2=vec_traits::template read_element<2>(a); + T const m2=a0*a0+a1*a1+a2*a2; + return m2; + } + +namespace +sfinae + { + using ::boost::qvm::mag_sqr; + } + +namespace +qvm_detail + { + template + struct mag_sqr_v_defined; + + template <> + struct + mag_sqr_v_defined<3> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + vec_traits::dim==3, + deduce_vec >::type +normalized( A const & a ) + { + typedef typename vec_traits::scalar_type T; + T const a0=vec_traits::template read_element<0>(a); + T const a1=vec_traits::template read_element<1>(a); + T const a2=vec_traits::template read_element<2>(a); + T const m2=a0*a0+a1*a1+a2*a2; + if( m2==scalar_traits::scalar_type>::value(0) ) + BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error()); + T const rm=scalar_traits::value(1)/sqrt(m2); + typedef typename deduce_vec::type R; + R r; + write_vec_element<0>(r,a0*rm); + write_vec_element<1>(r,a1*rm); + write_vec_element<2>(r,a2*rm); + return r; + } + +namespace +sfinae + { + using ::boost::qvm::normalized; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + vec_traits::dim==3, + void>::type +normalize( A & a ) + { + typedef typename vec_traits::scalar_type T; + T const a0=vec_traits::template read_element<0>(a); + T const a1=vec_traits::template read_element<1>(a); + T const a2=vec_traits::template read_element<2>(a); + T const m2=a0*a0+a1*a1+a2*a2; + if( m2==scalar_traits::scalar_type>::value(0) ) + BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error()); + T const rm=scalar_traits::value(1)/sqrt(m2); + write_vec_element<0>(a,vec_traits::template read_element<0>(a)*rm); + write_vec_element<1>(a,vec_traits::template read_element<1>(a)*rm); + write_vec_element<2>(a,vec_traits::template read_element<2>(a)*rm); + } + +namespace +sfinae + { + using ::boost::qvm::normalize; + } + +namespace +qvm_detail + { + template + struct normalize_v_defined; + + template <> + struct + normalize_v_defined<3> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + vec_traits::dim==3 && vec_traits::dim==3, + deduce_scalar::scalar_type,typename vec_traits::scalar_type> >::type +dot( A const & a, B const & b ) + { + typedef typename vec_traits::scalar_type Ta; + typedef typename vec_traits::scalar_type Tb; + typedef typename deduce_scalar::type Tr; + Ta const a0=vec_traits::template read_element<0>(a); + Ta const a1=vec_traits::template read_element<1>(a); + Ta const a2=vec_traits::template read_element<2>(a); + Tb const b0=vec_traits::template read_element<0>(b); + Tb const b1=vec_traits::template read_element<1>(b); + Tb const b2=vec_traits::template read_element<2>(b); + Tr const dot=a0*b0+a1*b1+a2*b2; + return dot; + } + +namespace +sfinae + { + using ::boost::qvm::dot; + } + +namespace +qvm_detail + { + template + struct dot_vv_defined; + + template <> + struct + dot_vv_defined<3> + { + static bool const value=true; + }; + } + +} } + +#endif diff --git a/inst/include/boost/qvm/gen/vec_operations4.hpp b/inst/include/boost/qvm/gen/vec_operations4.hpp new file mode 100644 index 000000000..e492a3bda --- /dev/null +++ b/inst/include/boost/qvm/gen/vec_operations4.hpp @@ -0,0 +1,669 @@ +#ifndef BOOST_QVM_GEN_VEC_OPERATIONS4_HPP_INCLUDED +#define BOOST_QVM_GEN_VEC_OPERATIONS4_HPP_INCLUDED + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// This file was generated by a program. Do not edit manually. + +#include +#include +#include +#include +#include +#include +#include + +namespace boost { namespace qvm { + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + vec_traits::dim==4 && vec_traits::dim==4, + deduce_vec2 >::type +operator+( A const & a, B const & b ) + { + typedef typename deduce_vec2::type R; + BOOST_QVM_STATIC_ASSERT(vec_traits::dim==4); + R r; + write_vec_element<0>(r,vec_traits::template read_element<0>(a)+vec_traits::template read_element<0>(b)); + write_vec_element<1>(r,vec_traits::template read_element<1>(a)+vec_traits::template read_element<1>(b)); + write_vec_element<2>(r,vec_traits::template read_element<2>(a)+vec_traits::template read_element<2>(b)); + write_vec_element<3>(r,vec_traits::template read_element<3>(a)+vec_traits::template read_element<3>(b)); + return r; + } + +namespace +sfinae + { + using ::boost::qvm::operator+; + } + +namespace +qvm_detail + { + template + struct plus_vv_defined; + + template <> + struct + plus_vv_defined<4> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + vec_traits::dim==4 && vec_traits::dim==4, + deduce_vec2 >::type +operator-( A const & a, B const & b ) + { + typedef typename deduce_vec2::type R; + BOOST_QVM_STATIC_ASSERT(vec_traits::dim==4); + R r; + write_vec_element<0>(r,vec_traits::template read_element<0>(a)-vec_traits::template read_element<0>(b)); + write_vec_element<1>(r,vec_traits::template read_element<1>(a)-vec_traits::template read_element<1>(b)); + write_vec_element<2>(r,vec_traits::template read_element<2>(a)-vec_traits::template read_element<2>(b)); + write_vec_element<3>(r,vec_traits::template read_element<3>(a)-vec_traits::template read_element<3>(b)); + return r; + } + +namespace +sfinae + { + using ::boost::qvm::operator-; + } + +namespace +qvm_detail + { + template + struct minus_vv_defined; + + template <> + struct + minus_vv_defined<4> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + vec_traits::dim==4 && vec_traits::dim==4, + A &>::type +operator+=( A & a, B const & b ) + { + write_vec_element<0>(a,vec_traits::template read_element<0>(a)+vec_traits::template read_element<0>(b)); + write_vec_element<1>(a,vec_traits::template read_element<1>(a)+vec_traits::template read_element<1>(b)); + write_vec_element<2>(a,vec_traits::template read_element<2>(a)+vec_traits::template read_element<2>(b)); + write_vec_element<3>(a,vec_traits::template read_element<3>(a)+vec_traits::template read_element<3>(b)); + return a; + } + +namespace +sfinae + { + using ::boost::qvm::operator+=; + } + +namespace +qvm_detail + { + template + struct plus_eq_vv_defined; + + template <> + struct + plus_eq_vv_defined<4> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + vec_traits::dim==4 && vec_traits::dim==4, + A &>::type +operator-=( A & a, B const & b ) + { + write_vec_element<0>(a,vec_traits::template read_element<0>(a)-vec_traits::template read_element<0>(b)); + write_vec_element<1>(a,vec_traits::template read_element<1>(a)-vec_traits::template read_element<1>(b)); + write_vec_element<2>(a,vec_traits::template read_element<2>(a)-vec_traits::template read_element<2>(b)); + write_vec_element<3>(a,vec_traits::template read_element<3>(a)-vec_traits::template read_element<3>(b)); + return a; + } + +namespace +sfinae + { + using ::boost::qvm::operator-=; + } + +namespace +qvm_detail + { + template + struct minus_eq_vv_defined; + + template <> + struct + minus_eq_vv_defined<4> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + vec_traits::dim==4 && is_scalar::value, + deduce_vec2::dim> >::type +operator*( A const & a, B b ) + { + typedef typename deduce_vec2::dim>::type R; + R r; + write_vec_element<0>(r,vec_traits::template read_element<0>(a)*b); + write_vec_element<1>(r,vec_traits::template read_element<1>(a)*b); + write_vec_element<2>(r,vec_traits::template read_element<2>(a)*b); + write_vec_element<3>(r,vec_traits::template read_element<3>(a)*b); + return r; + } + +namespace +sfinae + { + using ::boost::qvm::operator*; + } + +namespace +qvm_detail + { + template + struct mul_vs_defined; + + template <> + struct + mul_vs_defined<4> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_scalar::value && vec_traits::dim==4, + deduce_vec2::dim> >::type +operator*( A a, B const & b ) + { + typedef typename deduce_vec2::dim>::type R; + R r; + write_vec_element<0>(r,a*vec_traits::template read_element<0>(b)); + write_vec_element<1>(r,a*vec_traits::template read_element<1>(b)); + write_vec_element<2>(r,a*vec_traits::template read_element<2>(b)); + write_vec_element<3>(r,a*vec_traits::template read_element<3>(b)); + return r; + } + +namespace +sfinae + { + using ::boost::qvm::operator*; + } + +namespace +qvm_detail + { + template + struct mul_sv_defined; + + template <> + struct + mul_sv_defined<4> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + vec_traits::dim==4 && is_scalar::value, + A &>::type +operator*=( A & a, B b ) + { + write_vec_element<0>(a, vec_traits::template read_element<0>(a)*b); + write_vec_element<1>(a, vec_traits::template read_element<1>(a)*b); + write_vec_element<2>(a, vec_traits::template read_element<2>(a)*b); + write_vec_element<3>(a, vec_traits::template read_element<3>(a)*b); + return a; + } + +namespace +sfinae + { + using ::boost::qvm::operator*=; + } + +namespace +qvm_detail + { + template + struct mul_eq_vs_defined; + + template <> + struct + mul_eq_vs_defined<4> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + vec_traits::dim==4 && is_scalar::value, + deduce_vec2::dim> >::type +operator/( A const & a, B b ) + { + typedef typename deduce_vec2::dim>::type R; + R r; + write_vec_element<0>(r,vec_traits::template read_element<0>(a)/b); + write_vec_element<1>(r,vec_traits::template read_element<1>(a)/b); + write_vec_element<2>(r,vec_traits::template read_element<2>(a)/b); + write_vec_element<3>(r,vec_traits::template read_element<3>(a)/b); + return r; + } + +namespace +sfinae + { + using ::boost::qvm::operator/; + } + +namespace +qvm_detail + { + template + struct div_vs_defined; + + template <> + struct + div_vs_defined<4> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + vec_traits::dim==4 && is_scalar::value, + A &>::type +operator/=( A & a, B b ) + { + write_vec_element<0>(a, vec_traits::template read_element<0>(a)/b); + write_vec_element<1>(a, vec_traits::template read_element<1>(a)/b); + write_vec_element<2>(a, vec_traits::template read_element<2>(a)/b); + write_vec_element<3>(a, vec_traits::template read_element<3>(a)/b); + return a; + } + +namespace +sfinae + { + using ::boost::qvm::operator/=; + } + +namespace +qvm_detail + { + template + struct div_eq_vs_defined; + + template <> + struct + div_eq_vs_defined<4> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_vec::value && + vec_traits::dim==4 && vec_traits::dim==4, + R>::type +convert_to( A const & a ) + { + R r; + write_vec_element<0>(r,vec_traits::template read_element<0>(a)); + write_vec_element<1>(r,vec_traits::template read_element<1>(a)); + write_vec_element<2>(r,vec_traits::template read_element<2>(a)); + write_vec_element<3>(r,vec_traits::template read_element<3>(a)); + return r; + } + +namespace +sfinae + { + using ::boost::qvm::convert_to; + } + +namespace +qvm_detail + { + template + struct convert_to_v_defined; + + template <> + struct + convert_to_v_defined<4> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + vec_traits::dim==4 && vec_traits::dim==4, +bool>::type +operator==( A const & a, B const & b ) + { + return + vec_traits::template read_element<0>(a)==vec_traits::template read_element<0>(b) && + vec_traits::template read_element<1>(a)==vec_traits::template read_element<1>(b) && + vec_traits::template read_element<2>(a)==vec_traits::template read_element<2>(b) && + vec_traits::template read_element<3>(a)==vec_traits::template read_element<3>(b); + } + +namespace +sfinae + { + using ::boost::qvm::operator==; + } + +namespace +qvm_detail + { + template + struct eq_vv_defined; + + template <> + struct + eq_vv_defined<4> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + vec_traits::dim==4 && vec_traits::dim==4, +bool>::type +operator!=( A const & a, B const & b ) + { + return + !(vec_traits::template read_element<0>(a)==vec_traits::template read_element<0>(b)) || + !(vec_traits::template read_element<1>(a)==vec_traits::template read_element<1>(b)) || + !(vec_traits::template read_element<2>(a)==vec_traits::template read_element<2>(b)) || + !(vec_traits::template read_element<3>(a)==vec_traits::template read_element<3>(b)); + } + +namespace +sfinae + { + using ::boost::qvm::operator!=; + } + +namespace +qvm_detail + { + template + struct neq_vv_defined; + + template <> + struct + neq_vv_defined<4> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + vec_traits::dim==4, + deduce_vec >::type +operator-( A const & a ) + { + typedef typename deduce_vec::type R; + R r; + write_vec_element<0>(r,-vec_traits::template read_element<0>(a)); + write_vec_element<1>(r,-vec_traits::template read_element<1>(a)); + write_vec_element<2>(r,-vec_traits::template read_element<2>(a)); + write_vec_element<3>(r,-vec_traits::template read_element<3>(a)); + return r; + } + +namespace +sfinae + { + using ::boost::qvm::operator-; + } + +namespace +qvm_detail + { + template + struct minus_v_defined; + + template <> + struct + minus_v_defined<4> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_vec::value && vec_traits::dim==4, + typename vec_traits::scalar_type>::type +mag( A const & a ) + { + typedef typename vec_traits::scalar_type T; + T const a0=vec_traits::template read_element<0>(a); + T const a1=vec_traits::template read_element<1>(a); + T const a2=vec_traits::template read_element<2>(a); + T const a3=vec_traits::template read_element<3>(a); + T const m2=a0*a0+a1*a1+a2*a2+a3*a3; + T const mag=sqrt(m2); + return mag; + } + +namespace +sfinae + { + using ::boost::qvm::mag; + } + +namespace +qvm_detail + { + template + struct mag_v_defined; + + template <> + struct + mag_v_defined<4> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_vec::value && vec_traits::dim==4, + typename vec_traits::scalar_type>::type +mag_sqr( A const & a ) + { + typedef typename vec_traits::scalar_type T; + T const a0=vec_traits::template read_element<0>(a); + T const a1=vec_traits::template read_element<1>(a); + T const a2=vec_traits::template read_element<2>(a); + T const a3=vec_traits::template read_element<3>(a); + T const m2=a0*a0+a1*a1+a2*a2+a3*a3; + return m2; + } + +namespace +sfinae + { + using ::boost::qvm::mag_sqr; + } + +namespace +qvm_detail + { + template + struct mag_sqr_v_defined; + + template <> + struct + mag_sqr_v_defined<4> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + vec_traits::dim==4, + deduce_vec >::type +normalized( A const & a ) + { + typedef typename vec_traits::scalar_type T; + T const a0=vec_traits::template read_element<0>(a); + T const a1=vec_traits::template read_element<1>(a); + T const a2=vec_traits::template read_element<2>(a); + T const a3=vec_traits::template read_element<3>(a); + T const m2=a0*a0+a1*a1+a2*a2+a3*a3; + if( m2==scalar_traits::scalar_type>::value(0) ) + BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error()); + T const rm=scalar_traits::value(1)/sqrt(m2); + typedef typename deduce_vec::type R; + R r; + write_vec_element<0>(r,a0*rm); + write_vec_element<1>(r,a1*rm); + write_vec_element<2>(r,a2*rm); + write_vec_element<3>(r,a3*rm); + return r; + } + +namespace +sfinae + { + using ::boost::qvm::normalized; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + vec_traits::dim==4, + void>::type +normalize( A & a ) + { + typedef typename vec_traits::scalar_type T; + T const a0=vec_traits::template read_element<0>(a); + T const a1=vec_traits::template read_element<1>(a); + T const a2=vec_traits::template read_element<2>(a); + T const a3=vec_traits::template read_element<3>(a); + T const m2=a0*a0+a1*a1+a2*a2+a3*a3; + if( m2==scalar_traits::scalar_type>::value(0) ) + BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error()); + T const rm=scalar_traits::value(1)/sqrt(m2); + write_vec_element<0>(a,vec_traits::template read_element<0>(a)*rm); + write_vec_element<1>(a,vec_traits::template read_element<1>(a)*rm); + write_vec_element<2>(a,vec_traits::template read_element<2>(a)*rm); + write_vec_element<3>(a,vec_traits::template read_element<3>(a)*rm); + } + +namespace +sfinae + { + using ::boost::qvm::normalize; + } + +namespace +qvm_detail + { + template + struct normalize_v_defined; + + template <> + struct + normalize_v_defined<4> + { + static bool const value=true; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + vec_traits::dim==4 && vec_traits::dim==4, + deduce_scalar::scalar_type,typename vec_traits::scalar_type> >::type +dot( A const & a, B const & b ) + { + typedef typename vec_traits::scalar_type Ta; + typedef typename vec_traits::scalar_type Tb; + typedef typename deduce_scalar::type Tr; + Ta const a0=vec_traits::template read_element<0>(a); + Ta const a1=vec_traits::template read_element<1>(a); + Ta const a2=vec_traits::template read_element<2>(a); + Ta const a3=vec_traits::template read_element<3>(a); + Tb const b0=vec_traits::template read_element<0>(b); + Tb const b1=vec_traits::template read_element<1>(b); + Tb const b2=vec_traits::template read_element<2>(b); + Tb const b3=vec_traits::template read_element<3>(b); + Tr const dot=a0*b0+a1*b1+a2*b2+a3*b3; + return dot; + } + +namespace +sfinae + { + using ::boost::qvm::dot; + } + +namespace +qvm_detail + { + template + struct dot_vv_defined; + + template <> + struct + dot_vv_defined<4> + { + static bool const value=true; + }; + } + +} } + +#endif diff --git a/inst/include/boost/qvm/lite.hpp b/inst/include/boost/qvm/lite.hpp new file mode 100644 index 000000000..048ba0a95 --- /dev/null +++ b/inst/include/boost/qvm/lite.hpp @@ -0,0 +1,28 @@ +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/inst/include/boost/qvm/map.hpp b/inst/include/boost/qvm/map.hpp new file mode 100644 index 000000000..90f3d65fc --- /dev/null +++ b/inst/include/boost/qvm/map.hpp @@ -0,0 +1,13 @@ +#ifndef BOOST_QVM_MAP_HPP_INCLUDED +#define BOOST_QVM_MAP_HPP_INCLUDED + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include + +#endif diff --git a/inst/include/boost/qvm/map_vec_mat.hpp b/inst/include/boost/qvm/map_vec_mat.hpp new file mode 100644 index 000000000..1785ab135 --- /dev/null +++ b/inst/include/boost/qvm/map_vec_mat.hpp @@ -0,0 +1,794 @@ +#ifndef BOOST_QVM_MAP_VEC_MAT_HPP_INCLUDED +#define BOOST_QVM_MAP_VEC_MAT_HPP_INCLUDED + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include +#include + +namespace boost { namespace qvm { + +namespace +qvm_detail + { + template + class + col_mat_ + { + col_mat_( col_mat_ const & ); + col_mat_ & operator=( col_mat_ const & ); + ~col_mat_(); + + public: + + template + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + col_mat_ & + operator=( T const & x ) + { + assign(*this,x); + return *this; + } + + template = 201103L + , class = typename enable_if >::type +#endif + > + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + operator R() const + { + R r; + assign(r,*this); + return r; + } + }; + + template ::value> + struct col_mat_write_traits; + + template + struct + col_mat_write_traits + { + typedef qvm_detail::col_mat_ this_matrix; + typedef typename vec_traits::scalar_type scalar_type; + static int const rows=vec_traits::dim; + static int const cols=1; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type & + write_element( this_matrix & x ) + { + BOOST_QVM_STATIC_ASSERT(Col==0); + BOOST_QVM_STATIC_ASSERT(Row>=0); + BOOST_QVM_STATIC_ASSERT(Row::template write_element(reinterpret_cast(x)); + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type & + write_element_idx( int row, int col, this_matrix & x ) + { + BOOST_QVM_ASSERT(col==0); + BOOST_QVM_ASSERT(row>=0); + BOOST_QVM_ASSERT(row::write_element_idx(row,reinterpret_cast(x)); + } + }; + + template + struct + col_mat_write_traits + { + typedef qvm_detail::col_mat_ this_matrix; + typedef typename vec_traits::scalar_type scalar_type; + static int const rows=vec_traits::dim; + static int const cols=1; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + void + write_element( this_matrix & x, scalar_type s ) + { + BOOST_QVM_STATIC_ASSERT(Col==0); + BOOST_QVM_STATIC_ASSERT(Row>=0); + BOOST_QVM_STATIC_ASSERT(Row::template write_element(reinterpret_cast(x), s); + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + void + write_element_idx( int row, int col, this_matrix & x, scalar_type s ) + { + BOOST_QVM_ASSERT(col==0); + BOOST_QVM_ASSERT(row>=0); + BOOST_QVM_ASSERT(row::write_element_idx(row,reinterpret_cast(x), s); + } + }; + } + +template +struct +mat_traits< qvm_detail::col_mat_ >: + qvm_detail::col_mat_write_traits + { + typedef qvm_detail::col_mat_ this_matrix; + typedef typename vec_traits::scalar_type scalar_type; + static int const rows=vec_traits::dim; + static int const cols=1; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( this_matrix const & x ) + { + BOOST_QVM_STATIC_ASSERT(Col==0); + BOOST_QVM_STATIC_ASSERT(Row>=0); + BOOST_QVM_STATIC_ASSERT(Row::template read_element(reinterpret_cast(x)); + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element_idx( int row, int col, this_matrix const & x ) + { + BOOST_QVM_ASSERT(col==0); + BOOST_QVM_ASSERT(row>=0); + BOOST_QVM_ASSERT(row::read_element_idx(row,reinterpret_cast(x)); + } + }; + +template +struct +deduce_mat,R,C> + { + typedef mat::scalar_type,R,C> type; + }; + +template +struct +deduce_mat2,qvm_detail::col_mat_,R,C> + { + typedef mat::scalar_type,R,C> type; + }; + +template +typename enable_if_c< + is_vec::value, + qvm_detail::col_mat_ const &>::type +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL +col_mat( A const & a ) + { + return reinterpret_cast const &>(a); + } + +template +typename enable_if_c< + is_vec::value, + qvm_detail::col_mat_ &>::type +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL +col_mat( A & a ) + { + return reinterpret_cast &>(a); + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + class + row_mat_ + { + row_mat_( row_mat_ const & ); + row_mat_ & operator=( row_mat_ const & ); + ~row_mat_(); + + public: + + template + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + row_mat_ & + operator=( T const & x ) + { + assign(*this,x); + return *this; + } + + template = 201103L + , class = typename enable_if >::type +#endif + > + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + operator R() const + { + R r; + assign(r,*this); + return r; + } + }; + + template ::value> + struct row_mat_write_traits; + + template + struct + row_mat_write_traits + { + typedef qvm_detail::row_mat_ this_matrix; + typedef typename vec_traits::scalar_type scalar_type; + static int const rows=1; + static int const cols=vec_traits::dim; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type & + write_element( this_matrix & x ) + { + BOOST_QVM_STATIC_ASSERT(Row==0); + BOOST_QVM_STATIC_ASSERT(Col>=0); + BOOST_QVM_STATIC_ASSERT(Col::template write_element(reinterpret_cast(x)); + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type & + write_element_idx( int row, int col, this_matrix & x ) + { + BOOST_QVM_ASSERT(row==0); + BOOST_QVM_ASSERT(col>=0); + BOOST_QVM_ASSERT(col::write_element_idx(col,reinterpret_cast(x)); + } + }; + + template + struct + row_mat_write_traits + { + typedef qvm_detail::row_mat_ this_matrix; + typedef typename vec_traits::scalar_type scalar_type; + static int const rows=1; + static int const cols=vec_traits::dim; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + void + write_element( this_matrix & x, scalar_type s ) + { + BOOST_QVM_STATIC_ASSERT(Row==0); + BOOST_QVM_STATIC_ASSERT(Col>=0); + BOOST_QVM_STATIC_ASSERT(Col::template write_element(reinterpret_cast(x), s); + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + void + write_element_idx( int row, int col, this_matrix & x, scalar_type s ) + { + BOOST_QVM_ASSERT(row==0); + BOOST_QVM_ASSERT(col>=0); + BOOST_QVM_ASSERT(col::write_element_idx(col,reinterpret_cast(x), s); + } + }; + } + +template +struct +mat_traits< qvm_detail::row_mat_ >: + qvm_detail::row_mat_write_traits + { + typedef qvm_detail::row_mat_ this_matrix; + typedef typename vec_traits::scalar_type scalar_type; + static int const rows=1; + static int const cols=vec_traits::dim; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( this_matrix const & x ) + { + BOOST_QVM_STATIC_ASSERT(Row==0); + BOOST_QVM_STATIC_ASSERT(Col>=0); + BOOST_QVM_STATIC_ASSERT(Col::template read_element(reinterpret_cast(x)); + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element_idx( int row, int col, this_matrix const & x ) + { + BOOST_QVM_ASSERT(row==0); + BOOST_QVM_ASSERT(col>=0); + BOOST_QVM_ASSERT(col::read_element_idx(col,reinterpret_cast(x)); + } + }; + +template +struct +deduce_mat,R,C> + { + typedef mat::scalar_type,R,C> type; + }; + +template +struct +deduce_mat2,qvm_detail::row_mat_,R,C> + { + typedef mat::scalar_type,R,C> type; + }; + +template +typename enable_if_c< + is_vec::value, + qvm_detail::row_mat_ const &>::type +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL +row_mat( A const & a ) + { + return reinterpret_cast const &>(a); + } + +template +typename enable_if_c< + is_vec::value, + qvm_detail::row_mat_ &>::type +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL +row_mat( A & a ) + { + return reinterpret_cast &>(a); + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + class + translation_mat_ + { + translation_mat_( translation_mat_ const & ); + translation_mat_ & operator=( translation_mat_ const & ); + ~translation_mat_(); + + public: + + template + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + translation_mat_ & + operator=( T const & x ) + { + assign(*this,x); + return *this; + } + + template = 201103L + , class = typename enable_if >::type +#endif + > + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + operator R() const + { + R r; + assign(r,*this); + return r; + } + }; + + template ::cols-1)> + struct read_translation_matat; + + template + struct + read_translation_matat,Row,Col,TransCol> + { + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + typename mat_traits< translation_mat_ >::scalar_type + f( translation_mat_ const & ) + { + return scalar_traits >::scalar_type>::value(0); + } + }; + + template + struct + read_translation_matat,D,D,false> + { + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + typename mat_traits< translation_mat_ >::scalar_type + f( translation_mat_ const & ) + { + return scalar_traits >::scalar_type>::value(1); + } + }; + + template + struct + read_translation_matat,D,D,true> + { + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + typename mat_traits< translation_mat_ >::scalar_type + f( translation_mat_ const & ) + { + return scalar_traits >::scalar_type>::value(1); + } + }; + + template + struct + read_translation_matat,Row,Col,true> + { + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + typename mat_traits< translation_mat_ >::scalar_type + f( translation_mat_ const & x ) + { + return vec_traits::template read_element(reinterpret_cast(x)); + } + }; + + template ::value> + struct translation_mat_write_traits; + + template + struct + translation_mat_write_traits + { + typedef qvm_detail::translation_mat_ this_matrix; + typedef typename vec_traits::scalar_type scalar_type; + static int const rows=vec_traits::dim+1; + static int const cols=vec_traits::dim+1; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type & + write_element( this_matrix & x ) + { + BOOST_QVM_STATIC_ASSERT(Row>=0); + BOOST_QVM_STATIC_ASSERT(Row::template write_element(reinterpret_cast(x)); + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type & + write_element_idx( int row, int col, this_matrix const & x ) + { + BOOST_QVM_ASSERT(row>=0); + BOOST_QVM_ASSERT(row::write_element_idx(row,reinterpret_cast(x)); + } + }; + + template + struct + translation_mat_write_traits + { + typedef qvm_detail::translation_mat_ this_matrix; + typedef typename vec_traits::scalar_type scalar_type; + static int const rows=vec_traits::dim+1; + static int const cols=vec_traits::dim+1; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + void + write_element( this_matrix & x, scalar_type s ) + { + BOOST_QVM_STATIC_ASSERT(Row>=0); + BOOST_QVM_STATIC_ASSERT(Row::template write_element(reinterpret_cast(x), s); + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + void + write_element_idx( int row, int col, this_matrix const & x, scalar_type s ) + { + BOOST_QVM_ASSERT(row>=0); + BOOST_QVM_ASSERT(row::write_element_idx(row,reinterpret_cast(x), s); + } + }; + } + +template +struct +mat_traits< qvm_detail::translation_mat_ >: + qvm_detail::translation_mat_write_traits + { + typedef qvm_detail::translation_mat_ this_matrix; + typedef typename vec_traits::scalar_type scalar_type; + static int const rows=vec_traits::dim+1; + static int const cols=vec_traits::dim+1; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( this_matrix const & x ) + { + BOOST_QVM_STATIC_ASSERT(Row>=0); + BOOST_QVM_STATIC_ASSERT(Row=0); + BOOST_QVM_STATIC_ASSERT(Col,Row,Col>::f(x); + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element_idx( int row, int col, this_matrix const & x ) + { + BOOST_QVM_ASSERT(row>=0); + BOOST_QVM_ASSERT(row=0); + BOOST_QVM_ASSERT(col::value(1): + (col==cols-1? + vec_traits::read_element_idx(row,reinterpret_cast(x)): + scalar_traits::value(0)); + } + }; + +template +struct +deduce_mat,R,C> + { + typedef mat::scalar_type,R,C> type; + }; + +template +struct +deduce_mat2,qvm_detail::translation_mat_,R,C> + { + typedef mat::scalar_type,R,C> type; + }; + +template +typename enable_if_c< + is_vec::value, + qvm_detail::translation_mat_ const &>::type +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL +translation_mat( A const & a ) + { + return reinterpret_cast const &>(a); + } + +template +typename enable_if_c< + is_vec::value, + qvm_detail::translation_mat_ &>::type +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL +translation_mat( A & a ) + { + return reinterpret_cast &>(a); + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + class + diag_mat_ + { + diag_mat_( diag_mat_ const & ); + diag_mat_ & operator=( diag_mat_ const & ); + ~diag_mat_(); + + public: + + template + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + diag_mat_ & + operator=( T const & x ) + { + assign(*this,x); + return *this; + } + + template = 201103L + , class = typename enable_if >::type +#endif + > + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + operator R() const + { + R r; + assign(r,*this); + return r; + } + }; + + template ::value> + struct diag_mat_write_traits; + + template + struct + diag_mat_write_traits + { + typedef qvm_detail::diag_mat_ this_matrix; + typedef typename vec_traits::scalar_type scalar_type; + static int const rows=vec_traits::dim; + static int const cols=vec_traits::dim; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type & + write_element( this_matrix & x ) + { + BOOST_QVM_STATIC_ASSERT(Row>=0); + BOOST_QVM_STATIC_ASSERT(Row::template write_element(reinterpret_cast(x)); + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type & + write_element_idx( int row, int col, this_matrix & x ) + { + BOOST_QVM_ASSERT(row>=0); + BOOST_QVM_ASSERT(row::write_element_idx(row,reinterpret_cast(x)); + } + }; + + template + struct + diag_mat_write_traits + { + typedef qvm_detail::diag_mat_ this_matrix; + typedef typename vec_traits::scalar_type scalar_type; + static int const rows=vec_traits::dim; + static int const cols=vec_traits::dim; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + void + write_element( this_matrix & x, scalar_type s ) + { + BOOST_QVM_STATIC_ASSERT(Row>=0); + BOOST_QVM_STATIC_ASSERT(Row::template write_element(reinterpret_cast(x), s); + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + void + write_element_idx( int row, int col, this_matrix & x, scalar_type s ) + { + BOOST_QVM_ASSERT(row>=0); + BOOST_QVM_ASSERT(row::write_element_idx(row,reinterpret_cast(x), s); + } + }; + } + +template +struct +mat_traits< qvm_detail::diag_mat_ >: + qvm_detail::diag_mat_write_traits + { + typedef qvm_detail::diag_mat_ this_matrix; + typedef typename vec_traits::scalar_type scalar_type; + static int const rows=vec_traits::dim; + static int const cols=vec_traits::dim; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( this_matrix const & x ) + { + BOOST_QVM_STATIC_ASSERT(Row>=0); + BOOST_QVM_STATIC_ASSERT(Row=0); + BOOST_QVM_STATIC_ASSERT(Col::template read_element(reinterpret_cast(x)):scalar_traits::value(0); + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element_idx( int row, int col, this_matrix const & x ) + { + BOOST_QVM_ASSERT(row>=0); + BOOST_QVM_ASSERT(row=0); + BOOST_QVM_ASSERT(col::read_element_idx(row,reinterpret_cast(x)):scalar_traits::value(0); + } + }; + +template +struct +deduce_mat,R,C> + { + typedef mat::scalar_type,R,C> type; + }; + +template +struct +deduce_mat2,qvm_detail::diag_mat_,R,C> + { + typedef mat::scalar_type,R,C> type; + }; + +template +typename enable_if_c< + is_vec::value, + qvm_detail::diag_mat_ const &>::type +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL +diag_mat( A const & a ) + { + return reinterpret_cast const &>(a); + } + +template +typename enable_if_c< + is_vec::value, + qvm_detail::diag_mat_ &>::type +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL +diag_mat( A & a ) + { + return reinterpret_cast &>(a); + } + +} } + +#endif diff --git a/inst/include/boost/qvm/mat_traits_defaults.hpp b/inst/include/boost/qvm/mat_traits_defaults.hpp new file mode 100644 index 000000000..406dbb37c --- /dev/null +++ b/inst/include/boost/qvm/mat_traits_defaults.hpp @@ -0,0 +1,91 @@ +#ifndef BOOST_QVM_MAT_TRAITS_DEFAULTS_HPP_INCLUDED +#define BOOST_QVM_MAT_TRAITS_DEFAULTS_HPP_INCLUDED + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include + +namespace boost { namespace qvm { + +template +struct mat_traits; + +namespace +qvm_detail + { + template + struct + matrix_w + { + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + typename mat_traits::scalar_type & + write_element_idx( int r, int c, A & a ) + { + return (I/mat_traits::cols)==r && (I%mat_traits::cols)==c? + mat_traits::template write_element::cols,I%mat_traits::cols>(a) : + matrix_w::write_element_idx(r,c,a); + } + }; + + template + struct + matrix_w + { + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + typename mat_traits::scalar_type & + write_element_idx( int, int, A & a ) + { + BOOST_QVM_ASSERT(0); + return mat_traits::template write_element<0,0>(a); + } + }; + } + +template +struct +mat_traits_defaults + { + typedef MatType mat_type; + typedef ScalarType scalar_type; + static int const rows=Rows; + static int const cols=Cols; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( mat_type const & x ) + { + return mat_traits::template write_element(const_cast(x)); + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element_idx( int r, int c, mat_type const & x ) + { + return mat_traits::write_element_idx(r,c,const_cast(x)); + } + + protected: + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + scalar_type & + write_element_idx( int r, int c, mat_type & m ) + { + return qvm_detail::matrix_w<0,mat_traits::rows*mat_traits::cols>::write_element_idx(r,c,m); + } + }; + +} } + +#endif diff --git a/inst/include/boost/qvm/operations.hpp b/inst/include/boost/qvm/operations.hpp new file mode 100644 index 000000000..5fbbd147a --- /dev/null +++ b/inst/include/boost/qvm/operations.hpp @@ -0,0 +1,15 @@ +#ifndef BOOST_QVM_OPERATIONS_HPP_INCLUDED +#define BOOST_QVM_OPERATIONS_HPP_INCLUDED + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include +#include + +#endif diff --git a/inst/include/boost/qvm/quat.hpp b/inst/include/boost/qvm/quat.hpp new file mode 100644 index 000000000..b09ed6e50 --- /dev/null +++ b/inst/include/boost/qvm/quat.hpp @@ -0,0 +1,68 @@ +#ifndef BOOST_QVM_QUAT_HPP_INCLUDED +#define BOOST_QVM_QUAT_HPP_INCLUDED + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include + +namespace boost { namespace qvm { + +template +struct +quat + { + T a[4]; + template = 201103L + , class = typename enable_if >::type +#endif + > + operator R() const + { + R r; + assign(r,*this); + return r; + } + }; + +template +struct quat_traits; + +template +struct +quat_traits< quat > + { + typedef quat this_quaternion; + typedef T scalar_type; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( this_quaternion const & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I<4); + return x.a[I]; + } + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type & + write_element( this_quaternion & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I<4); + return x.a[I]; + } + }; + +} } + +#endif diff --git a/inst/include/boost/qvm/quat_access.hpp b/inst/include/boost/qvm/quat_access.hpp new file mode 100644 index 000000000..545db885b --- /dev/null +++ b/inst/include/boost/qvm/quat_access.hpp @@ -0,0 +1,180 @@ +#ifndef BOOST_QVM_QUAT_ACCESS_HPP_INCLUDED +#define BOOST_QVM_QUAT_ACCESS_HPP_INCLUDED + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include +#include + +namespace boost { namespace qvm { + +template BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL typename enable_if_c::value,typename quat_traits::scalar_type>::type S( Q const & a ) { return quat_traits::template read_element<0>(a); } +template BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL typename enable_if_c::value,typename quat_traits::scalar_type>::type X( Q const & a ) { return quat_traits::template read_element<1>(a); } +template BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL typename enable_if_c::value,typename quat_traits::scalar_type>::type Y( Q const & a ) { return quat_traits::template read_element<2>(a); } +template BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL typename enable_if_c::value,typename quat_traits::scalar_type>::type Z( Q const & a ) { return quat_traits::template read_element<3>(a); } + +namespace +qvm_detail + { + template + struct + q_element_access + { + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + void + operator=( typename quat_traits::scalar_type s ) + { + quat_traits::template write_element(*reinterpret_cast(this), s); + } + + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + operator typename vec_traits::scalar_type() const + { + return quat_traits::template read_element(*reinterpret_cast(this)); + } + }; + + template + struct + quat_v_ + { + template = 201103L + , class = typename enable_if >::type +#endif + > + operator R() const + { + R r; + assign(r,*this); + return r; + } + + private: + + quat_v_( quat_v_ const & ); + quat_v_ const & operator=( quat_v_ const & ); + ~quat_v_(); + }; + + template ::value> + struct quat_v_write_traits; + + template + struct + quat_v_write_traits + { + typedef qvm_detail::quat_v_ this_vector; + typedef typename quat_traits::scalar_type scalar_type; + static int const dim=3; + + template + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + static + scalar_type & + write_element( this_vector & q ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I::template write_element( reinterpret_cast(q) ); + } + }; + + template + struct + quat_v_write_traits + { + typedef qvm_detail::quat_v_ this_vector; + typedef typename quat_traits::scalar_type scalar_type; + static int const dim=3; + + template + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + static + void + write_element( this_vector & q, scalar_type s ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I::template write_element( reinterpret_cast(q), s ); + } + }; + } + +template +struct vec_traits; + +template +struct +vec_traits< qvm_detail::quat_v_ >: + qvm_detail::quat_v_write_traits + { + typedef qvm_detail::quat_v_ this_vector; + typedef typename quat_traits::scalar_type scalar_type; + static int const dim=3; + + template + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + static + scalar_type + read_element( this_vector const & q ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I::template read_element( reinterpret_cast(q) ); + } + }; + +template +struct +deduce_vec,D> + { + typedef vec::scalar_type,D> type; + }; + +template +struct +deduce_vec2,qvm_detail::quat_v_,D> + { + typedef vec::scalar_type,D> type; + }; + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_quat::value, + qvm_detail::quat_v_ const &>::type +V( Q const & a ) + { + return reinterpret_cast const &>(a); + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_quat::value, + qvm_detail::quat_v_ &>::type +V( Q & a ) + { + return reinterpret_cast &>(a); + } + +template BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL typename enable_if_c::value && quat_write_element_ref::value,typename quat_traits::scalar_type &>::type S( Q & a ) { return quat_traits::template write_element<0>(a); } +template BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL typename enable_if_c::value && quat_write_element_ref::value,typename quat_traits::scalar_type &>::type X( Q & a ) { return quat_traits::template write_element<1>(a); } +template BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL typename enable_if_c::value && quat_write_element_ref::value,typename quat_traits::scalar_type &>::type Y( Q & a ) { return quat_traits::template write_element<2>(a); } +template BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL typename enable_if_c::value && quat_write_element_ref::value,typename quat_traits::scalar_type &>::type Z( Q & a ) { return quat_traits::template write_element<3>(a); } + +template BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL typename enable_if_c::value && !quat_write_element_ref::value,qvm_detail::q_element_access<0,Q> &>::type S( Q & a ) { return *reinterpret_cast *>(&a); } +template BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL typename enable_if_c::value && !quat_write_element_ref::value,qvm_detail::q_element_access<1,Q> &>::type X( Q & a ) { return *reinterpret_cast *>(&a); } +template BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL typename enable_if_c::value && !quat_write_element_ref::value,qvm_detail::q_element_access<2,Q> &>::type Y( Q & a ) { return *reinterpret_cast *>(&a); } +template BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL typename enable_if_c::value && !quat_write_element_ref::value,qvm_detail::q_element_access<3,Q> &>::type Z( Q & a ) { return *reinterpret_cast *>(&a); } + +} } + +#endif diff --git a/inst/include/boost/qvm/quat_operations.hpp b/inst/include/boost/qvm/quat_operations.hpp new file mode 100644 index 000000000..f41affa2f --- /dev/null +++ b/inst/include/boost/qvm/quat_operations.hpp @@ -0,0 +1,1573 @@ +#ifndef BOOST_QVM_QUAT_OPERATIONS +#define BOOST_QVM_QUAT_OPERATIONS + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { namespace qvm { + +namespace +qvm_detail + { + BOOST_QVM_INLINE_CRITICAL + void const * + get_valid_ptr_quat_operations() + { + static int const obj=0; + return &obj; + } + } + +//////////////////////////////////////////////// + +namespace +msvc_parse_bug_workaround + { + template + struct + quats + { + static bool const value=is_quat::value && is_quat::value; + }; + } + + +template +inline +typename enable_if_c< + is_quat::value, + std::string>::type +to_string( A const & a ) + { + using namespace qvm_to_string_detail; + return '('+ + to_string(quat_traits::template read_element<0>(a))+','+ + to_string(quat_traits::template read_element<1>(a))+','+ + to_string(quat_traits::template read_element<2>(a))+','+ + to_string(quat_traits::template read_element<3>(a))+')'; + } + +//////////////////////////////////////////////// + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_quat::value && is_quat::value, + bool>::type +cmp( A const & a, B const & b, Cmp f ) + { + typedef typename quat_traits::scalar_type T; + typedef typename quat_traits::scalar_type U; + T q1[4] = + { + quat_traits::template read_element<0>(a), + quat_traits::template read_element<1>(a), + quat_traits::template read_element<2>(a), + quat_traits::template read_element<3>(a) + }; + U q2[4] = + { + quat_traits::template read_element<0>(b), + quat_traits::template read_element<1>(b), + quat_traits::template read_element<2>(b), + quat_traits::template read_element<3>(b) + }; + int i=0; + for( ; i!=4; ++i ) + if( !f(q1[i],q2[i]) ) + break; + if( i==4 ) + return true; + for( i=0; i!=4; ++i ) + if( !f(q1[i],-q2[i]) ) + return false; + return true; + } + +//////////////////////////////////////////////// + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_quat::value && is_quat::value, + R>::type +convert_to( A const & a ) + { + R r; + write_quat_element<0>(r,quat_traits::template read_element<0>(a)); + write_quat_element<1>(r,quat_traits::template read_element<1>(a)); + write_quat_element<2>(r,quat_traits::template read_element<2>(a)); + write_quat_element<3>(r,quat_traits::template read_element<3>(a)); + return r; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_quat::value && is_mat::value && + mat_traits::rows==3 && mat_traits::cols==3, + R>::type +convert_to( A const & a ) + { + typedef typename mat_traits::scalar_type T; + T const mat[3][3] = + { + { mat_traits::template read_element<0,0>(a), mat_traits::template read_element<0,1>(a), mat_traits::template read_element<0,2>(a) }, + { mat_traits::template read_element<1,0>(a), mat_traits::template read_element<1,1>(a), mat_traits::template read_element<1,2>(a) }, + { mat_traits::template read_element<2,0>(a), mat_traits::template read_element<2,1>(a), mat_traits::template read_element<2,2>(a) } + }; + R r; + if( mat[0][0]+mat[1][1]+mat[2][2] > scalar_traits::value(0) ) + { + T t = mat[0][0] + mat[1][1] + mat[2][2] + scalar_traits::value(1); + T s = (scalar_traits::value(1)/sqrt(t))/2; + write_quat_element<0>(r,s*t); + write_quat_element<1>(r,(mat[2][1]-mat[1][2])*s); + write_quat_element<2>(r,(mat[0][2]-mat[2][0])*s); + write_quat_element<3>(r,(mat[1][0]-mat[0][1])*s); + } + else if( mat[0][0]>mat[1][1] && mat[0][0]>mat[2][2] ) + { + T t = mat[0][0] - mat[1][1] - mat[2][2] + scalar_traits::value(1); + T s = (scalar_traits::value(1)/sqrt(t))/2; + write_quat_element<0>(r,(mat[2][1]-mat[1][2])*s); + write_quat_element<1>(r,s*t); + write_quat_element<2>(r,(mat[1][0]+mat[0][1])*s); + write_quat_element<3>(r,(mat[0][2]+mat[2][0])*s); + } + else if( mat[1][1]>mat[2][2] ) + { + T t = - mat[0][0] + mat[1][1] - mat[2][2] + scalar_traits::value(1); + T s = (scalar_traits::value(1)/sqrt(t))/2; + write_quat_element<0>(r,(mat[0][2]-mat[2][0])*s); + write_quat_element<1>(r,(mat[1][0]+mat[0][1])*s); + write_quat_element<2>(r,s*t); + write_quat_element<3>(r,(mat[2][1]+mat[1][2])*s); + } + else + { + T t = - mat[0][0] - mat[1][1] + mat[2][2] + scalar_traits::value(1); + T s = (scalar_traits::value(1)/sqrt(t))/2; + write_quat_element<0>(r,(mat[1][0]-mat[0][1])*s); + write_quat_element<1>(r,(mat[0][2]+mat[2][0])*s); + write_quat_element<2>(r,(mat[2][1]+mat[1][2])*s); + write_quat_element<3>(r,s*t); + } + return r; + } + +//////////////////////////////////////////////// + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_quat::value, + deduce_quat >::type +conjugate( A const & a ) + { + typedef typename deduce_quat::type R; + R r; + write_quat_element<0>(r,quat_traits::template read_element<0>(a)); + write_quat_element<1>(r,-quat_traits::template read_element<1>(a)); + write_quat_element<2>(r,-quat_traits::template read_element<2>(a)); + write_quat_element<3>(r,-quat_traits::template read_element<3>(a)); + return r; + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + class + identity_quat_ + { + identity_quat_( identity_quat_ const & ); + identity_quat_ & operator=( identity_quat_ const & ); + ~identity_quat_(); + + public: + + template = 201103L + , class = typename enable_if >::type +#endif + > + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + operator R() const + { + R r; + assign(r,*this); + return r; + } + }; + } + +template +struct +quat_traits< qvm_detail::identity_quat_ > + { + typedef qvm_detail::identity_quat_ this_quaternion; + typedef T scalar_type; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( this_quaternion const & ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I<4); + return scalar_traits::value(I==0); + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element_idx( int i, this_quaternion const & ) + { + BOOST_QVM_ASSERT(i>=0); + BOOST_QVM_ASSERT(i<4); + return scalar_traits::value(i==0); + } + }; + +template +struct +deduce_quat< qvm_detail::identity_quat_ > + { + typedef quat type; + }; + +template +struct +deduce_quat2< qvm_detail::identity_quat_, qvm_detail::identity_quat_ > + { + typedef quat type; + }; + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL +qvm_detail::identity_quat_ const & +identity_quat() + { + return *(qvm_detail::identity_quat_ const *)qvm_detail::get_valid_ptr_quat_operations(); + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_quat::value, + void>::type +set_identity( A & a ) + { + typedef typename quat_traits::scalar_type T; + T const zero=scalar_traits::value(0); + T const one=scalar_traits::value(1); + write_quat_element<0>(a,one); + write_quat_element<1>(a,zero); + write_quat_element<2>(a,zero); + write_quat_element<3>(a,zero); + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + class + quaternion_scalar_cast_ + { + quaternion_scalar_cast_( quaternion_scalar_cast_ const & ); + quaternion_scalar_cast_ & operator=( quaternion_scalar_cast_ const & ); + ~quaternion_scalar_cast_(); + + public: + + template + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + quaternion_scalar_cast_ & + operator=( T const & x ) + { + assign(*this,x); + return *this; + } + + template = 201103L + , class = typename enable_if >::type +#endif + > + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + operator R() const + { + R r; + assign(r,*this); + return r; + } + }; + + template struct scalar_cast_quaternion_filter { }; + template <> struct scalar_cast_quaternion_filter { typedef int type; }; + } + +template +struct +quat_traits< qvm_detail::quaternion_scalar_cast_ > + { + typedef Scalar scalar_type; + typedef qvm_detail::quaternion_scalar_cast_ this_quaternion; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( this_quaternion const & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I<4); + return scalar_type(quat_traits::template read_element(reinterpret_cast(x))); + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element_idx( int i, this_quaternion const & x ) + { + BOOST_QVM_ASSERT(i>=0); + BOOST_QVM_ASSERT(i<4); + return scalar_type(quat_traits::read_element_idx(i,reinterpret_cast(x))); + } + }; + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL +qvm_detail::quaternion_scalar_cast_ const & +scalar_cast( T const & x, typename qvm_detail::scalar_cast_quaternion_filter::value>::type=0 ) + { + return reinterpret_cast const &>(x); + } + +//////////////////////////////////////////////// + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_quat::value && is_scalar::value, + A &>::type +operator/=( A & a, B b ) + { + write_quat_element<0>(a,quat_traits::template read_element<0>(a)/b); + write_quat_element<1>(a,quat_traits::template read_element<1>(a)/b); + write_quat_element<2>(a,quat_traits::template read_element<2>(a)/b); + write_quat_element<3>(a,quat_traits::template read_element<3>(a)/b); + return a; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_quat::value && is_scalar::value, + deduce_quat2 >::type +operator/( A const & a, B b ) + { + typedef typename deduce_quat2::type R; + R r; + write_quat_element<0>(r,quat_traits::template read_element<0>(a)/b); + write_quat_element<1>(r,quat_traits::template read_element<1>(a)/b); + write_quat_element<2>(r,quat_traits::template read_element<2>(a)/b); + write_quat_element<3>(r,quat_traits::template read_element<3>(a)/b); + return r; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_quat::value && is_quat::value, + deduce_scalar::scalar_type,typename quat_traits::scalar_type> >::type +dot( A const & a, B const & b ) + { + typedef typename quat_traits::scalar_type Ta; + typedef typename quat_traits::scalar_type Tb; + typedef typename deduce_scalar::type Tr; + Ta const a0=quat_traits::template read_element<0>(a); + Ta const a1=quat_traits::template read_element<1>(a); + Ta const a2=quat_traits::template read_element<2>(a); + Ta const a3=quat_traits::template read_element<3>(a); + Tb const b0=quat_traits::template read_element<0>(b); + Tb const b1=quat_traits::template read_element<1>(b); + Tb const b2=quat_traits::template read_element<2>(b); + Tb const b3=quat_traits::template read_element<3>(b); + Tr const dp=a0*b0+a1*b1+a2*b2+a3*b3; + return dp; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_quat::value && is_quat::value, + bool>::type +operator==( A const & a, B const & b ) + { + return + quat_traits::template read_element<0>(a)==quat_traits::template read_element<0>(b) && + quat_traits::template read_element<1>(a)==quat_traits::template read_element<1>(b) && + quat_traits::template read_element<2>(a)==quat_traits::template read_element<2>(b) && + quat_traits::template read_element<3>(a)==quat_traits::template read_element<3>(b); + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_quat::value, + deduce_quat >::type +inverse( A const & a ) + { + typedef typename deduce_quat::type R; + typedef typename quat_traits::scalar_type TA; + TA aa = quat_traits::template read_element<0>(a); + TA ab = quat_traits::template read_element<1>(a); + TA ac = quat_traits::template read_element<2>(a); + TA ad = quat_traits::template read_element<3>(a); + TA m2 = ab*ab + ac*ac + ad*ad + aa*aa; + if( m2==scalar_traits::value(0) ) + BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error()); + TA rm=scalar_traits::value(1)/m2; + R r; + write_quat_element<0>(r,aa*rm); + write_quat_element<1>(r,-ab*rm); + write_quat_element<2>(r,-ac*rm); + write_quat_element<3>(r,-ad*rm); + return r; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_quat::value, + typename quat_traits::scalar_type>::type +mag_sqr( A const & a ) + { + typedef typename quat_traits::scalar_type T; + T x=quat_traits::template read_element<0>(a); + T y=quat_traits::template read_element<1>(a); + T z=quat_traits::template read_element<2>(a); + T w=quat_traits::template read_element<3>(a); + return x*x+y*y+z*z+w*w; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_quat::value, + typename quat_traits::scalar_type>::type +mag( A const & a ) + { + typedef typename quat_traits::scalar_type T; + T x=quat_traits::template read_element<0>(a); + T y=quat_traits::template read_element<1>(a); + T z=quat_traits::template read_element<2>(a); + T w=quat_traits::template read_element<3>(a); + return sqrt(x*x+y*y+z*z+w*w); + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if< + msvc_parse_bug_workaround::quats, + A &>::type +operator-=( A & a, B const & b ) + { + write_quat_element<0>(a,quat_traits::template read_element<0>(a)-quat_traits::template read_element<0>(b)); + write_quat_element<1>(a,quat_traits::template read_element<1>(a)-quat_traits::template read_element<1>(b)); + write_quat_element<2>(a,quat_traits::template read_element<2>(a)-quat_traits::template read_element<2>(b)); + write_quat_element<3>(a,quat_traits::template read_element<3>(a)-quat_traits::template read_element<3>(b)); + return a; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_quat::value && is_quat::value, + deduce_quat2 >::type +operator-( A const & a, B const & b ) + { + typedef typename deduce_quat2::type R; + R r; + write_quat_element<0>(r,quat_traits::template read_element<0>(a)-quat_traits::template read_element<0>(b)); + write_quat_element<1>(r,quat_traits::template read_element<1>(a)-quat_traits::template read_element<1>(b)); + write_quat_element<2>(r,quat_traits::template read_element<2>(a)-quat_traits::template read_element<2>(b)); + write_quat_element<3>(r,quat_traits::template read_element<3>(a)-quat_traits::template read_element<3>(b)); + return r; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_quat::value, + deduce_quat >::type +operator-( A const & a ) + { + typedef typename deduce_quat::type R; + R r; + write_quat_element<0>(r,-quat_traits::template read_element<0>(a)); + write_quat_element<1>(r,-quat_traits::template read_element<1>(a)); + write_quat_element<2>(r,-quat_traits::template read_element<2>(a)); + write_quat_element<3>(r,-quat_traits::template read_element<3>(a)); + return r; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if< + msvc_parse_bug_workaround::quats, + A &>::type +operator*=( A & a, B const & b ) + { + typedef typename quat_traits::scalar_type TA; + typedef typename quat_traits::scalar_type TB; + TA const aa=quat_traits::template read_element<0>(a); + TA const ab=quat_traits::template read_element<1>(a); + TA const ac=quat_traits::template read_element<2>(a); + TA const ad=quat_traits::template read_element<3>(a); + TB const ba=quat_traits::template read_element<0>(b); + TB const bb=quat_traits::template read_element<1>(b); + TB const bc=quat_traits::template read_element<2>(b); + TB const bd=quat_traits::template read_element<3>(b); + write_quat_element<0>(a,aa*ba - ab*bb - ac*bc - ad*bd); + write_quat_element<1>(a,aa*bb + ab*ba + ac*bd - ad*bc); + write_quat_element<2>(a,aa*bc + ac*ba + ad*bb - ab*bd); + write_quat_element<3>(a,aa*bd + ad*ba + ab*bc - ac*bb); + return a; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_quat::value && is_scalar::value, + A &>::type +operator*=( A & a, B b ) + { + write_quat_element<0>(a, quat_traits::template read_element<0>(a)*b); + write_quat_element<1>(a, quat_traits::template read_element<1>(a)*b); + write_quat_element<2>(a, quat_traits::template read_element<2>(a)*b); + write_quat_element<3>(a, quat_traits::template read_element<3>(a)*b); + return a; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_quat::value && is_quat::value, + deduce_quat2 >::type +operator*( A const & a, B const & b ) + { + typedef typename deduce_quat2::type R; + typedef typename quat_traits::scalar_type TA; + typedef typename quat_traits::scalar_type TB; + TA const aa=quat_traits::template read_element<0>(a); + TA const ab=quat_traits::template read_element<1>(a); + TA const ac=quat_traits::template read_element<2>(a); + TA const ad=quat_traits::template read_element<3>(a); + TB const ba=quat_traits::template read_element<0>(b); + TB const bb=quat_traits::template read_element<1>(b); + TB const bc=quat_traits::template read_element<2>(b); + TB const bd=quat_traits::template read_element<3>(b); + R r; + write_quat_element<0>(r,aa*ba - ab*bb - ac*bc - ad*bd); + write_quat_element<1>(r,aa*bb + ab*ba + ac*bd - ad*bc); + write_quat_element<2>(r,aa*bc + ac*ba + ad*bb - ab*bd); + write_quat_element<3>(r,aa*bd + ad*ba + ab*bc - ac*bb); + return r; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c2< + is_quat::value && is_scalar::value, + deduce_quat2 >::type +operator*( A const & a, B b ) + { + typedef typename deduce_quat2::type R; + R r; + write_quat_element<0>(r,quat_traits::template read_element<0>(a)*b); + write_quat_element<1>(r,quat_traits::template read_element<1>(a)*b); + write_quat_element<2>(r,quat_traits::template read_element<2>(a)*b); + write_quat_element<3>(r,quat_traits::template read_element<3>(a)*b); + return r; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_quat::value && is_quat::value, + bool>::type +operator!=( A const & a, B const & b ) + { + return + quat_traits::template read_element<0>(a)!=quat_traits::template read_element<0>(b) || + quat_traits::template read_element<1>(a)!=quat_traits::template read_element<1>(b) || + quat_traits::template read_element<2>(a)!=quat_traits::template read_element<2>(b) || + quat_traits::template read_element<3>(a)!=quat_traits::template read_element<3>(b); + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_quat::value, + deduce_quat >::type +normalized( A const & a ) + { + typedef typename quat_traits::scalar_type T; + T const a0=quat_traits::template read_element<0>(a); + T const a1=quat_traits::template read_element<1>(a); + T const a2=quat_traits::template read_element<2>(a); + T const a3=quat_traits::template read_element<3>(a); + T const m2=a0*a0+a1*a1+a2*a2+a3*a3; + if( m2==scalar_traits::scalar_type>::value(0) ) + BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error()); + T const rm=scalar_traits::value(1)/sqrt(m2); + typedef typename deduce_quat::type R; + R r; + write_quat_element<0>(r,a0*rm); + write_quat_element<1>(r,a1*rm); + write_quat_element<2>(r,a2*rm); + write_quat_element<3>(r,a3*rm); + return r; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_quat::value, + void>::type +normalize( A & a ) + { + typedef typename quat_traits::scalar_type T; + T const a0=quat_traits::template read_element<0>(a); + T const a1=quat_traits::template read_element<1>(a); + T const a2=quat_traits::template read_element<2>(a); + T const a3=quat_traits::template read_element<3>(a); + T const m2=a0*a0+a1*a1+a2*a2+a3*a3; + if( m2==scalar_traits::scalar_type>::value(0) ) + BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error()); + T const rm=scalar_traits::value(1)/sqrt(m2); + write_quat_element<0>(a,quat_traits::template read_element<0>(a)*rm); + write_quat_element<1>(a,quat_traits::template read_element<1>(a)*rm); + write_quat_element<2>(a,quat_traits::template read_element<2>(a)*rm); + write_quat_element<3>(a,quat_traits::template read_element<3>(a)*rm); + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if< + msvc_parse_bug_workaround::quats, + A &>::type +operator+=( A & a, B const & b ) + { + write_quat_element<0>(a,quat_traits::template read_element<0>(a)+quat_traits::template read_element<0>(b)); + write_quat_element<1>(a,quat_traits::template read_element<1>(a)+quat_traits::template read_element<1>(b)); + write_quat_element<2>(a,quat_traits::template read_element<2>(a)+quat_traits::template read_element<2>(b)); + write_quat_element<3>(a,quat_traits::template read_element<3>(a)+quat_traits::template read_element<3>(b)); + return a; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_quat::value && is_quat::value, + deduce_quat2 >::type +operator+( A const & a, B const & b ) + { + typedef typename deduce_quat2::type R; + R r; + write_quat_element<0>(r,quat_traits::template read_element<0>(a)+quat_traits::template read_element<0>(b)); + write_quat_element<1>(r,quat_traits::template read_element<1>(a)+quat_traits::template read_element<1>(b)); + write_quat_element<2>(r,quat_traits::template read_element<2>(a)+quat_traits::template read_element<2>(b)); + write_quat_element<3>(r,quat_traits::template read_element<3>(a)+quat_traits::template read_element<3>(b)); + return r; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_quat::value && is_quat::value && is_scalar::value, + deduce_quat2 >::type +slerp360( A const & a, B const & b, C t ) + { + typedef typename deduce_quat2::type R; + typedef typename quat_traits::scalar_type TR; + TR const one = scalar_traits::value(1); + TR const threshold = one - one / scalar_traits::value(2000); //0.9995 + TR const dp = dot(a,b); + TR const abs_dp = abs(dp); + if( abs_dp > threshold ) + return a*(one-t) + b*t; + TR const th = acos(dp); + TR const invsinth = one / sin(th); + return a * (sin(th * (one-t)) * invsinth) + b * (sin(th * t) * invsinth); + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_quat::value && is_quat::value && is_scalar::value, + deduce_quat2 >::type +slerp180( A const & a, B const & b, C t ) + { + typedef typename deduce_quat2::type R; + typedef typename quat_traits::scalar_type TR; + TR const one = scalar_traits::value(1); + TR const threshold = one - one / scalar_traits::value(2000); //0.9995 + TR const dp = dot(a,b); + TR const abs_dp = abs(dp); + if( abs_dp > threshold ) + return a*(one-t)*sign(dp) + b*t; + TR const th = acos(abs_dp); + TR const invsinth = one / sin(th); + return a * (sin(th * (one-t)) * invsinth * sign(dp)) + b * (sin(th * t) * invsinth); + } + +template +BOOST_QVM_DEPRECATED("please use slerp180 or slerp360") +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_quat::value && is_quat::value && is_scalar::value, + deduce_quat2 >::type +slerp( A const & a, B const & b, C t ) + { + return slerp360(a, b, t); + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + class + qref_ + { + qref_( qref_ const & ); + qref_ & operator=( qref_ const & ); + ~qref_(); + + public: + + template + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + qref_ & + operator=( R const & x ) + { + assign(*this,x); + return *this; + } + + template = 201103L + , class = typename enable_if >::type +#endif + > + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + operator R() const + { + R r; + assign(r,*this); + return r; + } + }; + + template ::value> + struct qref_write_traits; + + template + struct + qref_write_traits + { + typedef typename quat_traits::scalar_type scalar_type; + typedef qvm_detail::qref_ this_quaternion; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type & + write_element( this_quaternion & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I<4); + return quat_traits::template write_element(reinterpret_cast(x)); + } + }; + + template + struct + qref_write_traits + { + typedef typename quat_traits::scalar_type scalar_type; + typedef qvm_detail::qref_ this_quaternion; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + void + write_element( this_quaternion & x, scalar_type s ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I<4); + quat_traits::template write_element(reinterpret_cast(x), s); + } + }; + } + +template +struct quat_traits; + +template +struct +quat_traits< qvm_detail::qref_ >: + qvm_detail::qref_write_traits + { + typedef typename quat_traits::scalar_type scalar_type; + typedef qvm_detail::qref_ this_quaternion; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( this_quaternion const & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I<4); + return quat_traits::template read_element(reinterpret_cast(x)); + } + }; + +template +struct +deduce_quat< qvm_detail::qref_ > + { + typedef quat::scalar_type> type; + }; + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_quat::value, + qvm_detail::qref_ const &>::type +qref( Q const & a ) + { + return reinterpret_cast const &>(a); + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_quat::value, + qvm_detail::qref_ &>::type +qref( Q & a ) + { + return reinterpret_cast &>(a); + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + class + zero_q_ + { + zero_q_( zero_q_ const & ); + zero_q_ & operator=( zero_q_ const & ); + ~zero_q_(); + + public: + + template = 201103L + , class = typename enable_if >::type +#endif + > + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + operator R() const + { + R r; + assign(r,*this); + return r; + } + }; + } + +template +struct +quat_traits< qvm_detail::zero_q_ > + { + typedef qvm_detail::zero_q_ this_quaternion; + typedef T scalar_type; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( this_quaternion const & ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I<4); + return scalar_traits::value(0); + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element_idx( int i, this_quaternion const & ) + { + BOOST_QVM_ASSERT(i>=0); + BOOST_QVM_ASSERT(i<4); + return scalar_traits::value(0); + } + }; + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL +qvm_detail::zero_q_ const & +zero_quat() + { + return *(qvm_detail::zero_q_ const *)qvm_detail::get_valid_ptr_quat_operations(); + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_quat::value, + void>::type +set_zero( A & a ) + { + typedef typename quat_traits::scalar_type T; + T const zero=scalar_traits::value(0); + write_quat_element<0>(a,zero); + write_quat_element<1>(a,zero); + write_quat_element<2>(a,zero); + write_quat_element<3>(a,zero); + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + struct + rot_quat_ + { + typedef typename vec_traits::scalar_type scalar_type; + scalar_type a[4]; + + template + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE + rot_quat_( V const & axis, Angle angle ) + { + scalar_type const x=vec_traits::template read_element<0>(axis); + scalar_type const y=vec_traits::template read_element<1>(axis); + scalar_type const z=vec_traits::template read_element<2>(axis); + scalar_type const m2=x*x+y*y+z*z; + if( m2==scalar_traits::value(0) ) + BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error()); + scalar_type const rm=scalar_traits::value(1)/sqrt(m2); + angle/=2; + scalar_type const s=sin(angle); + a[0] = cos(angle); + a[1] = rm*x*s; + a[2] = rm*y*s; + a[3] = rm*z*s; + } + + template = 201103L + , class = typename enable_if >::type +#endif + > + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + operator R() const + { + R r; + assign(r,*this); + return r; + } + }; + } + +template +struct +quat_traits< qvm_detail::rot_quat_ > + { + typedef qvm_detail::rot_quat_ this_quaternion; + typedef typename this_quaternion::scalar_type scalar_type; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( this_quaternion const & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I<4); + return x.a[I]; + } + }; + +template +struct +deduce_quat< qvm_detail::rot_quat_ > + { + typedef quat::scalar_type> type; + }; + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE +typename enable_if_c< + is_vec::value && vec_traits::dim==3, + qvm_detail::rot_quat_ >::type +rot_quat( A const & axis, Angle angle ) + { + return qvm_detail::rot_quat_(axis,angle); + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_quat::value && + is_vec::value && vec_traits::dim==3, + void>::type +set_rot( A & a, B const & axis, Angle angle ) + { + assign(a,rot_quat(axis,angle)); + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_quat::value && + is_vec::value && vec_traits::dim==3, + void>::type +rotate( A & a, B const & axis, Angle angle ) + { + a *= rot_quat(axis,angle); + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + struct + rotx_quat_ + { + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + rotx_quat_() + { + } + + template = 201103L + , class = typename enable_if >::type +#endif + > + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + operator R() const + { + R r; + assign(r,*this); + return r; + } + + private: + + rotx_quat_( rotx_quat_ const & ); + rotx_quat_ & operator=( rotx_quat_ const & ); + ~rotx_quat_(); + }; + + template + struct + rotx_q_get + { + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + T + get( T const & ) + { + return scalar_traits::value(0); + } + }; + + template <> + struct + rotx_q_get<1> + { + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + T + get( T const & angle ) + { + return sin(angle/2); + } + }; + + template <> + struct + rotx_q_get<0> + { + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + T + get( T const & angle ) + { + return cos(angle/2); + } + }; + } + +template +struct +quat_traits< qvm_detail::rotx_quat_ > + { + typedef qvm_detail::rotx_quat_ this_quaternion; + typedef Angle scalar_type; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( this_quaternion const & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I<4); + return qvm_detail::rotx_q_get::get(reinterpret_cast(x)); + } + }; + +template +struct +deduce_quat< qvm_detail::rotx_quat_ > + { + typedef quat type; + }; + +template +struct +deduce_quat2< qvm_detail::rotx_quat_, qvm_detail::rotx_quat_ > + { + typedef quat type; + }; + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL +qvm_detail::rotx_quat_ const & +rotx_quat( Angle const & angle ) + { + return reinterpret_cast const &>(angle); + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_quat::value, + void>::type +set_rotx( A & a, Angle angle ) + { + assign(a,rotx_quat(angle)); + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_quat::value, + void>::type +rotate_x( A & a, Angle angle ) + { + a *= rotx_quat(angle); + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + struct + roty_quat_ + { + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + roty_quat_() + { + } + + template = 201103L + , class = typename enable_if >::type +#endif + > + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + operator R() const + { + R r; + assign(r,*this); + return r; + } + + private: + + roty_quat_( roty_quat_ const & ); + roty_quat_ & operator=( roty_quat_ const & ); + ~roty_quat_(); + }; + + template + struct + roty_q_get + { + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + T + get( T const & ) + { + return scalar_traits::value(0); + } + }; + + template <> + struct + roty_q_get<2> + { + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + T + get( T const & angle ) + { + return sin(angle/2); + } + }; + + template <> + struct + roty_q_get<0> + { + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + T + get( T const & angle ) + { + return cos(angle/2); + } + }; + } + +template +struct +quat_traits< qvm_detail::roty_quat_ > + { + typedef qvm_detail::roty_quat_ this_quaternion; + typedef Angle scalar_type; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( this_quaternion const & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I<4); + return qvm_detail::roty_q_get::get(reinterpret_cast(x)); + } + }; + +template +struct +deduce_quat< qvm_detail::roty_quat_ > + { + typedef quat type; + }; + +template +struct +deduce_quat2< qvm_detail::roty_quat_, qvm_detail::roty_quat_ > + { + typedef quat type; + }; + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL +qvm_detail::roty_quat_ const & +roty_quat( Angle const & angle ) + { + return reinterpret_cast const &>(angle); + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_quat::value, + void>::type +set_roty( A & a, Angle angle ) + { + assign(a,roty_quat(angle)); + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_quat::value, + void>::type +rotate_y( A & a, Angle angle ) + { + a *= roty_quat(angle); + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + struct + rotz_quat_ + { + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + rotz_quat_() + { + } + + template = 201103L + , class = typename enable_if >::type +#endif + > + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + operator R() const + { + R r; + assign(r,*this); + return r; + } + + private: + + rotz_quat_( rotz_quat_ const & ); + rotz_quat_ & operator=( rotz_quat_ const & ); + ~rotz_quat_(); + }; + + template + struct + rotz_q_get + { + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + T + get( T const & ) + { + return scalar_traits::value(0); + } + }; + + template <> + struct + rotz_q_get<3> + { + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + T + get( T const & angle ) + { + return sin(angle/2); + } + }; + + template <> + struct + rotz_q_get<0> + { + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + T + get( T const & angle ) + { + return cos(angle/2); + } + }; + } + +template +struct +quat_traits< qvm_detail::rotz_quat_ > + { + typedef qvm_detail::rotz_quat_ this_quaternion; + typedef Angle scalar_type; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( this_quaternion const & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I<4); + return qvm_detail::rotz_q_get::get(reinterpret_cast(x)); + } + }; + +template +struct +deduce_quat< qvm_detail::rotz_quat_ > + { + typedef quat type; + }; + +template +struct +deduce_quat2< qvm_detail::rotz_quat_, qvm_detail::rotz_quat_ > + { + typedef quat type; + }; + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL +qvm_detail::rotz_quat_ const & +rotz_quat( Angle const & angle ) + { + return reinterpret_cast const &>(angle); + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_quat::value, + void>::type +set_rotz( A & a, Angle angle ) + { + assign(a,rotz_quat(angle)); + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_quat::value, + void>::type +rotate_z( A & a, Angle angle ) + { + a *= rotz_quat(angle); + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_quat::value && is_vec::value && vec_traits::dim==3, + typename quat_traits::scalar_type>::type +axis_angle( A const & a, B & b ) + { + typedef typename quat_traits::scalar_type T; + T a0=quat_traits::template read_element<0>(a); + T a1=quat_traits::template read_element<1>(a); + T a2=quat_traits::template read_element<2>(a); + T a3=quat_traits::template read_element<3>(a); + if( a0>1 ) + { + T const m2=a0*a0+a1*a1+a2*a2+a3*a3; + if( m2==scalar_traits::value(0) ) + BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error()); + T const s=sqrt(m2); + a0/=s; + a1/=s; + a2/=s; + a3/=s; + } + if( T s=sqrt(1-a0*a0) ) + { + write_vec_element<0>(b, a1/s); + write_vec_element<1>(b, a2/s); + write_vec_element<2>(b, a3/s); + } + else + { + typedef typename vec_traits::scalar_type U; + write_vec_element<0>(b, scalar_traits::value(1)); + write_vec_element<1>(b, scalar_traits::value(0)); + write_vec_element<2>(b, scalar_traits::value(0)); + } + return scalar_traits::value(2) * qvm::acos(a0); + } + +//////////////////////////////////////////////// + +namespace +sfinae + { + using ::boost::qvm::assign; + using ::boost::qvm::cmp; + using ::boost::qvm::convert_to; + using ::boost::qvm::conjugate; + using ::boost::qvm::set_identity; + using ::boost::qvm::set_zero; + using ::boost::qvm::scalar_cast; + using ::boost::qvm::operator/=; + using ::boost::qvm::operator/; + using ::boost::qvm::dot; + using ::boost::qvm::operator==; + using ::boost::qvm::inverse; + using ::boost::qvm::mag_sqr; + using ::boost::qvm::mag; + using ::boost::qvm::slerp360; + using ::boost::qvm::slerp180; + using ::boost::qvm::slerp; + using ::boost::qvm::operator-=; + using ::boost::qvm::operator-; + using ::boost::qvm::operator*=; + using ::boost::qvm::operator*; + using ::boost::qvm::operator!=; + using ::boost::qvm::normalized; + using ::boost::qvm::normalize; + using ::boost::qvm::operator+=; + using ::boost::qvm::operator+; + using ::boost::qvm::qref; + using ::boost::qvm::rot_quat; + using ::boost::qvm::set_rot; + using ::boost::qvm::rotate; + using ::boost::qvm::rotx_quat; + using ::boost::qvm::set_rotx; + using ::boost::qvm::rotate_x; + using ::boost::qvm::roty_quat; + using ::boost::qvm::set_roty; + using ::boost::qvm::rotate_y; + using ::boost::qvm::rotz_quat; + using ::boost::qvm::set_rotz; + using ::boost::qvm::rotate_z; + } + +} } + +#endif diff --git a/inst/include/boost/qvm/quat_traits_array.hpp b/inst/include/boost/qvm/quat_traits_array.hpp new file mode 100644 index 000000000..956e0fbab --- /dev/null +++ b/inst/include/boost/qvm/quat_traits_array.hpp @@ -0,0 +1,287 @@ +#ifndef BOOST_QVM_QUAT_TRAITS_ARRAY_HPP_INCLUDED +#define BOOST_QVM_QUAT_TRAITS_ARRAY_HPP_INCLUDED + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include + +#if __cplusplus > 199711L + +#include + +namespace boost { namespace qvm { + +template +struct +quat_traits> + { + typedef void scalar_type; + }; +template +struct +quat_traits,4> > + { + typedef void scalar_type; + }; +template +struct +quat_traits,D> > + { + typedef void scalar_type; + }; +template +struct +quat_traits,4> > + { + typedef void scalar_type; + }; +template +struct +quat_traits,N> > + { + typedef void scalar_type; + }; + +template +struct +quat_traits > + { + typedef std::array this_quaternion; + typedef T scalar_type; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( this_quaternion const & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I<4); + return x[I]; + } + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type & + write_element( this_quaternion & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I<4); + return x[I]; + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element_idx( int i, this_quaternion const & x ) + { + BOOST_QVM_ASSERT(i>=0); + BOOST_QVM_ASSERT(i<4); + return x[i]; + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type & + write_element_idx( int i, this_quaternion & x ) + { + BOOST_QVM_ASSERT(i>=0); + BOOST_QVM_ASSERT(i<4); + return x[i]; + } + }; + +template +struct +quat_traits const> + { + typedef std::array const this_quaternion; + typedef T scalar_type; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( this_quaternion & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I<4); + return x[I]; + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element_idx( int i, this_quaternion & x ) + { + BOOST_QVM_ASSERT(i>=0); + BOOST_QVM_ASSERT(i<4); + return x[i]; + } + }; + +template +struct +deduce_quat > + { + typedef quat type; + }; + +template +struct +deduce_quat const> + { + typedef quat type; + }; + +template +struct +deduce_quat2,std::array > + { + typedef quat::type> type; + }; + +template +struct +deduce_quat2 const,std::array > + { + typedef quat::type> type; + }; + +template +struct +deduce_quat2,std::array const> + { + typedef quat::type> type; + }; + +template +struct +deduce_quat2 const,std::array const> + { + typedef quat::type> type; + }; + +} } + +#endif + +namespace boost { namespace qvm { + +template +struct +quat_traits + { + typedef void scalar_type; + }; +template +struct +quat_traits + { + typedef void scalar_type; + }; +template +struct +quat_traits + { + typedef void scalar_type; + }; +template +struct +quat_traits + { + typedef void scalar_type; + }; +template +struct +quat_traits + { + typedef void scalar_type; + }; + +template +struct +quat_traits + { + typedef T this_quaternion[4]; + typedef T scalar_type; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( this_quaternion const & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I<4); + return x[I]; + } + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type & + write_element( this_quaternion & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I<4); + return x[I]; + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element_idx( int i, this_quaternion const & x ) + { + BOOST_QVM_ASSERT(i>=0); + BOOST_QVM_ASSERT(i<4); + return x[i]; + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type & + write_element_idx( int i, this_quaternion & x ) + { + BOOST_QVM_ASSERT(i>=0); + BOOST_QVM_ASSERT(i<4); + return x[i]; + } + }; + +template +struct +deduce_quat + { + typedef quat type; + }; + +template +struct +deduce_quat + { + typedef quat type; + }; + +template +struct +deduce_quat2 + { + typedef quat::type> type; + }; + +template +T (&ptr_qref( T * ptr ))[4] + { + return *reinterpret_cast(ptr); + } + +} } + +#endif diff --git a/inst/include/boost/qvm/quat_traits_defaults.hpp b/inst/include/boost/qvm/quat_traits_defaults.hpp new file mode 100644 index 000000000..935ece45c --- /dev/null +++ b/inst/include/boost/qvm/quat_traits_defaults.hpp @@ -0,0 +1,36 @@ +#ifndef BOOST_QVM_QUAT_TRAITS_DEFAULTS_HPP_INCLUDED +#define BOOST_QVM_QUAT_TRAITS_DEFAULTS_HPP_INCLUDED + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include + +namespace boost { namespace qvm { + +template +struct quat_traits; + +template +struct +quat_traits_defaults + { + typedef QuatType quat_type; + typedef ScalarType scalar_type; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( quat_type const & x ) + { + return quat_traits::template write_element(const_cast(x)); + } + }; + +} } + +#endif diff --git a/inst/include/boost/qvm/quat_vec_operations.hpp b/inst/include/boost/qvm/quat_vec_operations.hpp new file mode 100644 index 000000000..46156450f --- /dev/null +++ b/inst/include/boost/qvm/quat_vec_operations.hpp @@ -0,0 +1,58 @@ +#ifndef BOOST_QVM_QUAT_VEC_OPERATIONS_HPP_INCLUDED +#define BOOST_QVM_QUAT_VEC_OPERATIONS_HPP_INCLUDED + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include + +namespace boost { namespace qvm { + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_quat::value && + is_vec::value && vec_traits::dim==3, + deduce_vec2 >::type +operator*( A const & a, B const & b ) + { + typedef typename deduce_vec2::type R; + typedef typename quat_traits::scalar_type TA; + typedef typename vec_traits::scalar_type TB; + TA const aa = quat_traits::template read_element<0>(a); + TA const ab = quat_traits::template read_element<1>(a); + TA const ac = quat_traits::template read_element<2>(a); + TA const ad = quat_traits::template read_element<3>(a); + TA const t2 = aa*ab; + TA const t3 = aa*ac; + TA const t4 = aa*ad; + TA const t5 = -ab*ab; + TA const t6 = ab*ac; + TA const t7 = ab*ad; + TA const t8 = -ac*ac; + TA const t9 = ac*ad; + TA const t10 = -ad*ad; + TB const bx = vec_traits::template read_element<0>(b); + TB const by = vec_traits::template read_element<1>(b); + TB const bz = vec_traits::template read_element<2>(b); + R r; + write_vec_element<0>(r, 2*((t8+t10)*bx + (t6-t4)*by + (t3+t7)*bz) + bx); + write_vec_element<1>(r, 2*((t4+t6)*bx + (t5+t10)*by + (t9-t2)*bz) + by); + write_vec_element<2>(r, 2*((t7-t3)*bx + (t2+t9)*by + (t5+t8)*bz) + bz); + return r; + } + +namespace +sfinae + { + using ::boost::qvm::operator*; + } + +} } + +#endif diff --git a/inst/include/boost/qvm/swizzle.hpp b/inst/include/boost/qvm/swizzle.hpp new file mode 100644 index 000000000..b216c2712 --- /dev/null +++ b/inst/include/boost/qvm/swizzle.hpp @@ -0,0 +1,13 @@ +#ifndef BOOST_QVM_SWIZZLE_HPP_INCLUDED +#define BOOST_QVM_SWIZZLE_HPP_INCLUDED + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include + +#endif diff --git a/inst/include/boost/qvm/swizzle2.hpp b/inst/include/boost/qvm/swizzle2.hpp new file mode 100644 index 000000000..6bb0df29b --- /dev/null +++ b/inst/include/boost/qvm/swizzle2.hpp @@ -0,0 +1,6 @@ +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include diff --git a/inst/include/boost/qvm/swizzle3.hpp b/inst/include/boost/qvm/swizzle3.hpp new file mode 100644 index 000000000..c64e6c85f --- /dev/null +++ b/inst/include/boost/qvm/swizzle3.hpp @@ -0,0 +1,6 @@ +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include diff --git a/inst/include/boost/qvm/swizzle4.hpp b/inst/include/boost/qvm/swizzle4.hpp new file mode 100644 index 000000000..7c04e9b54 --- /dev/null +++ b/inst/include/boost/qvm/swizzle4.hpp @@ -0,0 +1,6 @@ +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include diff --git a/inst/include/boost/qvm/vec_operations.hpp b/inst/include/boost/qvm/vec_operations.hpp new file mode 100644 index 000000000..bfd8d5761 --- /dev/null +++ b/inst/include/boost/qvm/vec_operations.hpp @@ -0,0 +1,1018 @@ +#ifndef BOOST_QVM_VEC_OPERATIONS_HPP_INCLUDED +#define BOOST_QVM_VEC_OPERATIONS_HPP_INCLUDED + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. +// Copyright 2019 agate-pris + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include +#include +#include +#include + +namespace boost { namespace qvm { + +namespace +qvm_detail + { + BOOST_QVM_INLINE_CRITICAL + void const * + get_valid_ptr_vec_operations() + { + static int const obj=0; + return &obj; + } + } + +//////////////////////////////////////////////// + + +namespace +qvm_detail + { + template + struct + to_string_v_defined + { + static bool const value=false; + }; + + template + struct + to_string_vector_elements + { + template + static + std::string + f( A const & a ) + { + using namespace qvm_to_string_detail; + return to_string(vec_traits::template read_element(a))+','+to_string_vector_elements::f(a); + } + }; + + template + struct + to_string_vector_elements + { + template + static + std::string + f( A const & a ) + { + using namespace qvm_to_string_detail; + return to_string(vec_traits::template read_element(a)); + } + }; + } + +template +inline +typename enable_if_c< + is_vec::value && + !qvm_detail::to_string_v_defined::dim>::value, + std::string>::type +to_string( A const & a ) + { + return '('+qvm_detail::to_string_vector_elements<0,vec_traits::dim-1>::f(a)+')'; + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + struct + convert_to_v_defined + { + static bool const value=false; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value && is_vec::value && + vec_traits::dim==vec_traits::dim && + !qvm_detail::convert_to_v_defined::dim>::value, + R>::type +convert_to( A const & a ) + { + R r; assign(r,a); + return r; + } + +//////////////////////////////////////////////// + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_vec::value && is_vec::value && + vec_traits::dim==3 && vec_traits::dim==3, + deduce_vec2 >::type +cross( A const & a, B const & b ) + { + typedef typename deduce_vec2::type R; + R r; + write_vec_element<0>(r, + vec_traits::template read_element<1>(a)*vec_traits::template read_element<2>(b)- + vec_traits::template read_element<2>(a)*vec_traits::template read_element<1>(b)); + write_vec_element<1>(r, + vec_traits::template read_element<2>(a)*vec_traits::template read_element<0>(b)- + vec_traits::template read_element<0>(a)*vec_traits::template read_element<2>(b)); + write_vec_element<2>(r, + vec_traits::template read_element<0>(a)*vec_traits::template read_element<1>(b)- + vec_traits::template read_element<1>(a)*vec_traits::template read_element<0>(b)); + return r; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_vec::value && is_vec::value && + vec_traits::dim==2 && vec_traits::dim==2, + deduce_scalar::scalar_type,typename vec_traits::scalar_type> >::type +cross( A const & a, B const & b ) + { + typedef typename deduce_scalar::scalar_type,typename vec_traits::scalar_type>::type R; + R const r = + vec_traits::template read_element<0>(a)*vec_traits::template read_element<1>(b)- + vec_traits::template read_element<1>(a)*vec_traits::template read_element<0>(b); + return r; + } + +//////////////////////////////////////////////// + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_vec::value && is_vec::value && + vec_traits::dim==vec_traits::dim, + bool>::type +cmp( A const & a, B const & b, Cmp f ) + { + for( int i=0; i!=vec_traits::dim; ++i ) + if( !f( + vec_traits::read_element_idx(i,a), + vec_traits::read_element_idx(i,b)) ) + return false; + return true; + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + class + zero_vec_ + { + zero_vec_( zero_vec_ const & ); + zero_vec_ & operator=( zero_vec_ const & ); + ~zero_vec_(); + + public: + + template = 201103L + , class = typename enable_if >::type +#endif + > + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + operator R() const + { + R r; + assign(r,*this); + return r; + } + }; + } + +template +struct vec_traits; + +template +struct +vec_traits< qvm_detail::zero_vec_ > + { + typedef qvm_detail::zero_vec_ this_vector; + typedef T scalar_type; + static int const dim=Dim; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( this_vector const & ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I::value(0); + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element_idx( int i, this_vector const & ) + { + BOOST_QVM_ASSERT(i>=0); + BOOST_QVM_ASSERT(i::value(0); + } + }; + +template +struct +deduce_vec,D> + { + typedef vec type; + }; + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL +qvm_detail::zero_vec_ const & +zero_vec() + { + return *(qvm_detail::zero_vec_ const *)qvm_detail::get_valid_ptr_vec_operations(); + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_vec::value, + void>::type +set_zero( A & a ) + { + assign(a,zero_vec::scalar_type,vec_traits::dim>()); + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + class + vector_scalar_cast_ + { + vector_scalar_cast_( vector_scalar_cast_ const & ); + vector_scalar_cast_ & operator=( vector_scalar_cast_ const & ); + ~vector_scalar_cast_(); + + public: + + template + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + vector_scalar_cast_ & + operator=( T const & x ) + { + assign(*this,x); + return *this; + } + + template = 201103L + , class = typename enable_if >::type +#endif + > + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + operator R() const + { + R r; + assign(r,*this); + return r; + } + }; + + template struct scalar_cast_vector_filter { }; + template <> struct scalar_cast_vector_filter { typedef int type; }; + } + +template +struct +vec_traits< qvm_detail::vector_scalar_cast_ > + { + typedef Scalar scalar_type; + typedef qvm_detail::vector_scalar_cast_ this_vector; + static int const dim=vec_traits::dim; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( this_vector const & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I::template read_element(reinterpret_cast(x))); + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element_idx( int i, this_vector const & x ) + { + BOOST_QVM_ASSERT(i>=0); + BOOST_QVM_ASSERT(i::read_element_idx(i,reinterpret_cast(x))); + } + }; + +template +struct +deduce_vec,D> + { + typedef vec type; + }; + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL +qvm_detail::vector_scalar_cast_ const & +scalar_cast( T const & x, typename qvm_detail::scalar_cast_vector_filter::value>::type=0 ) + { + return reinterpret_cast const &>(x); + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + struct + div_eq_vs_defined + { + static bool const value=false; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_vec::value && is_scalar::value && + !qvm_detail::div_eq_vs_defined::dim>::value, + A &>::type +operator/=( A & a, B b ) + { + for( int i=0; i!=vec_traits::dim; ++i ) + write_vec_element_idx(i,a,vec_traits::read_element_idx(i,a)/b); + return a; + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + struct + div_vs_defined + { + static bool const value=false; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_vec::value && is_scalar::value && + !qvm_detail::div_vs_defined::dim>::value, + deduce_vec2::dim> >::type +operator/( A const & a, B b ) + { + typedef typename deduce_vec2::dim>::type R; + R r; + for( int i=0; i!=vec_traits::dim; ++i ) + write_vec_element_idx(i,r,vec_traits::read_element_idx(i,a)/b); + return r; + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + struct + dot_vv_defined + { + static bool const value=false; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_vec::value && is_vec::value && + vec_traits::dim==vec_traits::dim && + !qvm_detail::dot_vv_defined::dim>::value, + deduce_scalar::scalar_type,typename vec_traits::scalar_type> >::type +dot( A const & a, B const & b ) + { + typedef typename deduce_scalar::scalar_type,typename vec_traits::scalar_type>::type T; + T m(scalar_traits::value(0)); + for( int i=0; i!=vec_traits::dim; ++i ) + m+=vec_traits::read_element_idx(i,a)*vec_traits::read_element_idx(i,b); + return m; + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + struct + eq_vv_defined + { + static bool const value=false; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_vec::value && is_vec::value && + vec_traits::dim==vec_traits::dim && + !qvm_detail::eq_vv_defined::dim>::value, + bool>::type +operator==( A const & a, B const & b ) + { + for( int i=0; i!=vec_traits::dim; ++i ) + if( vec_traits::read_element_idx(i,a)!=vec_traits::read_element_idx(i,b) ) + return false; + return true; + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + struct + mag_sqr_v_defined + { + static bool const value=false; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_vec::value && + !qvm_detail::mag_sqr_v_defined::dim>::value, + typename vec_traits::scalar_type>::type +mag_sqr( A const & a ) + { + typedef typename vec_traits::scalar_type T; + T m(scalar_traits::value(0)); + for( int i=0; i!=vec_traits::dim; ++i ) + { + T x=vec_traits::read_element_idx(i,a); + m+=x*x; + } + return m; + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + struct + mag_v_defined + { + static bool const value=false; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_vec::value && + !qvm_detail::mag_v_defined::dim>::value, + typename vec_traits::scalar_type>::type +mag( A const & a ) + { + typedef typename vec_traits::scalar_type T; + T m(scalar_traits::value(0)); + for( int i=0; i!=vec_traits::dim; ++i ) + { + T x=vec_traits::read_element_idx(i,a); + m+=x*x; + } + return sqrt(m); + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + struct + minus_eq_vv_defined + { + static bool const value=false; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_vec::value && is_vec::value && + vec_traits::dim==vec_traits::dim && + !qvm_detail::minus_eq_vv_defined::dim>::value, + A &>::type +operator-=( A & a, B const & b ) + { + for( int i=0; i!=vec_traits::dim; ++i ) + write_vec_element_idx(i,a,vec_traits::read_element_idx(i,a)-vec_traits::read_element_idx(i,b)); + return a; + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + struct + minus_v_defined + { + static bool const value=false; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_vec::value && + !qvm_detail::minus_v_defined::dim>::value, + deduce_vec >::type +operator-( A const & a ) + { + typedef typename deduce_vec::type R; + R r; + for( int i=0; i!=vec_traits::dim; ++i ) + write_vec_element_idx(i,r,-vec_traits::read_element_idx(i,a)); + return r; + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + struct + minus_vv_defined + { + static bool const value=false; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_vec::value && is_vec::value && + vec_traits::dim==vec_traits::dim && + !qvm_detail::minus_vv_defined::dim>::value, + deduce_vec2::dim> >::type +operator-( A const & a, B const & b ) + { + typedef typename deduce_vec2::dim>::type R; + R r; + for( int i=0; i!=vec_traits::dim; ++i ) + write_vec_element_idx(i,r,vec_traits::read_element_idx(i,a)-vec_traits::read_element_idx(i,b)); + return r; + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + struct + mul_eq_vs_defined + { + static bool const value=false; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_vec::value && is_scalar::value && + !qvm_detail::mul_eq_vs_defined::dim>::value, + A &>::type +operator*=( A & a, B b ) + { + for( int i=0; i!=vec_traits::dim; ++i ) + write_vec_element_idx(i,a,vec_traits::read_element_idx(i,a)*b); + return a; + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + struct + mul_vs_defined + { + static bool const value=false; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_vec::value && is_scalar::value && + !qvm_detail::mul_vs_defined::dim>::value, + deduce_vec2::dim> >::type +operator*( A const & a, B b ) + { + typedef typename deduce_vec2::dim>::type R; + R r; + for( int i=0; i!=vec_traits::dim; ++i ) + write_vec_element_idx(i,r,vec_traits::read_element_idx(i,a)*b); + return r; + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + struct + mul_sv_defined + { + static bool const value=false; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_scalar::value && is_vec::value && + !qvm_detail::mul_sv_defined::dim>::value, + deduce_vec2::dim> >::type +operator*( A a, B const & b ) + { + typedef typename deduce_vec2::dim>::type R; + R r; + for( int i=0; i!=vec_traits::dim; ++i ) + write_vec_element_idx(i,r,a*vec_traits::read_element_idx(i,b)); + return r; + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + struct + neq_vv_defined + { + static bool const value=false; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_vec::value && is_vec::value && + vec_traits::dim==vec_traits::dim && + !qvm_detail::neq_vv_defined::dim>::value, + bool>::type +operator!=( A const & a, B const & b ) + { + for( int i=0; i!=vec_traits::dim; ++i ) + if( vec_traits::read_element_idx(i,a)!=vec_traits::read_element_idx(i,b) ) + return true; + return false; + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + struct + normalize_v_defined + { + static bool const value=false; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_vec::value && + !qvm_detail::normalize_v_defined::dim>::value, + deduce_vec >::type +normalized( A const & a ) + { + typedef typename vec_traits::scalar_type T; + T m(scalar_traits::value(0)); + for( int i=0; i!=vec_traits::dim; ++i ) + { + T x=vec_traits::read_element_idx(i,a); + m+=x*x; + } + if( m==scalar_traits::value(0) ) + BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error()); + T rm=scalar_traits::value(1)/sqrt(m); + typedef typename deduce_vec::type R; + R r; + for( int i=0; i!=vec_traits::dim; ++i ) + write_vec_element_idx(i,r,vec_traits::read_element_idx(i,a)*rm); + return r; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_vec::value && + !qvm_detail::normalize_v_defined::dim>::value, + void>::type +normalize( A & a ) + { + typedef typename vec_traits::scalar_type T; + T m(scalar_traits::value(0)); + for( int i=0; i!=vec_traits::dim; ++i ) + { + T x=vec_traits::read_element_idx(i,a); + m+=x*x; + } + if( m==scalar_traits::value(0) ) + BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error()); + T rm=scalar_traits::value(1)/sqrt(m); + for( int i=0; i!=vec_traits::dim; ++i ) + write_vec_element_idx(i,a,vec_traits::read_element_idx(i,a)*rm); + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + struct + plus_eq_vv_defined + { + static bool const value=false; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename enable_if_c< + is_vec::value && is_vec::value && + vec_traits::dim==vec_traits::dim && + !qvm_detail::plus_eq_vv_defined::dim>::value, + A &>::type +operator+=( A & a, B const & b ) + { + for( int i=0; i!=vec_traits::dim; ++i ) + write_vec_element_idx(i,a,vec_traits::read_element_idx(i,a)+vec_traits::read_element_idx(i,b)); + return a; + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + struct + plus_vv_defined + { + static bool const value=false; + }; + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS +typename lazy_enable_if_c< + is_vec::value && is_vec::value && + vec_traits::dim==vec_traits::dim && + !qvm_detail::plus_vv_defined::dim>::value, + deduce_vec2::dim> >::type +operator+( A const & a, B const & b ) + { + typedef typename deduce_vec2::dim>::type R; + R r; + for( int i=0; i!=vec_traits::dim; ++i ) + write_vec_element_idx(i,r,vec_traits::read_element_idx(i,a)+vec_traits::read_element_idx(i,b)); + return r; + } + +//////////////////////////////////////////////// + +namespace +qvm_detail + { + template + class + vref_ + { + vref_( vref_ const & ); + vref_ & operator=( vref_ const & ); + ~vref_(); + + public: + + template + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + vref_ & + operator=( R const & x ) + { + assign(*this,x); + return *this; + } + + template = 201103L + , class = typename enable_if >::type +#endif + > + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + operator R() const + { + R r; + assign(r,*this); + return r; + } + }; + + template ::value> + struct vref_write_traits; + + template + struct + vref_write_traits + { + typedef typename vec_traits::scalar_type scalar_type; + typedef qvm_detail::vref_ this_vector; + static int const dim=vec_traits::dim; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type & + write_element( this_vector & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I::template write_element(reinterpret_cast(x)); + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type & + write_element_idx( int i, this_vector & x ) + { + BOOST_QVM_ASSERT(i>=0); + BOOST_QVM_ASSERT(i::write_element_idx(i,reinterpret_cast(x)); + } + }; + + template + struct + vref_write_traits + { + typedef typename vec_traits::scalar_type scalar_type; + typedef qvm_detail::vref_ this_vector; + static int const dim=vec_traits::dim; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + void + write_element( this_vector & x, scalar_type s ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I::template write_element(reinterpret_cast(x), s); + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + void + write_element_idx( int i, this_vector & x, scalar_type s ) + { + BOOST_QVM_ASSERT(i>=0); + BOOST_QVM_ASSERT(i::write_element_idx(i,reinterpret_cast(x), s); + } + }; + } + +template +struct +vec_traits< qvm_detail::vref_ >: + qvm_detail::vref_write_traits + { + typedef typename vec_traits::scalar_type scalar_type; + typedef qvm_detail::vref_ this_vector; + static int const dim=vec_traits::dim; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( this_vector const & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I::template read_element(reinterpret_cast(x)); + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element_idx( int i, this_vector const & x ) + { + BOOST_QVM_ASSERT(i>=0); + BOOST_QVM_ASSERT(i::read_element_idx(i,reinterpret_cast(x)); + } + }; + +template +struct +deduce_vec,D> + { + typedef vec::scalar_type,D> type; + }; + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value, + qvm_detail::vref_ const &>::type +vref( V const & a ) + { + return reinterpret_cast const &>(a); + } + +template +BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL +typename enable_if_c< + is_vec::value, + qvm_detail::vref_ &>::type +vref( V & a ) + { + return reinterpret_cast &>(a); + } + +//////////////////////////////////////////////// + +namespace +sfinae + { + using ::boost::qvm::to_string; + using ::boost::qvm::assign; + using ::boost::qvm::convert_to; + using ::boost::qvm::cross; + using ::boost::qvm::cmp; + using ::boost::qvm::set_zero; + using ::boost::qvm::scalar_cast; + using ::boost::qvm::operator/=; + using ::boost::qvm::operator/; + using ::boost::qvm::dot; + using ::boost::qvm::operator==; + using ::boost::qvm::mag_sqr; + using ::boost::qvm::mag; + using ::boost::qvm::operator-=; + using ::boost::qvm::operator-; + using ::boost::qvm::operator*=; + using ::boost::qvm::operator*; + using ::boost::qvm::operator!=; + using ::boost::qvm::normalized; + using ::boost::qvm::normalize; + using ::boost::qvm::operator+=; + using ::boost::qvm::operator+; + using ::boost::qvm::vref; + } + +} } + +#endif diff --git a/inst/include/boost/qvm/vec_operations2.hpp b/inst/include/boost/qvm/vec_operations2.hpp new file mode 100644 index 000000000..729787d3d --- /dev/null +++ b/inst/include/boost/qvm/vec_operations2.hpp @@ -0,0 +1,6 @@ +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include diff --git a/inst/include/boost/qvm/vec_operations3.hpp b/inst/include/boost/qvm/vec_operations3.hpp new file mode 100644 index 000000000..992effaeb --- /dev/null +++ b/inst/include/boost/qvm/vec_operations3.hpp @@ -0,0 +1,6 @@ +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include diff --git a/inst/include/boost/qvm/vec_operations4.hpp b/inst/include/boost/qvm/vec_operations4.hpp new file mode 100644 index 000000000..4bbb8ef71 --- /dev/null +++ b/inst/include/boost/qvm/vec_operations4.hpp @@ -0,0 +1,6 @@ +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include diff --git a/inst/include/boost/qvm/vec_register.hpp b/inst/include/boost/qvm/vec_register.hpp new file mode 100644 index 000000000..55672a507 --- /dev/null +++ b/inst/include/boost/qvm/vec_register.hpp @@ -0,0 +1,14 @@ +#ifndef BOOST_QVM_VEC_REGISTER_HPP_INCLUDED +#define BOOST_QVM_VEC_REGISTER_HPP_INCLUDED + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. +// Copyright 2018 agate-pris + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include + +#endif diff --git a/inst/include/boost/qvm/vec_register2.hpp b/inst/include/boost/qvm/vec_register2.hpp new file mode 100644 index 000000000..5d99bb5b2 --- /dev/null +++ b/inst/include/boost/qvm/vec_register2.hpp @@ -0,0 +1,25 @@ +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. +// Copyright 2018 agate-pris + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_QVM_VEC_REGISTER2_HPP +#define BOOST_QVM_VEC_REGISTER2_HPP + +#include + +#define BOOST_QVM_REGISTER_VEC_2_READ(VecType, ScalarType, Read0, Read1) \ +BOOST_QVM_DETAIL_REGISTER_VEC_SPECIALIZE_VEC_TRAITS_READ(VecType, ScalarType, 2) \ +BOOST_QVM_DETAIL_SPECIALIZE_QVM_DETAIL_VEC_REGISTER_READ(VecType, ScalarType, 2, 0, Read0) \ +BOOST_QVM_DETAIL_SPECIALIZE_QVM_DETAIL_VEC_REGISTER_READ(VecType, ScalarType, 2, 1, Read1) + +#define BOOST_QVM_REGISTER_VEC_2_READ_WRITE(VecType, ScalarType, Read0, Read1, Write0, Write1) \ +BOOST_QVM_DETAIL_REGISTER_VEC_SPECIALIZE_VEC_TRAITS_READ_WRITE(VecType, ScalarType, 2) \ +BOOST_QVM_DETAIL_SPECIALIZE_QVM_DETAIL_VEC_REGISTER_READ_WRITE(VecType, ScalarType, 2, 0, Read0, Write0)\ +BOOST_QVM_DETAIL_SPECIALIZE_QVM_DETAIL_VEC_REGISTER_READ_WRITE(VecType, ScalarType, 2, 1, Read1, Write1) + +#define BOOST_QVM_REGISTER_VEC_2(VecType, ScalarType, Element0, Element1) \ +BOOST_QVM_REGISTER_VEC_2_READ_WRITE(VecType, ScalarType, Element0, Element1, Element0, Element1) + +#endif diff --git a/inst/include/boost/qvm/vec_register3.hpp b/inst/include/boost/qvm/vec_register3.hpp new file mode 100644 index 000000000..517a33f3d --- /dev/null +++ b/inst/include/boost/qvm/vec_register3.hpp @@ -0,0 +1,27 @@ +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. +// Copyright 2018 agate-pris + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_QVM_VEC_REGISTER3_HPP +#define BOOST_QVM_VEC_REGISTER3_HPP + +#include + +#define BOOST_QVM_REGISTER_VEC_3_READ(VecType, ScalarType, Read0, Read1, Read2) \ +BOOST_QVM_DETAIL_REGISTER_VEC_SPECIALIZE_VEC_TRAITS_READ(VecType, ScalarType, 3) \ +BOOST_QVM_DETAIL_SPECIALIZE_QVM_DETAIL_VEC_REGISTER_READ(VecType, ScalarType, 3, 0, Read0) \ +BOOST_QVM_DETAIL_SPECIALIZE_QVM_DETAIL_VEC_REGISTER_READ(VecType, ScalarType, 3, 1, Read1) \ +BOOST_QVM_DETAIL_SPECIALIZE_QVM_DETAIL_VEC_REGISTER_READ(VecType, ScalarType, 3, 2, Read2) + +#define BOOST_QVM_REGISTER_VEC_3_READ_WRITE(VecType, ScalarType, Read0, Read1, Read2, Write0, Write1, Write2) \ +BOOST_QVM_DETAIL_REGISTER_VEC_SPECIALIZE_VEC_TRAITS_READ_WRITE(VecType, ScalarType, 3) \ +BOOST_QVM_DETAIL_SPECIALIZE_QVM_DETAIL_VEC_REGISTER_READ_WRITE(VecType, ScalarType, 3, 0, Read0, Write0) \ +BOOST_QVM_DETAIL_SPECIALIZE_QVM_DETAIL_VEC_REGISTER_READ_WRITE(VecType, ScalarType, 3, 1, Read1, Write1) \ +BOOST_QVM_DETAIL_SPECIALIZE_QVM_DETAIL_VEC_REGISTER_READ_WRITE(VecType, ScalarType, 3, 2, Read2, Write2) + +#define BOOST_QVM_REGISTER_VEC_3(VecType, ScalarType, Element0, Element1, Element2) \ +BOOST_QVM_REGISTER_VEC_3_READ_WRITE(VecType, ScalarType, Element0, Element1, Element2, Element0, Element1, Element2) + +#endif diff --git a/inst/include/boost/qvm/vec_register4.hpp b/inst/include/boost/qvm/vec_register4.hpp new file mode 100644 index 000000000..18692946b --- /dev/null +++ b/inst/include/boost/qvm/vec_register4.hpp @@ -0,0 +1,29 @@ +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. +// Copyright 2018 agate-pris + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_QVM_VEC_REGISTER4_HPP +#define BOOST_QVM_VEC_REGISTER4_HPP + +#include + +#define BOOST_QVM_REGISTER_VEC_4_READ(VecType, ScalarType, Read0, Read1, Read2, Read3) \ +BOOST_QVM_DETAIL_REGISTER_VEC_SPECIALIZE_VEC_TRAITS_READ(VecType, ScalarType, 4) \ +BOOST_QVM_DETAIL_SPECIALIZE_QVM_DETAIL_VEC_REGISTER_READ(VecType, ScalarType, 4, 0, Read0) \ +BOOST_QVM_DETAIL_SPECIALIZE_QVM_DETAIL_VEC_REGISTER_READ(VecType, ScalarType, 4, 1, Read1) \ +BOOST_QVM_DETAIL_SPECIALIZE_QVM_DETAIL_VEC_REGISTER_READ(VecType, ScalarType, 4, 2, Read2) \ +BOOST_QVM_DETAIL_SPECIALIZE_QVM_DETAIL_VEC_REGISTER_READ(VecType, ScalarType, 4, 3, Read3) + +#define BOOST_QVM_REGISTER_VEC_4_READ_WRITE(VecType, ScalarType, Read0, Read1, Read2, Read3, Write0, Write1, Write2, Write3)\ +BOOST_QVM_DETAIL_REGISTER_VEC_SPECIALIZE_VEC_TRAITS_READ_WRITE(VecType, ScalarType, 4) \ +BOOST_QVM_DETAIL_SPECIALIZE_QVM_DETAIL_VEC_REGISTER_READ_WRITE(VecType, ScalarType, 4, 0, Read0, Write0) \ +BOOST_QVM_DETAIL_SPECIALIZE_QVM_DETAIL_VEC_REGISTER_READ_WRITE(VecType, ScalarType, 4, 1, Read1, Write1) \ +BOOST_QVM_DETAIL_SPECIALIZE_QVM_DETAIL_VEC_REGISTER_READ_WRITE(VecType, ScalarType, 4, 2, Read2, Write2) \ +BOOST_QVM_DETAIL_SPECIALIZE_QVM_DETAIL_VEC_REGISTER_READ_WRITE(VecType, ScalarType, 4, 3, Read3, Write3) + +#define BOOST_QVM_REGISTER_VEC_4(VecType, ScalarType, Element0, Element1, Element2, Element3) \ +BOOST_QVM_REGISTER_VEC_4_READ_WRITE(VecType, ScalarType, Element0, Element1, Element2, Element3, Element0, Element1, Element2, Element3) + +#endif diff --git a/inst/include/boost/qvm/vec_traits_array.hpp b/inst/include/boost/qvm/vec_traits_array.hpp new file mode 100644 index 000000000..5af5acbda --- /dev/null +++ b/inst/include/boost/qvm/vec_traits_array.hpp @@ -0,0 +1,244 @@ +#ifndef BOOST_QVM_VEC_TRAITS_ARRAY_HPP_INCLUDED +#define BOOST_QVM_VEC_TRAITS_ARRAY_HPP_INCLUDED + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include + +#if __cplusplus > 199711L + +#include + +namespace boost { namespace qvm { + +template +struct +vec_traits,N> > + { + static int const dim=0; + typedef void scalar_type; + }; + +template +struct +vec_traits > + { + typedef std::array this_vector; + typedef T scalar_type; + static int const dim=int(Dim); + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( this_vector const & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type & + write_element( this_vector & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I=0); + BOOST_QVM_ASSERT(i=0); + BOOST_QVM_ASSERT(i +struct +vec_traits const> + { + typedef std::array const this_vector; + typedef T scalar_type; + static int const dim=int(Dim); + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( this_vector & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I=0); + BOOST_QVM_ASSERT(i +struct +deduce_vec,D> + { + typedef vec type; + }; + +template +struct +deduce_vec const,D> + { + typedef vec type; + }; + +template +struct +deduce_vec2,std::array,D> + { + typedef vec::type,D> type; + }; + +template +struct +deduce_vec2 const,std::array,D> + { + typedef vec::type,D> type; + }; + +template +struct +deduce_vec2,std::array const,D> + { + typedef vec::type,D> type; + }; + +template +struct +deduce_vec2 const,std::array const,D> + { + typedef vec::type,D> type; + }; + +} } + +#endif + +namespace boost { namespace qvm { + +template +struct +vec_traits + { + static int const dim=0; + typedef void scalar_type; + }; + +template +struct +vec_traits + { + typedef T this_vector[Dim]; + typedef T scalar_type; + static int const dim=Dim; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( this_vector const & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type & + write_element( this_vector & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I=0); + BOOST_QVM_ASSERT(i=0); + BOOST_QVM_ASSERT(i +struct +deduce_vec + { + typedef vec type; + }; + +template +struct +deduce_vec + { + typedef vec type; + }; + +template +struct +deduce_vec2 + { + typedef vec::type,D> type; + }; + +template +T (&ptr_vref( T * ptr ))[Dim] + { + return *reinterpret_cast(ptr); + } + +} } + +#endif diff --git a/inst/include/boost/qvm/vec_traits_defaults.hpp b/inst/include/boost/qvm/vec_traits_defaults.hpp new file mode 100644 index 000000000..7e16a9979 --- /dev/null +++ b/inst/include/boost/qvm/vec_traits_defaults.hpp @@ -0,0 +1,90 @@ +#ifndef BOOST_QVM_VEC_TRAITS_DEFAULTS_HPP_INCLUDED +#define BOOST_QVM_VEC_TRAITS_DEFAULTS_HPP_INCLUDED + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include + +namespace boost { namespace qvm { + +template +struct vec_traits; + +namespace +qvm_detail + { + template + struct + vector_w + { + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + typename vec_traits::scalar_type & + write_element_idx( int i, A & a ) + { + return I==i? + vec_traits::template write_element(a) : + vector_w::write_element_idx(i,a); + } + }; + + template + struct + vector_w + { + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + typename vec_traits::scalar_type & + write_element_idx( int, A & a ) + { + BOOST_QVM_ASSERT(0); + return vec_traits::template write_element<0>(a); + } + }; + } + +template +struct +vec_traits_defaults + { + typedef VecType vec_type; + typedef ScalarType scalar_type; + static int const dim=Dim; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( vec_type const & x ) + { + return vec_traits::template write_element(const_cast(x)); + } + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element_idx( int i, vec_type const & x ) + { + return vec_traits::write_element_idx(i,const_cast(x)); + } + + protected: + + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL + scalar_type & + write_element_idx( int i, vec_type & m ) + { + return qvm_detail::vector_w<0,vec_traits::dim>::write_element_idx(i,m); + } + }; + +} } + +#endif diff --git a/inst/include/boost/qvm/vec_traits_gnuc.hpp b/inst/include/boost/qvm/vec_traits_gnuc.hpp new file mode 100644 index 000000000..7c6de36f8 --- /dev/null +++ b/inst/include/boost/qvm/vec_traits_gnuc.hpp @@ -0,0 +1,99 @@ +#ifndef BOOST_QVM_VEC_TRAITS_GNUC_HPP_INCLUDED +#define BOOST_QVM_VEC_TRAITS_GNUC_HPP_INCLUDED + +// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc. + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#if defined(__GNUC__) && defined(__SSE2__) + +#include +#include +#include + +namespace boost { namespace qvm { + +namespace +qvm_detail + { + template + struct + vec_traits_gnuc_impl + { + typedef T scalar_type; + static int const dim=D; + + template + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + scalar_type + read_element( V const & x ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I + static + BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL + void + write_element( V & x, scalar_type s ) + { + BOOST_QVM_STATIC_ASSERT(I>=0); + BOOST_QVM_STATIC_ASSERT(I=0); + BOOST_QVM_ASSERT(i=0); + BOOST_QVM_ASSERT(i struct vec_traits; +template struct is_vec; + +#define BOOST_QVM_GNUC_VEC_TYPE(T,D)\ + template <>\ + struct\ + vec_traits:\ + qvm_detail::vec_traits_gnuc_impl\ + {\ + };\ + template <>\ + struct\ + is_vec\ + {\ + enum { value = true };\ + }; + +BOOST_QVM_GNUC_VEC_TYPE(float,2) +BOOST_QVM_GNUC_VEC_TYPE(float,4) +BOOST_QVM_GNUC_VEC_TYPE(double,2) +BOOST_QVM_GNUC_VEC_TYPE(double,4) + +#undef BOOST_QVM_GNUC_VEC_TYPE + +} } + +#endif + +#endif diff --git a/inst/include/boost/timer/progress_display.hpp b/inst/include/boost/timer/progress_display.hpp new file mode 100644 index 000000000..ff56924fe --- /dev/null +++ b/inst/include/boost/timer/progress_display.hpp @@ -0,0 +1,94 @@ + +// Copyright Beman Dawes 1994-99. +// Copyright Peter Dimov 2019. +// Distributed under the Boost Software License, Version 1.0. +// (http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/timer for documentation. + +#ifndef BOOST_TIMER_PROGRESS_DISPLAY_HPP_INCLUDED +#define BOOST_TIMER_PROGRESS_DISPLAY_HPP_INCLUDED + +#include // for ostream, cout, etc +#include // for string + +namespace boost { +namespace timer { + +// progress_display --------------------------------------------------------// + +// progress_display displays an appropriate indication of +// progress at an appropriate place in an appropriate form. + +class progress_display +{ + private: + + progress_display( progress_display const& ); + progress_display& operator=( progress_display const& ); + + public: + explicit progress_display( unsigned long expected_count_, + std::ostream & os = std::cout, + const std::string & s1 = "\n", //leading strings + const std::string & s2 = "", + const std::string & s3 = "" ) + // os is hint; implementation may ignore, particularly in embedded systems + : m_os(os), m_s1(s1), m_s2(s2), m_s3(s3) { restart(expected_count_); } + + void restart( unsigned long expected_count_ ) + // Effects: display appropriate scale + // Postconditions: count()==0, expected_count()==expected_count_ + { + _count = _next_tic_count = _tic = 0; + _expected_count = expected_count_; + + m_os << m_s1 << "0% 10 20 30 40 50 60 70 80 90 100%\n" + << m_s2 << "|----|----|----|----|----|----|----|----|----|----|" + << std::endl // endl implies flush, which ensures display + << m_s3; + if ( !_expected_count ) _expected_count = 1; // prevent divide by zero + } // restart + + unsigned long operator+=( unsigned long increment ) + // Effects: Display appropriate progress tic if needed. + // Postconditions: count()== original count() + increment + // Returns: count(). + { + if ( (_count += increment) >= _next_tic_count ) { display_tic(); } + return _count; + } + + unsigned long operator++() { return operator+=( 1 ); } + unsigned long count() const { return _count; } + unsigned long expected_count() const { return _expected_count; } + + private: + std::ostream & m_os; // may not be present in all imps + const std::string m_s1; // string is more general, safer than + const std::string m_s2; // const char *, and efficiency or size are + const std::string m_s3; // not issues + + unsigned long _count, _expected_count, _next_tic_count; + unsigned int _tic; + void display_tic() + { + // use of floating point ensures that both large and small counts + // work correctly. static_cast<>() is also used several places + // to suppress spurious compiler warnings. + unsigned int tics_needed = static_cast((static_cast(_count) + / static_cast(_expected_count)) * 50.0); + do { m_os << '*' << std::flush; } while ( ++_tic < tics_needed ); + _next_tic_count = + static_cast((_tic/50.0) * static_cast(_expected_count)); + if ( _count == _expected_count ) { + if ( _tic < 51 ) m_os << '*'; + m_os << std::endl; + } + } // display_tic +}; + +} // namespace timer +} // namespace boost + +#endif // BOOST_TIMER_PROGRESS_DISPLAY_HPP_INCLUDED From e8a2d2f2305cc2cb33b451d5c3a93d3125870cff Mon Sep 17 00:00:00 2001 From: Dirk Eddelbuettel Date: Sun, 17 Dec 2023 09:48:53 -0600 Subject: [PATCH 2/2] Update script to include qvm and timer --- local/scripts/CreateBoost.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/local/scripts/CreateBoost.sh b/local/scripts/CreateBoost.sh index 0eb2e96c1..5e4223d71 100755 --- a/local/scripts/CreateBoost.sh +++ b/local/scripts/CreateBoost.sh @@ -13,7 +13,7 @@ pkgdir="${HOME}/git/bh" boosttargz="boost_1_84_0.tar.gz" ## -- current package version and date (and other metadata as needed) version="1.84.0-0" -date="2023-12-13" +date="2023-12-17" @@ -141,11 +141,13 @@ bcp --boost=${boostroot} ${boostlibs} ${pkgincl} > /dev/null 2>&1 # Plus lambda2 (issue ticket #81) # Plus process (issue ticket #78) # Plus url (new in 1.81.0) +# Plus timer (issue ticket #84) +# Plus qvm (issue ticket #97) boostextras="spirit foreach algorithm iostreams \ dynamic_bitset heap any circular_buffer geometry fusion graph \ multiprecision phoenix bimap icl flyweight property_tree \ scope_exit atomic align sort compute mp11 polygon accumulators \ - beast lambda2 process url" + beast lambda2 process url timer qvm" echo "Copying (extra) Boost libraries into BH"