Boost QVM

boost/qvm/m.hpp

#include <boost/qvm/m.hpp>

namespace boost
{
    namespace qvm
    {
        //Only enabled if:
        //  is_m<A>::value && is_m<B>::value &&
        //  m_traits<A>::rows==m_traits<B>::rows &&
        //  m_traits<A>::cols==m_traits<B>::cols
        template <class A,class B>
        A & assign( A & a, B const & b );        
        
        //Only enabled if:
        //  is_m<R>::value && is_m<A>::value &&
        //  m_traits<R>::rows==m_traits<A>::rows &&
        //  m_traits<R>::cols==m_traits<A>::cols
        template <class R,class A>
        R make( A const & a );        
        
        //Only enabled if:
        //  is_m<A>::value && is_m<B>::value &&
        //  m_traits<A>::rows==m_traits<B>::rows &&
        //  m_traits<A>::cols==m_traits<B>::cols
        template <class A,class B>
        A & operator-=( A & a, B const & b );        
        
        //Only enabled if: is_m<A>::value
        template <class A>
        typename deduce_m<A>::type
        operator-( A const & a );        
        
        //Only enabled if:
        //  is_m<A>::value && is_m<B>::value &&
        //  m_traits<A>::rows==m_traits<B>::rows &&
        //  m_traits<A>::cols==m_traits<B>::cols
        template <class A,class B>
        typename deduce_m2<A,B,m_traits<A>::rows,m_traits<A>::cols>::type
        operator-( A const & a, B const & b );        
        
        //Only enabled if:
        //  is_m<A>::value && is_m<B>::value &&
        //  m_traits<A>::rows==m_traits<B>::rows &&
        //  m_traits<A>::cols==m_traits<B>::cols
        template <class A,class B>
        A & operator+=( A & a, B const & b );        
        
        //Only enabled if:
        //  is_m<A>::value && is_m<B>::value &&
        //  m_traits<A>::rows==m_traits<B>::rows &&
        //  m_traits<A>::cols==m_traits<B>::cols
        template <class A,class B>
        typename deduce_m2<A,B,m_traits<A>::rows,m_traits<A>::cols>::type
        operator+( A const & a, B const & b );        
        
        //Only enabled if: is_m<A>::value
        template <class A>
        A & operator/=( A & a, m_traits<A>::scalar_type s );        
        
        //Only enabled if: is_m<A>::value
        template <class A>
        typename deduce_m<A>::type
        operator/( A const & a, m_traits<A>::scalar_type s );        
        
        //Only enabled if:
        //  is_m<A>::value && is_m<B>::value &&
        //  m_traits<A>::rows==m_traits<A>::cols &&
        //  m_traits<A>::rows==m_traits<B>::rows &&
        //  m_traits<A>::cols==m_traits<B>::cols
        template <class A,class B>
        A & operator*=( A & a, B const & b );        
        
        //Only enabled if: is_m<A>::value
        template <class A>
        A & operator*=( A & a, m_traits<A>::scalar_type s );        
        
        //Only enabled if:
        //  is_m<A>::value && is_m<B>::value &&
        //  m_traits<A>::cols==m_traits<B>::rows
        template <class A,class B>
        typename deduce_m2<A,B,m_traits<A>::rows,m_traits<B>::cols>::type
        operator*( A const & a, B const & b );        
        
        //Only enabled if: is_m<A>::value
        template <class A>
        typename deduce_m<A>::type
        operator*( A const & a, m_traits<A>::scalar_type s );        
        
        //Only enabled if:
        //  is_m<A>::value && is_m<B>::value &&
        //  m_traits<A>::rows==m_traits<B>::rows &&
        //  m_traits<A>::cols==m_traits<B>::cols
        template <class A,class B>
        bool operator==( A const & a, B const & b );        
        
        //Only enabled if:
        //  is_m<A>::value && is_m<B>::value &&
        //  m_traits<A>::rows==m_traits<B>::rows &&
        //  m_traits<A>::cols==m_traits<B>::cols
        template <class A,class B>
        bool operator!=( A const & a, B const & b );        
        
        //Only enabled if:
        //  is_m<A>::value && is_m<B>::value &&
        //  m_traits<A>::rows==m_traits<B>::rows &&
        //  m_traits<A>::cols==m_traits<B>::cols
        template <class A,class B,class Cmp>
        bool cmp( A const & a, B const & b, Cmp pred );        
        
        //Only enabled if:
        //  is_m<A>::value &&
        //  m_traits<A>::rows==m_traits<A>::cols
        
        template <class A>
        typename deduce_m<A>::type
        inverse( A const & a, m_traits<A>::scalar_type det );
        
        template <class A>
        typename deduce_m<A>::type
        inverse( A const & a );        
        
        template <class T,int D>
        -unspecified-return-type- zero_m();
        
        template <class T,int R,int C>
        -unspecified-return-type- zero_m();        
        
        //Only enabled if:
        //  is_m<A>::value
        template <class A>
        void set_zero( A & a );        
        
        template <class S,int D>
        -unspecified-return-type- identity_m();        
        
        //Only enabled if:
        //  is_m<A>::value &&
        //  m_traits<A>::cols==m_traits<A>::rows
        template <class A>
        void set_identity( A & a );        
        
        //Only enabled if:
        //  is_v<A>::value && v_traits<A>::dim==3
        template <int Dim,class A>
        -unspecified-return-type
        rot_m( A const & axis, typename v_traits<A>::scalar_type angle );        
        
        //Only enabled if:
        //  is_m<A>::value && m_traits<A>::rows>=3 &&
        //  m_traits<A>::rows==m_traits<A>::cols &&
        //  is_v<B>::value && v_traits<B>::dim==3
        template <class A>
        void set_rot( A & a, B const & axis, typename v_traits<B>::scalar_type angle );        
        
        //Only enabled if:
        //  is_m<A>::value && m_traits<A>::rows>=3 &&
        //  m_traits<A>::rows==m_traits<A>::cols &&
        //  is_v<B>::value && v_traits<B>::dim==3
        template <class A,class B>
        void rotate( A & a, B const & axis, typename m_traits<A>::scalar_type angle );        
        
        template <int Dim,class Angle>
        -unspecified-return-type- rotx_m( Angle angle );        
        
        //Only enabled if:
        //  is_m<A>::value && m_traits<A>::rows>=3 &&
        //  m_traits<A>::rows==m_traits<A>::cols
        template <class A>
        void set_rotx( A & a, typename m_traits<A>::scalar_type angle );        
        
        //Only enabled if:
        //  is_m<A>::value && m_traits<A>::rows>=3 &&
        //  m_traits<A>::rows==m_traits<A>::cols
        template <class A>
        void rotate_x( A & a, typename m_traits<A>::scalar_type angle );        
        
        template <int Dim,class Angle>
        -unspecified-return-type- roty_m( Angle angle );        
        
        //Only enabled if:
        //  is_m<A>::value && m_traits<A>::rows>=3 &&
        //  m_traits<A>::rows==m_traits<A>::cols
        template <class A>
        void set_roty( A & a, typename m_traits<A>::scalar_type angle );        
        
        //Only enabled if:
        //  is_m<A>::value && m_traits<A>::rows>=3 &&
        //  m_traits<A>::rows==m_traits<A>::cols
        template <class A>
        void rotate_y( A & a, typename m_traits<A>::scalar_type angle );        
        
        template <int Dim,class Angle>
        -unspecified-return-type- rotz_m( Angle angle );        
        
        //Only enabled if:
        //  is_m<A>::value && m_traits<A>::rows>=3 &&
        //  m_traits<A>::rows==m_traits<A>::cols
        template <class A>
        void set_rotz( A & a, typename m_traits<A>::scalar_type angle );        
        
        //Only enabled if:
        //  is_m<A>::value && m_traits<A>::rows>=3 &&
        //  m_traits<A>::rows==m_traits<A>::cols
        template <class A>
        void rotate_z( A & a, typename m_traits<A>::scalar_type angle );        
        
        //Only enabled if:
        //  is_m<A>::value && m_traits<A>::rows==m_traits<A>::cols
        template <class A>
        m_traits<A>::scalar_type
        determinant( A const & a );        
        
        template <class T>
        -unspecified-return-type
        perspective_lh( T fov_y, T aspect, T zn, T zf );        
        
        template <class T>
        -unspecified-return-type
        perspective_rh( T fov_y, T aspect, T zn, T zf );        
        
        //Only enabled if: is_m<A>::value
        template <class A>
        -unspecified-return-type- mref( A & a );        
        
        //Only enabled if: is_m<A>::value
        template <class Scalar,class A>
        -unspecified-return_type- scalar_cast( A const & a );
    }
}