summaryrefslogtreecommitdiff
path: root/boost/qvm/gen/vec_operations3.hpp
diff options
context:
space:
mode:
authorDongHun Kwak <dh0128.kwak@samsung.com>2016-10-06 10:41:18 +0900
committerDongHun Kwak <dh0128.kwak@samsung.com>2016-10-06 10:43:11 +0900
commitf763a99a501650eff2c60288aa6f10ef916d769e (patch)
tree02af7e13f9a38c888ebf340fe764cbe7dae99da9 /boost/qvm/gen/vec_operations3.hpp
parent5cde13f21d36c7224b0e13d11c4b49379ae5210d (diff)
downloadboost-f763a99a501650eff2c60288aa6f10ef916d769e.tar.gz
boost-f763a99a501650eff2c60288aa6f10ef916d769e.tar.bz2
boost-f763a99a501650eff2c60288aa6f10ef916d769e.zip
Imported Upstream version 1.62.0upstream/1.62.0
Change-Id: I9d4c1ddb7b7d8f0069217ecc582700f9fda6dd4c Signed-off-by: DongHun Kwak <dh0128.kwak@samsung.com>
Diffstat (limited to 'boost/qvm/gen/vec_operations3.hpp')
-rw-r--r--boost/qvm/gen/vec_operations3.hpp653
1 files changed, 653 insertions, 0 deletions
diff --git a/boost/qvm/gen/vec_operations3.hpp b/boost/qvm/gen/vec_operations3.hpp
new file mode 100644
index 0000000000..405848fd85
--- /dev/null
+++ b/boost/qvm/gen/vec_operations3.hpp
@@ -0,0 +1,653 @@
+//Copyright (c) 2008-2016 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)
+
+#ifndef BOOST_QVM_209A50EE407836FD124932F69E7D49DC
+#define BOOST_QVM_209A50EE407836FD124932F69E7D49DC
+
+//This file was generated by a program. Do not edit manually.
+
+#include <boost/qvm/deduce_scalar.hpp>
+#include <boost/qvm/deduce_vec.hpp>
+#include <boost/qvm/enable_if.hpp>
+#include <boost/qvm/error.hpp>
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/math.hpp>
+#include <boost/qvm/static_assert.hpp>
+#include <boost/qvm/throw_exception.hpp>
+#include <boost/qvm/vec_traits.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
+ deduce_vec2<A,B,3> >::type
+ operator+( A const & a, B const & b )
+ {
+ typedef typename deduce_vec2<A,B,3>::type R;
+ BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==3);
+ R r;
+ vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)+vec_traits<B>::template read_element<0>(b);
+ vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)+vec_traits<B>::template read_element<1>(b);
+ vec_traits<R>::template write_element<2>(r)=vec_traits<A>::template read_element<2>(a)+vec_traits<B>::template read_element<2>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct plus_vv_defined;
+
+ template <>
+ struct
+ plus_vv_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
+ deduce_vec2<A,B,3> >::type
+ operator-( A const & a, B const & b )
+ {
+ typedef typename deduce_vec2<A,B,3>::type R;
+ BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==3);
+ R r;
+ vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)-vec_traits<B>::template read_element<0>(b);
+ vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)-vec_traits<B>::template read_element<1>(b);
+ vec_traits<R>::template write_element<2>(r)=vec_traits<A>::template read_element<2>(a)-vec_traits<B>::template read_element<2>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct minus_vv_defined;
+
+ template <>
+ struct
+ minus_vv_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
+ A &>::type
+ operator+=( A & a, B const & b )
+ {
+ vec_traits<A>::template write_element<0>(a)+=vec_traits<B>::template read_element<0>(b);
+ vec_traits<A>::template write_element<1>(a)+=vec_traits<B>::template read_element<1>(b);
+ vec_traits<A>::template write_element<2>(a)+=vec_traits<B>::template read_element<2>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct plus_eq_vv_defined;
+
+ template <>
+ struct
+ plus_eq_vv_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
+ A &>::type
+ operator-=( A & a, B const & b )
+ {
+ vec_traits<A>::template write_element<0>(a)-=vec_traits<B>::template read_element<0>(b);
+ vec_traits<A>::template write_element<1>(a)-=vec_traits<B>::template read_element<1>(b);
+ vec_traits<A>::template write_element<2>(a)-=vec_traits<B>::template read_element<2>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct minus_eq_vv_defined;
+
+ template <>
+ struct
+ minus_eq_vv_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==3 && is_scalar<B>::value,
+ deduce_vec<A> >::type
+ operator*( A const & a, B b )
+ {
+ typedef typename deduce_vec<A>::type R;
+ R r;
+ vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)*b;
+ vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)*b;
+ vec_traits<R>::template write_element<2>(r)=vec_traits<A>::template read_element<2>(a)*b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct mul_vs_defined;
+
+ template <>
+ struct
+ mul_vs_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==3 && is_scalar<B>::value,
+ A &>::type
+ operator*=( A & a, B b )
+ {
+ vec_traits<A>::template write_element<0>(a)*=b;
+ vec_traits<A>::template write_element<1>(a)*=b;
+ vec_traits<A>::template write_element<2>(a)*=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct mul_eq_vs_defined;
+
+ template <>
+ struct
+ mul_eq_vs_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==3 && is_scalar<B>::value,
+ deduce_vec<A> >::type
+ operator/( A const & a, B b )
+ {
+ typedef typename deduce_vec<A>::type R;
+ R r;
+ vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)/b;
+ vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)/b;
+ vec_traits<R>::template write_element<2>(r)=vec_traits<A>::template read_element<2>(a)/b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct div_vs_defined;
+
+ template <>
+ struct
+ div_vs_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==3 && is_scalar<B>::value,
+ A &>::type
+ operator/=( A & a, B b )
+ {
+ vec_traits<A>::template write_element<0>(a)/=b;
+ vec_traits<A>::template write_element<1>(a)/=b;
+ vec_traits<A>::template write_element<2>(a)/=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct div_eq_vs_defined;
+
+ template <>
+ struct
+ div_eq_vs_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
+ A &>::type
+ assign( A & a, B const & b )
+ {
+ vec_traits<A>::template write_element<0>(a)=vec_traits<B>::template read_element<0>(b);
+ vec_traits<A>::template write_element<1>(a)=vec_traits<B>::template read_element<1>(b);
+ vec_traits<A>::template write_element<2>(a)=vec_traits<B>::template read_element<2>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::assign;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct assign_vv_defined;
+
+ template <>
+ struct
+ assign_vv_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class R,class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_vec<A>::value &&
+ vec_traits<R>::dim==3 && vec_traits<A>::dim==3,
+ R>::type
+ convert_to( A const & a )
+ {
+ R r;
+ vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a);
+ vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a);
+ vec_traits<R>::template write_element<2>(r)=vec_traits<A>::template read_element<2>(a);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::convert_to;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct convert_to_v_defined;
+
+ template <>
+ struct
+ convert_to_v_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
+ bool>::type
+ operator==( A const & a, B const & b )
+ {
+ return
+ vec_traits<A>::template read_element<0>(a)==vec_traits<B>::template read_element<0>(b) &&
+ vec_traits<A>::template read_element<1>(a)==vec_traits<B>::template read_element<1>(b) &&
+ vec_traits<A>::template read_element<2>(a)==vec_traits<B>::template read_element<2>(b);
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator==;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct eq_vv_defined;
+
+ template <>
+ struct
+ eq_vv_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
+ bool>::type
+ operator!=( A const & a, B const & b )
+ {
+ return
+ !(vec_traits<A>::template read_element<0>(a)==vec_traits<B>::template read_element<0>(b)) ||
+ !(vec_traits<A>::template read_element<1>(a)==vec_traits<B>::template read_element<1>(b)) ||
+ !(vec_traits<A>::template read_element<2>(a)==vec_traits<B>::template read_element<2>(b));
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator!=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct neq_vv_defined;
+
+ template <>
+ struct
+ neq_vv_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==3,
+ deduce_vec<A> >::type
+ operator-( A const & a )
+ {
+ typedef typename deduce_vec<A>::type R;
+ R r;
+ vec_traits<R>::template write_element<0>(r)=-vec_traits<A>::template read_element<0>(a);
+ vec_traits<R>::template write_element<1>(r)=-vec_traits<A>::template read_element<1>(a);
+ vec_traits<R>::template write_element<2>(r)=-vec_traits<A>::template read_element<2>(a);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct minus_v_defined;
+
+ template <>
+ struct
+ minus_v_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_vec<A>::value && vec_traits<A>::dim==3,
+ typename vec_traits<A>::scalar_type>::type
+ mag( A const & a )
+ {
+ typedef typename vec_traits<A>::scalar_type T;
+ T const a0=vec_traits<A>::template read_element<0>(a);
+ T const a1=vec_traits<A>::template read_element<1>(a);
+ T const a2=vec_traits<A>::template read_element<2>(a);
+ T const m2=a0*a0+a1*a1+a2*a2;
+ T const mag=sqrt<T>(m2);
+ return mag;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::mag;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct mag_v_defined;
+
+ template <>
+ struct
+ mag_v_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_vec<A>::value && vec_traits<A>::dim==3,
+ typename vec_traits<A>::scalar_type>::type
+ mag_sqr( A const & a )
+ {
+ typedef typename vec_traits<A>::scalar_type T;
+ T const a0=vec_traits<A>::template read_element<0>(a);
+ T const a1=vec_traits<A>::template read_element<1>(a);
+ T const a2=vec_traits<A>::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 <int D>
+ struct mag_sqr_v_defined;
+
+ template <>
+ struct
+ mag_sqr_v_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==3,
+ deduce_vec<A> >::type
+ normalized( A const & a )
+ {
+ typedef typename vec_traits<A>::scalar_type T;
+ T const a0=vec_traits<A>::template read_element<0>(a);
+ T const a1=vec_traits<A>::template read_element<1>(a);
+ T const a2=vec_traits<A>::template read_element<2>(a);
+ T const m2=a0*a0+a1*a1+a2*a2;
+ if( m2==scalar_traits<typename vec_traits<A>::scalar_type>::value(0) )
+ BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
+ T const rm=scalar_traits<T>::value(1)/sqrt<T>(m2);
+ typedef typename deduce_vec<A>::type R;
+ R r;
+ vec_traits<R>::template write_element<0>(r)=a0*rm;
+ vec_traits<R>::template write_element<1>(r)=a1*rm;
+ vec_traits<R>::template write_element<2>(r)=a2*rm;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::normalized;
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==3,
+ void>::type
+ normalize( A & a )
+ {
+ typedef typename vec_traits<A>::scalar_type T;
+ T const a0=vec_traits<A>::template read_element<0>(a);
+ T const a1=vec_traits<A>::template read_element<1>(a);
+ T const a2=vec_traits<A>::template read_element<2>(a);
+ T const m2=a0*a0+a1*a1+a2*a2;
+ if( m2==scalar_traits<typename vec_traits<A>::scalar_type>::value(0) )
+ BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
+ T const rm=scalar_traits<T>::value(1)/sqrt<T>(m2);
+ vec_traits<A>::template write_element<0>(a)*=rm;
+ vec_traits<A>::template write_element<1>(a)*=rm;
+ vec_traits<A>::template write_element<2>(a)*=rm;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::normalize;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct normalize_v_defined;
+
+ template <>
+ struct
+ normalize_v_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
+ deduce_scalar<typename vec_traits<A>::scalar_type,typename vec_traits<B>::scalar_type> >::type
+ dot( A const & a, B const & b )
+ {
+ typedef typename vec_traits<A>::scalar_type Ta;
+ typedef typename vec_traits<B>::scalar_type Tb;
+ typedef typename deduce_scalar<Ta,Tb>::type Tr;
+ Ta const a0=vec_traits<A>::template read_element<0>(a);
+ Ta const a1=vec_traits<A>::template read_element<1>(a);
+ Ta const a2=vec_traits<A>::template read_element<2>(a);
+ Tb const b0=vec_traits<B>::template read_element<0>(b);
+ Tb const b1=vec_traits<B>::template read_element<1>(b);
+ Tb const b2=vec_traits<B>::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 <int D>
+ struct dot_vv_defined;
+
+ template <>
+ struct
+ dot_vv_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ }
+ }
+
+#endif