/
usr
/
include
/
boost
/
qvm
/
/usr/include/boost/qvm
mkdir
upload
Name
Size
Mode
Actions
detail/
-
0755
rm
gen/
-
0755
rm
all.hpp
1154
0644
edit
dl
rm
assert.hpp
319
0644
edit
dl
rm
deduce_mat.hpp
2667
0644
edit
dl
rm
deduce_quat.hpp
1634
0644
edit
dl
rm
deduce_scalar.hpp
10290
0644
edit
dl
rm
deduce_vec.hpp
2304
0644
edit
dl
rm
enable_if.hpp
584
0644
edit
dl
rm
error.hpp
956
0644
edit
dl
rm
inline.hpp
976
0644
edit
dl
rm
map.hpp
443
0644
edit
dl
rm
map_mat_mat.hpp
32426
0644
edit
dl
rm
map_mat_vec.hpp
17906
0644
edit
dl
rm
map_vec_mat.hpp
20995
0644
edit
dl
rm
mat.hpp
2858
0644
edit
dl
rm
math.hpp
8031
0644
edit
dl
rm
mat_access.hpp
57007
0644
edit
dl
rm
mat_operations.hpp
84053
0644
edit
dl
rm
mat_operations2.hpp
266
0644
edit
dl
rm
mat_operations3.hpp
266
0644
edit
dl
rm
mat_operations4.hpp
266
0644
edit
dl
rm
mat_traits.hpp
775
0644
edit
dl
rm
mat_traits_array.hpp
3562
0644
edit
dl
rm
mat_traits_defaults.hpp
2914
0644
edit
dl
rm
operations.hpp
542
0644
edit
dl
rm
quat.hpp
1686
0644
edit
dl
rm
quat_access.hpp
4989
0644
edit
dl
rm
quat_operations.hpp
53560
0644
edit
dl
rm
quat_traits.hpp
1113
0644
edit
dl
rm
quat_traits_array.hpp
3303
0644
edit
dl
rm
quat_traits_defaults.hpp
1026
0644
edit
dl
rm
quat_vec_operations.hpp
2288
0644
edit
dl
rm
scalar_traits.hpp
2958
0644
edit
dl
rm
static_assert.hpp
347
0644
edit
dl
rm
swizzle.hpp
434
0644
edit
dl
rm
swizzle2.hpp
259
0644
edit
dl
rm
swizzle3.hpp
259
0644
edit
dl
rm
swizzle4.hpp
259
0644
edit
dl
rm
throw_exception.hpp
355
0644
edit
dl
rm
to_string.hpp
724
0644
edit
dl
rm
vec.hpp
2311
0644
edit
dl
rm
vec_access.hpp
8377
0644
edit
dl
rm
vec_mat_operations.hpp
7019
0644
edit
dl
rm
vec_mat_operations2.hpp
270
0644
edit
dl
rm
vec_mat_operations3.hpp
270
0644
edit
dl
rm
vec_mat_operations4.hpp
270
0644
edit
dl
rm
vec_operations.hpp
30368
0644
edit
dl
rm
vec_operations2.hpp
266
0644
edit
dl
rm
vec_operations3.hpp
266
0644
edit
dl
rm
vec_operations4.hpp
266
0644
edit
dl
rm
vec_register.hpp
449
0644
edit
dl
rm
vec_register2.hpp
1358
0644
edit
dl
rm
vec_register3.hpp
1620
0644
edit
dl
rm
vec_register4.hpp
1918
0644
edit
dl
rm
vec_traits.hpp
711
0644
edit
dl
rm
vec_traits_array.hpp
2875
0644
edit
dl
rm
vec_traits_defaults.hpp
2690
0644
edit
dl
rm
Edit:
/usr/include/boost/qvm/map_mat_vec.hpp
(17906B)
//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_5265FC7CA1C011DE9EBDFFA956D89593 #define BOOST_QVM_5265FC7CA1C011DE9EBDFFA956D89593 #include <boost/qvm/inline.hpp> #include <boost/qvm/mat_traits.hpp> #include <boost/qvm/deduce_vec.hpp> #include <boost/qvm/assert.hpp> #include <boost/qvm/enable_if.hpp> namespace boost { namespace qvm { //////////////////////////////////////////////// namespace qvm_detail { template <int Col,class OriginalMatrix> class col_ { col_( col_ const & ); col_ & operator=( col_ const & ); ~col_(); public: template <class T> BOOST_QVM_INLINE_TRIVIAL col_ & operator=( T const & x ) { assign(*this,x); return *this; } template <class R> BOOST_QVM_INLINE_TRIVIAL operator R() const { R r; assign(r,*this); return r; } }; } template <int Col,class OriginalMatrix> struct vec_traits< qvm_detail::col_<Col,OriginalMatrix> > { typedef qvm_detail::col_<Col,OriginalMatrix> this_vector; typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type; static int const dim=mat_traits<OriginalMatrix>::rows; BOOST_QVM_STATIC_ASSERT(Col>=0); BOOST_QVM_STATIC_ASSERT(Col<mat_traits<OriginalMatrix>::cols); template <int I> static BOOST_QVM_INLINE_CRITICAL scalar_type read_element( this_vector const & x ) { BOOST_QVM_STATIC_ASSERT(I>=0); BOOST_QVM_STATIC_ASSERT(I<dim); return mat_traits<OriginalMatrix>::template read_element<I,Col>(reinterpret_cast<OriginalMatrix const &>(x)); } template <int I> static BOOST_QVM_INLINE_CRITICAL scalar_type & write_element( this_vector & x ) { BOOST_QVM_STATIC_ASSERT(I>=0); BOOST_QVM_STATIC_ASSERT(I<dim); return mat_traits<OriginalMatrix>::template write_element<I,Col>(reinterpret_cast<OriginalMatrix &>(x)); } static BOOST_QVM_INLINE_CRITICAL scalar_type read_element_idx( int i, this_vector const & x ) { BOOST_QVM_ASSERT(i>=0); BOOST_QVM_ASSERT(i<dim); return mat_traits<OriginalMatrix>::read_element_idx(i,Col,reinterpret_cast<OriginalMatrix const &>(x)); } static BOOST_QVM_INLINE_CRITICAL scalar_type & write_element_idx( int i, this_vector & x ) { BOOST_QVM_ASSERT(i>=0); BOOST_QVM_ASSERT(i<dim); return mat_traits<OriginalMatrix>::write_element_idx(i,Col,reinterpret_cast<OriginalMatrix &>(x)); } }; template <int Col,class OriginalMatrix,int D> struct deduce_vec<qvm_detail::col_<Col,OriginalMatrix>,D> { typedef vec<typename mat_traits<OriginalMatrix>::scalar_type,D> type; }; template <int Col,class OriginalMatrix,int D> struct deduce_vec2<qvm_detail::col_<Col,OriginalMatrix>,qvm_detail::col_<Col,OriginalMatrix>,D> { typedef vec<typename mat_traits<OriginalMatrix>::scalar_type,D> type; }; template <int Col,class A> typename boost::enable_if_c< is_mat<A>::value, qvm_detail::col_<Col,A> const &>::type BOOST_QVM_INLINE_TRIVIAL col( A const & a ) { return reinterpret_cast<typename qvm_detail::col_<Col,A> const &>(a); } template <int Col,class A> typename boost::enable_if_c< is_mat<A>::value, qvm_detail::col_<Col,A> &>::type BOOST_QVM_INLINE_TRIVIAL col( A & a ) { return reinterpret_cast<typename qvm_detail::col_<Col,A> &>(a); } //////////////////////////////////////////////// namespace qvm_detail { template <int Row,class OriginalMatrix> class row_ { row_( row_ const & ); row_ & operator=( row_ const & ); ~row_(); public: template <class T> BOOST_QVM_INLINE_TRIVIAL row_ & operator=( T const & x ) { assign(*this,x); return *this; } template <class R> BOOST_QVM_INLINE_TRIVIAL operator R() const { R r; assign(r,*this); return r; } }; } template <int Row,class OriginalMatrix> struct vec_traits< qvm_detail::row_<Row,OriginalMatrix> > { typedef qvm_detail::row_<Row,OriginalMatrix> this_vector; typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type; static int const dim=mat_traits<OriginalMatrix>::cols; BOOST_QVM_STATIC_ASSERT(Row>=0); BOOST_QVM_STATIC_ASSERT(Row<mat_traits<OriginalMatrix>::rows); template <int I> static BOOST_QVM_INLINE_CRITICAL scalar_type read_element( this_vector const & x ) { BOOST_QVM_STATIC_ASSERT(I>=0); BOOST_QVM_STATIC_ASSERT(I<dim); return mat_traits<OriginalMatrix>::template read_element<Row,I>(reinterpret_cast<OriginalMatrix const &>(x)); } template <int I> static BOOST_QVM_INLINE_CRITICAL scalar_type & write_element( this_vector & x ) { BOOST_QVM_STATIC_ASSERT(I>=0); BOOST_QVM_STATIC_ASSERT(I<dim); return mat_traits<OriginalMatrix>::template write_element<Row,I>(reinterpret_cast<OriginalMatrix &>(x)); } static BOOST_QVM_INLINE_CRITICAL scalar_type read_element_idx( int i, this_vector const & x ) { BOOST_QVM_ASSERT(i>=0); BOOST_QVM_ASSERT(i<dim); return mat_traits<OriginalMatrix>::read_element_idx(Row,i,reinterpret_cast<OriginalMatrix const &>(x)); } static BOOST_QVM_INLINE_CRITICAL scalar_type & write_element_idx( int i, this_vector & x ) { BOOST_QVM_ASSERT(i>=0); BOOST_QVM_ASSERT(i<dim); return mat_traits<OriginalMatrix>::write_element_idx(Row,i,reinterpret_cast<OriginalMatrix &>(x)); } }; template <int Row,class OriginalMatrix,int D> struct deduce_vec<qvm_detail::row_<Row,OriginalMatrix>,D> { typedef vec<typename mat_traits<OriginalMatrix>::scalar_type,D> type; }; template <int Row,class OriginalMatrix,int D> struct deduce_vec2<qvm_detail::row_<Row,OriginalMatrix>,qvm_detail::row_<Row,OriginalMatrix>,D> { typedef vec<typename mat_traits<OriginalMatrix>::scalar_type,D> type; }; template <int Row,class A> typename boost::enable_if_c< is_mat<A>::value, qvm_detail::row_<Row,A> const &>::type BOOST_QVM_INLINE_TRIVIAL row( A const & a ) { return reinterpret_cast<typename qvm_detail::row_<Row,A> const &>(a); } template <int Row,class A> typename boost::enable_if_c< is_mat<A>::value, qvm_detail::row_<Row,A> &>::type BOOST_QVM_INLINE_TRIVIAL row( A & a ) { return reinterpret_cast<typename qvm_detail::row_<Row,A> &>(a); } //////////////////////////////////////////////// namespace qvm_detail { template <class OriginalMatrix> class diag_ { diag_( diag_ const & ); diag_ & operator=( diag_ const & ); ~diag_(); public: template <class T> BOOST_QVM_INLINE_TRIVIAL diag_ & operator=( T const & x ) { assign(*this,x); return *this; } template <class R> BOOST_QVM_INLINE_TRIVIAL operator R() const { R r; assign(r,*this); return r; } }; template <int X,int Y,bool Which> struct diag_bool_dispatch; template <int X,int Y> struct diag_bool_dispatch<X,Y,true> { static int const value=X; }; template <int X,int Y> struct diag_bool_dispatch<X,Y,false> { static int const value=Y; }; } template <class OriginalMatrix> struct vec_traits< qvm_detail::diag_<OriginalMatrix> > { typedef qvm_detail::diag_<OriginalMatrix> this_vector; typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type; static int const dim=qvm_detail::diag_bool_dispatch< mat_traits<OriginalMatrix>::rows, mat_traits<OriginalMatrix>::cols, mat_traits<OriginalMatrix>::rows<=mat_traits<OriginalMatrix>::cols>::value; template <int I> static BOOST_QVM_INLINE_CRITICAL scalar_type read_element( this_vector const & x ) { BOOST_QVM_STATIC_ASSERT(I>=0); BOOST_QVM_STATIC_ASSERT(I<dim); return mat_traits<OriginalMatrix>::template read_element<I,I>(reinterpret_cast<OriginalMatrix const &>(x)); } template <int I> static BOOST_QVM_INLINE_CRITICAL scalar_type & write_element( this_vector & x ) { BOOST_QVM_STATIC_ASSERT(I>=0); BOOST_QVM_STATIC_ASSERT(I<dim); return mat_traits<OriginalMatrix>::template write_element<I,I>(reinterpret_cast<OriginalMatrix &>(x)); } static BOOST_QVM_INLINE_CRITICAL scalar_type read_element_idx( int i, this_vector const & x ) { BOOST_QVM_ASSERT(i>=0); BOOST_QVM_ASSERT(i<dim); return mat_traits<OriginalMatrix>::read_element_idx(i,i,reinterpret_cast<OriginalMatrix const &>(x)); } static BOOST_QVM_INLINE_CRITICAL scalar_type & write_element_idx( int i, this_vector & x ) { BOOST_QVM_ASSERT(i>=0); BOOST_QVM_ASSERT(i<dim); return mat_traits<OriginalMatrix>::write_element_idx(i,i,reinterpret_cast<OriginalMatrix &>(x)); } }; template <class OriginalMatrix,int D> struct deduce_vec<qvm_detail::diag_<OriginalMatrix>,D> { typedef vec<typename mat_traits<OriginalMatrix>::scalar_type,D> type; }; template <class OriginalMatrix,int D> struct deduce_vec2<qvm_detail::diag_<OriginalMatrix>,qvm_detail::diag_<OriginalMatrix>,D> { typedef vec<typename mat_traits<OriginalMatrix>::scalar_type,D> type; }; template <class A> typename boost::enable_if_c< is_mat<A>::value, qvm_detail::diag_<A> const &>::type BOOST_QVM_INLINE_TRIVIAL diag( A const & a ) { return reinterpret_cast<typename qvm_detail::diag_<A> const &>(a); } template <class A> typename boost::enable_if_c< is_mat<A>::value, qvm_detail::diag_<A> &>::type BOOST_QVM_INLINE_TRIVIAL diag( A & a ) { return reinterpret_cast<typename qvm_detail::diag_<A> &>(a); } //////////////////////////////////////////////// namespace qvm_detail { template <class OriginalMatrix> class translation_ { translation_( translation_ const & ); ~translation_(); public: translation_ & operator=( translation_ const & x ) { assign(*this,x); return *this; } template <class T> BOOST_QVM_INLINE_TRIVIAL translation_ & operator=( T const & x ) { assign(*this,x); return *this; } template <class R> BOOST_QVM_INLINE_TRIVIAL operator R() const { R r; assign(r,*this); return r; } }; } template <class OriginalMatrix> struct vec_traits< qvm_detail::translation_<OriginalMatrix> > { typedef qvm_detail::translation_<OriginalMatrix> this_vector; typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type; static int const dim=mat_traits<OriginalMatrix>::rows-1; BOOST_QVM_STATIC_ASSERT(mat_traits<OriginalMatrix>::rows==mat_traits<OriginalMatrix>::cols); BOOST_QVM_STATIC_ASSERT(mat_traits<OriginalMatrix>::rows>=3); template <int I> static BOOST_QVM_INLINE_CRITICAL scalar_type read_element( this_vector const & x ) { BOOST_QVM_STATIC_ASSERT(I>=0); BOOST_QVM_STATIC_ASSERT(I<dim); return mat_traits<OriginalMatrix>::template read_element<I,dim>(reinterpret_cast<OriginalMatrix const &>(x)); } template <int I> static BOOST_QVM_INLINE_CRITICAL scalar_type & write_element( this_vector & x ) { BOOST_QVM_STATIC_ASSERT(I>=0); BOOST_QVM_STATIC_ASSERT(I<dim); return mat_traits<OriginalMatrix>::template write_element<I,dim>(reinterpret_cast<OriginalMatrix &>(x)); } static BOOST_QVM_INLINE_CRITICAL scalar_type read_element_idx( int i, this_vector const & x ) { BOOST_QVM_ASSERT(i>=0); BOOST_QVM_ASSERT(i<dim); return mat_traits<OriginalMatrix>::read_element_idx(i,dim,reinterpret_cast<OriginalMatrix const &>(x)); } static BOOST_QVM_INLINE_CRITICAL scalar_type & write_element_idx( int i, this_vector & x ) { BOOST_QVM_ASSERT(i>=0); BOOST_QVM_ASSERT(i<dim); return mat_traits<OriginalMatrix>::write_element_idx(i,dim,reinterpret_cast<OriginalMatrix &>(x)); } }; template <class OriginalMatrix,int D> struct deduce_vec<qvm_detail::translation_<OriginalMatrix>,D> { typedef vec<typename mat_traits<OriginalMatrix>::scalar_type,D> type; }; template <class OriginalMatrix,int D> struct deduce_vec2<qvm_detail::translation_<OriginalMatrix>,qvm_detail::translation_<OriginalMatrix>,D> { typedef vec<typename mat_traits<OriginalMatrix>::scalar_type,D> type; }; template <class A> typename boost::enable_if_c< is_mat<A>::value && mat_traits<A>::rows==mat_traits<A>::cols && mat_traits<A>::rows>=3, qvm_detail::translation_<A> const &>::type BOOST_QVM_INLINE_TRIVIAL translation( A const & a ) { return reinterpret_cast<typename qvm_detail::translation_<A> const &>(a); } template <class A> typename boost::enable_if_c< is_mat<A>::value && mat_traits<A>::rows==mat_traits<A>::cols && mat_traits<A>::rows>=3, qvm_detail::translation_<A> &>::type BOOST_QVM_INLINE_TRIVIAL translation( A & a ) { return reinterpret_cast<typename qvm_detail::translation_<A> &>(a); } //////////////////////////////////////////////// } } #endif
Save
//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_5265FC7CA1C011DE9EBDFFA956D89593 #define BOOST_QVM_5265FC7CA1C011DE9EBDFFA956D89593 #include
#include
#include
#include
#include
namespace boost { namespace qvm { //////////////////////////////////////////////// namespace qvm_detail { template
class col_ { col_( col_ const & ); col_ & operator=( col_ const & ); ~col_(); public: template
BOOST_QVM_INLINE_TRIVIAL col_ & operator=( T const & x ) { assign(*this,x); return *this; } template
BOOST_QVM_INLINE_TRIVIAL operator R() const { R r; assign(r,*this); return r; } }; } template
struct vec_traits< qvm_detail::col_
> { typedef qvm_detail::col_
this_vector; typedef typename mat_traits
::scalar_type scalar_type; static int const dim=mat_traits
::rows; BOOST_QVM_STATIC_ASSERT(Col>=0); BOOST_QVM_STATIC_ASSERT(Col
::cols); template
static 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)); } template
static 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_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,Col,reinterpret_cast
(x)); } static 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,Col,reinterpret_cast
(x)); } }; template
struct deduce_vec
,D> { typedef vec
::scalar_type,D> type; }; template
struct deduce_vec2
,qvm_detail::col_
,D> { typedef vec
::scalar_type,D> type; }; template
typename boost::enable_if_c< is_mat
::value, qvm_detail::col_
const &>::type BOOST_QVM_INLINE_TRIVIAL col( A const & a ) { return reinterpret_cast
const &>(a); } template
typename boost::enable_if_c< is_mat
::value, qvm_detail::col_
&>::type BOOST_QVM_INLINE_TRIVIAL col( A & a ) { return reinterpret_cast
&>(a); } //////////////////////////////////////////////// namespace qvm_detail { template
class row_ { row_( row_ const & ); row_ & operator=( row_ const & ); ~row_(); public: template
BOOST_QVM_INLINE_TRIVIAL row_ & operator=( T const & x ) { assign(*this,x); return *this; } template
BOOST_QVM_INLINE_TRIVIAL operator R() const { R r; assign(r,*this); return r; } }; } template
struct vec_traits< qvm_detail::row_
> { typedef qvm_detail::row_
this_vector; typedef typename mat_traits
::scalar_type scalar_type; static int const dim=mat_traits
::cols; BOOST_QVM_STATIC_ASSERT(Row>=0); BOOST_QVM_STATIC_ASSERT(Row
::rows); template
static 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)); } template
static 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_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(Row,i,reinterpret_cast
(x)); } static 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(Row,i,reinterpret_cast
(x)); } }; template
struct deduce_vec
,D> { typedef vec
::scalar_type,D> type; }; template
struct deduce_vec2
,qvm_detail::row_
,D> { typedef vec
::scalar_type,D> type; }; template
typename boost::enable_if_c< is_mat
::value, qvm_detail::row_
const &>::type BOOST_QVM_INLINE_TRIVIAL row( A const & a ) { return reinterpret_cast
const &>(a); } template
typename boost::enable_if_c< is_mat
::value, qvm_detail::row_
&>::type BOOST_QVM_INLINE_TRIVIAL row( A & a ) { return reinterpret_cast
&>(a); } //////////////////////////////////////////////// namespace qvm_detail { template
class diag_ { diag_( diag_ const & ); diag_ & operator=( diag_ const & ); ~diag_(); public: template
BOOST_QVM_INLINE_TRIVIAL diag_ & operator=( T const & x ) { assign(*this,x); return *this; } template
BOOST_QVM_INLINE_TRIVIAL operator R() const { R r; assign(r,*this); return r; } }; template
struct diag_bool_dispatch; template
struct diag_bool_dispatch
{ static int const value=X; }; template
struct diag_bool_dispatch
{ static int const value=Y; }; } template
struct vec_traits< qvm_detail::diag_
> { typedef qvm_detail::diag_
this_vector; typedef typename mat_traits
::scalar_type scalar_type; static int const dim=qvm_detail::diag_bool_dispatch< mat_traits
::rows, mat_traits
::cols, mat_traits
::rows<=mat_traits
::cols>::value; template
static 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)); } template
static 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_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,i,reinterpret_cast
(x)); } static 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,i,reinterpret_cast
(x)); } }; template
struct deduce_vec
,D> { typedef vec
::scalar_type,D> type; }; template
struct deduce_vec2
,qvm_detail::diag_
,D> { typedef vec
::scalar_type,D> type; }; template
typename boost::enable_if_c< is_mat
::value, qvm_detail::diag_
const &>::type BOOST_QVM_INLINE_TRIVIAL diag( A const & a ) { return reinterpret_cast
const &>(a); } template
typename boost::enable_if_c< is_mat
::value, qvm_detail::diag_
&>::type BOOST_QVM_INLINE_TRIVIAL diag( A & a ) { return reinterpret_cast
&>(a); } //////////////////////////////////////////////// namespace qvm_detail { template
class translation_ { translation_( translation_ const & ); ~translation_(); public: translation_ & operator=( translation_ const & x ) { assign(*this,x); return *this; } template
BOOST_QVM_INLINE_TRIVIAL translation_ & operator=( T const & x ) { assign(*this,x); return *this; } template
BOOST_QVM_INLINE_TRIVIAL operator R() const { R r; assign(r,*this); return r; } }; } template
struct vec_traits< qvm_detail::translation_
> { typedef qvm_detail::translation_
this_vector; typedef typename mat_traits
::scalar_type scalar_type; static int const dim=mat_traits
::rows-1; BOOST_QVM_STATIC_ASSERT(mat_traits
::rows==mat_traits
::cols); BOOST_QVM_STATIC_ASSERT(mat_traits
::rows>=3); template
static 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)); } template
static 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_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,dim,reinterpret_cast
(x)); } static 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,dim,reinterpret_cast
(x)); } }; template
struct deduce_vec
,D> { typedef vec
::scalar_type,D> type; }; template
struct deduce_vec2
,qvm_detail::translation_
,D> { typedef vec
::scalar_type,D> type; }; template
typename boost::enable_if_c< is_mat
::value && mat_traits
::rows==mat_traits
::cols && mat_traits
::rows>=3, qvm_detail::translation_
const &>::type BOOST_QVM_INLINE_TRIVIAL translation( A const & a ) { return reinterpret_cast
const &>(a); } template
typename boost::enable_if_c< is_mat
::value && mat_traits
::rows==mat_traits
::cols && mat_traits
::rows>=3, qvm_detail::translation_
&>::type BOOST_QVM_INLINE_TRIVIAL translation( A & a ) { return reinterpret_cast
&>(a); } //////////////////////////////////////////////// } } #endif