/
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_vec_mat.hpp
(20995B)
//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_3EDF999CA1C011DEBA5C8DA956D89593 #define BOOST_QVM_3EDF999CA1C011DEBA5C8DA956D89593 #include <boost/qvm/inline.hpp> #include <boost/qvm/deduce_mat.hpp> #include <boost/qvm/vec_traits.hpp> #include <boost/qvm/assert.hpp> #include <boost/qvm/enable_if.hpp> namespace boost { namespace qvm { //////////////////////////////////////////////// namespace qvm_detail { template <class OriginalVector> class col_mat_ { col_mat_( col_mat_ const & ); col_mat_ & operator=( col_mat_ const & ); ~col_mat_(); public: template <class T> BOOST_QVM_INLINE_TRIVIAL col_mat_ & 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 OriginalVector> struct mat_traits< qvm_detail::col_mat_<OriginalVector> > { typedef qvm_detail::col_mat_<OriginalVector> this_matrix; typedef typename vec_traits<OriginalVector>::scalar_type scalar_type; static int const rows=vec_traits<OriginalVector>::dim; static int const cols=1; template <int Row,int Col> static 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<rows); return vec_traits<OriginalVector>::template read_element<Row>(reinterpret_cast<OriginalVector const &>(x)); } template <int Row,int Col> static 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<rows); return vec_traits<OriginalVector>::template write_element<Row>(reinterpret_cast<OriginalVector &>(x)); } static 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<rows); return vec_traits<OriginalVector>::read_element_idx(row,reinterpret_cast<OriginalVector const &>(x)); } static 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<rows); return vec_traits<OriginalVector>::write_element_idx(row,reinterpret_cast<OriginalVector &>(x)); } }; template <class OriginalVector,int R,int C> struct deduce_mat<qvm_detail::col_mat_<OriginalVector>,R,C> { typedef mat<typename vec_traits<OriginalVector>::scalar_type,R,C> type; }; template <class OriginalVector,int R,int C> struct deduce_mat2<qvm_detail::col_mat_<OriginalVector>,qvm_detail::col_mat_<OriginalVector>,R,C> { typedef mat<typename vec_traits<OriginalVector>::scalar_type,R,C> type; }; template <class A> typename boost::enable_if_c< is_vec<A>::value, qvm_detail::col_mat_<A> const &>::type BOOST_QVM_INLINE_TRIVIAL col_mat( A const & a ) { return reinterpret_cast<typename qvm_detail::col_mat_<A> const &>(a); } template <class A> typename boost::enable_if_c< is_vec<A>::value, qvm_detail::col_mat_<A> &>::type BOOST_QVM_INLINE_TRIVIAL col_mat( A & a ) { return reinterpret_cast<typename qvm_detail::col_mat_<A> &>(a); } //////////////////////////////////////////////// namespace qvm_detail { template <class OriginalVector> class row_mat_ { row_mat_( row_mat_ const & ); row_mat_ & operator=( row_mat_ const & ); ~row_mat_(); public: template <class T> BOOST_QVM_INLINE_TRIVIAL row_mat_ & 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 OriginalVector> struct mat_traits< qvm_detail::row_mat_<OriginalVector> > { typedef qvm_detail::row_mat_<OriginalVector> this_matrix; typedef typename vec_traits<OriginalVector>::scalar_type scalar_type; static int const rows=1; static int const cols=vec_traits<OriginalVector>::dim; template <int Row,int Col> static 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<cols); return vec_traits<OriginalVector>::template read_element<Col>(reinterpret_cast<OriginalVector const &>(x)); } template <int Row,int Col> static 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<cols); return vec_traits<OriginalVector>::template write_element<Col>(reinterpret_cast<OriginalVector &>(x)); } static 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<cols); return vec_traits<OriginalVector>::read_element_idx(col,reinterpret_cast<OriginalVector const &>(x)); } static 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<cols); return vec_traits<OriginalVector>::write_element_idx(col,reinterpret_cast<OriginalVector &>(x)); } }; template <class OriginalVector,int R,int C> struct deduce_mat<qvm_detail::row_mat_<OriginalVector>,R,C> { typedef mat<typename vec_traits<OriginalVector>::scalar_type,R,C> type; }; template <class OriginalVector,int R,int C> struct deduce_mat2<qvm_detail::row_mat_<OriginalVector>,qvm_detail::row_mat_<OriginalVector>,R,C> { typedef mat<typename vec_traits<OriginalVector>::scalar_type,R,C> type; }; template <class A> typename boost::enable_if_c< is_vec<A>::value, qvm_detail::row_mat_<A> const &>::type BOOST_QVM_INLINE_TRIVIAL row_mat( A const & a ) { return reinterpret_cast<typename qvm_detail::row_mat_<A> const &>(a); } template <class A> typename boost::enable_if_c< is_vec<A>::value, qvm_detail::row_mat_<A> &>::type BOOST_QVM_INLINE_TRIVIAL row_mat( A & a ) { return reinterpret_cast<typename qvm_detail::row_mat_<A> &>(a); } //////////////////////////////////////////////// namespace qvm_detail { template <class OriginalVector> class translation_mat_ { translation_mat_( translation_mat_ const & ); translation_mat_ & operator=( translation_mat_ const & ); ~translation_mat_(); public: template <class T> BOOST_QVM_INLINE_TRIVIAL translation_mat_ & 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 M,int Row,int Col,bool TransCol=(Col==mat_traits<M>::cols-1)> struct read_translation_matat; template <class OriginalVector,int Row,int Col,bool TransCol> struct read_translation_matat<translation_mat_<OriginalVector>,Row,Col,TransCol> { static BOOST_QVM_INLINE_CRITICAL typename mat_traits< translation_mat_<OriginalVector> >::scalar_type f( translation_mat_<OriginalVector> const & ) { return scalar_traits<typename mat_traits< translation_mat_<OriginalVector> >::scalar_type>::value(0); } }; template <class OriginalVector,int D> struct read_translation_matat<translation_mat_<OriginalVector>,D,D,false> { static BOOST_QVM_INLINE_CRITICAL typename mat_traits< translation_mat_<OriginalVector> >::scalar_type f( translation_mat_<OriginalVector> const & ) { return scalar_traits<typename mat_traits< translation_mat_<OriginalVector> >::scalar_type>::value(1); } }; template <class OriginalVector,int D> struct read_translation_matat<translation_mat_<OriginalVector>,D,D,true> { static BOOST_QVM_INLINE_CRITICAL typename mat_traits< translation_mat_<OriginalVector> >::scalar_type f( translation_mat_<OriginalVector> const & ) { return scalar_traits<typename mat_traits< translation_mat_<OriginalVector> >::scalar_type>::value(1); } }; template <class OriginalVector,int Row,int Col> struct read_translation_matat<translation_mat_<OriginalVector>,Row,Col,true> { static BOOST_QVM_INLINE_CRITICAL typename mat_traits< translation_mat_<OriginalVector> >::scalar_type f( translation_mat_<OriginalVector> const & x ) { return vec_traits<OriginalVector>::template read_element<Row>(reinterpret_cast<OriginalVector const &>(x)); } }; } template <class OriginalVector> struct mat_traits< qvm_detail::translation_mat_<OriginalVector> > { typedef qvm_detail::translation_mat_<OriginalVector> this_matrix; typedef typename vec_traits<OriginalVector>::scalar_type scalar_type; static int const rows=vec_traits<OriginalVector>::dim+1; static int const cols=vec_traits<OriginalVector>::dim+1; template <int Row,int Col> static BOOST_QVM_INLINE_CRITICAL scalar_type read_element( this_matrix const & x ) { BOOST_QVM_STATIC_ASSERT(Row>=0); BOOST_QVM_STATIC_ASSERT(Row<rows); BOOST_QVM_STATIC_ASSERT(Col>=0); BOOST_QVM_STATIC_ASSERT(Col<cols); return qvm_detail::read_translation_matat<qvm_detail::translation_mat_<OriginalVector>,Row,Col>::f(x); } template <int Row,int Col> static BOOST_QVM_INLINE_CRITICAL scalar_type & write_element( this_matrix & x ) { BOOST_QVM_STATIC_ASSERT(Row>=0); BOOST_QVM_STATIC_ASSERT(Row<rows); BOOST_QVM_STATIC_ASSERT(Col==cols-1); BOOST_QVM_STATIC_ASSERT(Col!=Row); return vec_traits<OriginalVector>::template write_element<Row>(reinterpret_cast<OriginalVector &>(x)); } static 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<rows); BOOST_QVM_ASSERT(col>=0); BOOST_QVM_ASSERT(col<cols); return row==col? scalar_traits<scalar_type>::value(1): (col==cols-1? vec_traits<OriginalVector>::read_element_idx(row,reinterpret_cast<OriginalVector const &>(x)): scalar_traits<scalar_type>::value(0)); } static 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<rows); BOOST_QVM_ASSERT(col==cols-1); BOOST_QVM_ASSERT(col!=row); return vec_traits<OriginalVector>::write_element_idx(row,reinterpret_cast<OriginalVector &>(x)); } }; template <class OriginalVector,int R,int C> struct deduce_mat<qvm_detail::translation_mat_<OriginalVector>,R,C> { typedef mat<typename vec_traits<OriginalVector>::scalar_type,R,C> type; }; template <class OriginalVector,int R,int C> struct deduce_mat2<qvm_detail::translation_mat_<OriginalVector>,qvm_detail::translation_mat_<OriginalVector>,R,C> { typedef mat<typename vec_traits<OriginalVector>::scalar_type,R,C> type; }; template <class A> typename boost::enable_if_c< is_vec<A>::value, qvm_detail::translation_mat_<A> const &>::type BOOST_QVM_INLINE_TRIVIAL translation_mat( A const & a ) { return reinterpret_cast<typename qvm_detail::translation_mat_<A> const &>(a); } template <class A> typename boost::enable_if_c< is_vec<A>::value, qvm_detail::translation_mat_<A> &>::type BOOST_QVM_INLINE_TRIVIAL translation_mat( A & a ) { return reinterpret_cast<typename qvm_detail::translation_mat_<A> &>(a); } //////////////////////////////////////////////// namespace qvm_detail { template <class OriginalVector> class diag_mat_ { diag_mat_( diag_mat_ const & ); diag_mat_ & operator=( diag_mat_ const & ); ~diag_mat_(); public: template <class T> BOOST_QVM_INLINE_TRIVIAL diag_mat_ & 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 OriginalVector> struct mat_traits< qvm_detail::diag_mat_<OriginalVector> > { typedef qvm_detail::diag_mat_<OriginalVector> this_matrix; typedef typename vec_traits<OriginalVector>::scalar_type scalar_type; static int const rows=vec_traits<OriginalVector>::dim; static int const cols=vec_traits<OriginalVector>::dim; template <int Row,int Col> static BOOST_QVM_INLINE_CRITICAL scalar_type read_element( this_matrix const & x ) { BOOST_QVM_STATIC_ASSERT(Row>=0); BOOST_QVM_STATIC_ASSERT(Row<rows); BOOST_QVM_STATIC_ASSERT(Col>=0); BOOST_QVM_STATIC_ASSERT(Col<cols); return Row==Col?vec_traits<OriginalVector>::template read_element<Row>(reinterpret_cast<OriginalVector const &>(x)):scalar_traits<scalar_type>::value(0); } template <int Row,int Col> static BOOST_QVM_INLINE_CRITICAL scalar_type & write_element( this_matrix & x ) { BOOST_QVM_STATIC_ASSERT(Row>=0); BOOST_QVM_STATIC_ASSERT(Row<rows); BOOST_QVM_STATIC_ASSERT(Row==Col); return vec_traits<OriginalVector>::template write_element<Row>(reinterpret_cast<OriginalVector &>(x)); } static 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<rows); BOOST_QVM_ASSERT(col>=0); BOOST_QVM_ASSERT(col<cols); return row==col?vec_traits<OriginalVector>::read_element_idx(row,reinterpret_cast<OriginalVector const &>(x)):scalar_traits<scalar_type>::value(0); } static 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<rows); BOOST_QVM_ASSERT(row==col); return vec_traits<OriginalVector>::write_element_idx(row,reinterpret_cast<OriginalVector &>(x)); } }; template <class OriginalVector,int R,int C> struct deduce_mat<qvm_detail::diag_mat_<OriginalVector>,R,C> { typedef mat<typename vec_traits<OriginalVector>::scalar_type,R,C> type; }; template <class OriginalVector,int R,int C> struct deduce_mat2<qvm_detail::diag_mat_<OriginalVector>,qvm_detail::diag_mat_<OriginalVector>,R,C> { typedef mat<typename vec_traits<OriginalVector>::scalar_type,R,C> type; }; template <class A> typename boost::enable_if_c< is_vec<A>::value, qvm_detail::diag_mat_<A> const &>::type BOOST_QVM_INLINE_TRIVIAL diag_mat( A const & a ) { return reinterpret_cast<typename qvm_detail::diag_mat_<A> const &>(a); } template <class A> typename boost::enable_if_c< is_vec<A>::value, qvm_detail::diag_mat_<A> &>::type BOOST_QVM_INLINE_TRIVIAL diag_mat( A & a ) { return reinterpret_cast<typename qvm_detail::diag_mat_<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_3EDF999CA1C011DEBA5C8DA956D89593 #define BOOST_QVM_3EDF999CA1C011DEBA5C8DA956D89593 #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_INLINE_TRIVIAL col_mat_ & 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 mat_traits< qvm_detail::col_mat_
> { 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_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)); } template
static 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_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)); } static 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 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 boost::enable_if_c< is_vec
::value, qvm_detail::col_mat_
const &>::type BOOST_QVM_INLINE_TRIVIAL col_mat( A const & a ) { return reinterpret_cast
const &>(a); } template
typename boost::enable_if_c< is_vec
::value, qvm_detail::col_mat_
&>::type 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_INLINE_TRIVIAL row_mat_ & 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 mat_traits< qvm_detail::row_mat_
> { 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_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)); } template
static 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_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)); } static 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 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 boost::enable_if_c< is_vec
::value, qvm_detail::row_mat_
const &>::type BOOST_QVM_INLINE_TRIVIAL row_mat( A const & a ) { return reinterpret_cast
const &>(a); } template
typename boost::enable_if_c< is_vec
::value, qvm_detail::row_mat_
&>::type 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_INLINE_TRIVIAL translation_mat_ & 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
::cols-1)> struct read_translation_matat; template
struct read_translation_matat
,Row,Col,TransCol> { static 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_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_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_INLINE_CRITICAL typename mat_traits< translation_mat_
>::scalar_type f( translation_mat_
const & x ) { return vec_traits
::template read_element
(reinterpret_cast
(x)); } }; } template
struct mat_traits< qvm_detail::translation_mat_
> { 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_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); } template
static 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_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)); } static 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 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 boost::enable_if_c< is_vec
::value, qvm_detail::translation_mat_
const &>::type BOOST_QVM_INLINE_TRIVIAL translation_mat( A const & a ) { return reinterpret_cast
const &>(a); } template
typename boost::enable_if_c< is_vec
::value, qvm_detail::translation_mat_
&>::type 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_INLINE_TRIVIAL diag_mat_ & 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 mat_traits< qvm_detail::diag_mat_
> { 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_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); } template
static 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_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); } static 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 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 boost::enable_if_c< is_vec
::value, qvm_detail::diag_mat_
const &>::type BOOST_QVM_INLINE_TRIVIAL diag_mat( A const & a ) { return reinterpret_cast
const &>(a); } template
typename boost::enable_if_c< is_vec
::value, qvm_detail::diag_mat_
&>::type BOOST_QVM_INLINE_TRIVIAL diag_mat( A & a ) { return reinterpret_cast
&>(a); } //////////////////////////////////////////////// } } #endif