//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 UUID_49C5A1042AEF11DF9603880056D89593 #define UUID_49C5A1042AEF11DF9603880056D89593 #include #include #include namespace boost { namespace qvm { template struct quat { T a[4]; template 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_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_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