update boost
This commit is contained in:
@@ -1,125 +1,120 @@
|
||||
//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
|
||||
#ifndef BOOST_QVM_GEN_MAT_ASSIGN2_HPP_INCLUDED
|
||||
#define BOOST_QVM_GEN_MAT_ASSIGN2_HPP_INCLUDED
|
||||
|
||||
//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)
|
||||
// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc.
|
||||
|
||||
#ifndef BOOST_QVM_5DD4CBFC96F5453B13D89A1CDBAE32
|
||||
#define BOOST_QVM_5DD4CBFC96F5453B13D89A1CDBAE32
|
||||
// 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)
|
||||
|
||||
//This file was generated by a program. Do not edit manually.
|
||||
// This file was generated by a program. Do not edit manually.
|
||||
|
||||
#include <boost/qvm/config.hpp>
|
||||
#include <boost/qvm/enable_if.hpp>
|
||||
#include <boost/qvm/inline.hpp>
|
||||
#include <boost/qvm/mat_traits.hpp>
|
||||
|
||||
namespace
|
||||
boost
|
||||
namespace boost { namespace qvm {
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS
|
||||
typename enable_if_c<
|
||||
mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
|
||||
mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
|
||||
A &>::type
|
||||
assign( A & a, B const & b )
|
||||
{
|
||||
namespace
|
||||
qvm
|
||||
{
|
||||
template <class A,class B>
|
||||
BOOST_QVM_INLINE_OPERATIONS
|
||||
typename enable_if_c<
|
||||
mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
|
||||
mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
|
||||
A &>::type
|
||||
assign( A & a, B const & b )
|
||||
{
|
||||
mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
|
||||
mat_traits<A>::template write_element<0,1>(a)=mat_traits<B>::template read_element<0,1>(b);
|
||||
mat_traits<A>::template write_element<1,0>(a)=mat_traits<B>::template read_element<1,0>(b);
|
||||
mat_traits<A>::template write_element<1,1>(a)=mat_traits<B>::template read_element<1,1>(b);
|
||||
return a;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::assign;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct assign_mm_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
assign_mm_defined<2,2>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_INLINE_OPERATIONS
|
||||
typename enable_if_c<
|
||||
mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
|
||||
mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
|
||||
A &>::type
|
||||
assign( A & a, B const & b )
|
||||
{
|
||||
mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
|
||||
mat_traits<A>::template write_element<1,0>(a)=mat_traits<B>::template read_element<1,0>(b);
|
||||
return a;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::assign;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct assign_mm_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
assign_mm_defined<2,1>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_INLINE_OPERATIONS
|
||||
typename enable_if_c<
|
||||
mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
|
||||
mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
|
||||
A &>::type
|
||||
assign( A & a, B const & b )
|
||||
{
|
||||
mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
|
||||
mat_traits<A>::template write_element<0,1>(a)=mat_traits<B>::template read_element<0,1>(b);
|
||||
return a;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::assign;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct assign_mm_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
assign_mm_defined<1,2>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
write_mat_element<0,0>(a,mat_traits<B>::template read_element<0,0>(b));
|
||||
write_mat_element<0,1>(a,mat_traits<B>::template read_element<0,1>(b));
|
||||
write_mat_element<1,0>(a,mat_traits<B>::template read_element<1,0>(b));
|
||||
write_mat_element<1,1>(a,mat_traits<B>::template read_element<1,1>(b));
|
||||
return a;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::assign;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct assign_mm_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
assign_mm_defined<2,2>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS
|
||||
typename enable_if_c<
|
||||
mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
|
||||
mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
|
||||
A &>::type
|
||||
assign( A & a, B const & b )
|
||||
{
|
||||
write_mat_element<0,0>(a,mat_traits<B>::template read_element<0,0>(b));
|
||||
write_mat_element<1,0>(a,mat_traits<B>::template read_element<1,0>(b));
|
||||
return a;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::assign;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct assign_mm_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
assign_mm_defined<2,1>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS
|
||||
typename enable_if_c<
|
||||
mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
|
||||
mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
|
||||
A &>::type
|
||||
assign( A & a, B const & b )
|
||||
{
|
||||
write_mat_element<0,0>(a,mat_traits<B>::template read_element<0,0>(b));
|
||||
write_mat_element<0,1>(a,mat_traits<B>::template read_element<0,1>(b));
|
||||
return a;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::assign;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct assign_mm_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
assign_mm_defined<1,2>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
} }
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,132 +1,127 @@
|
||||
//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
|
||||
#ifndef BOOST_QVM_GEN_MAT_ASSIGN3_HPP_INCLUDED
|
||||
#define BOOST_QVM_GEN_MAT_ASSIGN3_HPP_INCLUDED
|
||||
|
||||
//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)
|
||||
// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc.
|
||||
|
||||
#ifndef BOOST_QVM_209A50EE407836FD124932F69E7D49DC
|
||||
#define BOOST_QVM_209A50EE407836FD124932F69E7D49DC
|
||||
// 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)
|
||||
|
||||
//This file was generated by a program. Do not edit manually.
|
||||
// This file was generated by a program. Do not edit manually.
|
||||
|
||||
#include <boost/qvm/config.hpp>
|
||||
#include <boost/qvm/enable_if.hpp>
|
||||
#include <boost/qvm/inline.hpp>
|
||||
#include <boost/qvm/mat_traits.hpp>
|
||||
|
||||
namespace
|
||||
boost
|
||||
namespace boost { namespace qvm {
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS
|
||||
typename enable_if_c<
|
||||
mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
|
||||
mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
|
||||
A &>::type
|
||||
assign( A & a, B const & b )
|
||||
{
|
||||
namespace
|
||||
qvm
|
||||
{
|
||||
template <class A,class B>
|
||||
BOOST_QVM_INLINE_OPERATIONS
|
||||
typename enable_if_c<
|
||||
mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
|
||||
mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
|
||||
A &>::type
|
||||
assign( A & a, B const & b )
|
||||
{
|
||||
mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
|
||||
mat_traits<A>::template write_element<0,1>(a)=mat_traits<B>::template read_element<0,1>(b);
|
||||
mat_traits<A>::template write_element<0,2>(a)=mat_traits<B>::template read_element<0,2>(b);
|
||||
mat_traits<A>::template write_element<1,0>(a)=mat_traits<B>::template read_element<1,0>(b);
|
||||
mat_traits<A>::template write_element<1,1>(a)=mat_traits<B>::template read_element<1,1>(b);
|
||||
mat_traits<A>::template write_element<1,2>(a)=mat_traits<B>::template read_element<1,2>(b);
|
||||
mat_traits<A>::template write_element<2,0>(a)=mat_traits<B>::template read_element<2,0>(b);
|
||||
mat_traits<A>::template write_element<2,1>(a)=mat_traits<B>::template read_element<2,1>(b);
|
||||
mat_traits<A>::template write_element<2,2>(a)=mat_traits<B>::template read_element<2,2>(b);
|
||||
return a;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::assign;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct assign_mm_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
assign_mm_defined<3,3>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_INLINE_OPERATIONS
|
||||
typename enable_if_c<
|
||||
mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
|
||||
mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
|
||||
A &>::type
|
||||
assign( A & a, B const & b )
|
||||
{
|
||||
mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
|
||||
mat_traits<A>::template write_element<1,0>(a)=mat_traits<B>::template read_element<1,0>(b);
|
||||
mat_traits<A>::template write_element<2,0>(a)=mat_traits<B>::template read_element<2,0>(b);
|
||||
return a;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::assign;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct assign_mm_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
assign_mm_defined<3,1>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_INLINE_OPERATIONS
|
||||
typename enable_if_c<
|
||||
mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
|
||||
mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
|
||||
A &>::type
|
||||
assign( A & a, B const & b )
|
||||
{
|
||||
mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
|
||||
mat_traits<A>::template write_element<0,1>(a)=mat_traits<B>::template read_element<0,1>(b);
|
||||
mat_traits<A>::template write_element<0,2>(a)=mat_traits<B>::template read_element<0,2>(b);
|
||||
return a;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::assign;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct assign_mm_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
assign_mm_defined<1,3>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
write_mat_element<0,0>(a,mat_traits<B>::template read_element<0,0>(b));
|
||||
write_mat_element<0,1>(a,mat_traits<B>::template read_element<0,1>(b));
|
||||
write_mat_element<0,2>(a,mat_traits<B>::template read_element<0,2>(b));
|
||||
write_mat_element<1,0>(a,mat_traits<B>::template read_element<1,0>(b));
|
||||
write_mat_element<1,1>(a,mat_traits<B>::template read_element<1,1>(b));
|
||||
write_mat_element<1,2>(a,mat_traits<B>::template read_element<1,2>(b));
|
||||
write_mat_element<2,0>(a,mat_traits<B>::template read_element<2,0>(b));
|
||||
write_mat_element<2,1>(a,mat_traits<B>::template read_element<2,1>(b));
|
||||
write_mat_element<2,2>(a,mat_traits<B>::template read_element<2,2>(b));
|
||||
return a;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::assign;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct assign_mm_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
assign_mm_defined<3,3>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS
|
||||
typename enable_if_c<
|
||||
mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
|
||||
mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
|
||||
A &>::type
|
||||
assign( A & a, B const & b )
|
||||
{
|
||||
write_mat_element<0,0>(a,mat_traits<B>::template read_element<0,0>(b));
|
||||
write_mat_element<1,0>(a,mat_traits<B>::template read_element<1,0>(b));
|
||||
write_mat_element<2,0>(a,mat_traits<B>::template read_element<2,0>(b));
|
||||
return a;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::assign;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct assign_mm_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
assign_mm_defined<3,1>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS
|
||||
typename enable_if_c<
|
||||
mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
|
||||
mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
|
||||
A &>::type
|
||||
assign( A & a, B const & b )
|
||||
{
|
||||
write_mat_element<0,0>(a,mat_traits<B>::template read_element<0,0>(b));
|
||||
write_mat_element<0,1>(a,mat_traits<B>::template read_element<0,1>(b));
|
||||
write_mat_element<0,2>(a,mat_traits<B>::template read_element<0,2>(b));
|
||||
return a;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::assign;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct assign_mm_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
assign_mm_defined<1,3>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
} }
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,141 +1,136 @@
|
||||
//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
|
||||
#ifndef BOOST_QVM_GEN_MAT_ASSIGN4_HPP_INCLUDED
|
||||
#define BOOST_QVM_GEN_MAT_ASSIGN4_HPP_INCLUDED
|
||||
|
||||
//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)
|
||||
// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc.
|
||||
|
||||
#ifndef BOOST_QVM_AD4F14F2444066D06BC430B7323BA122
|
||||
#define BOOST_QVM_AD4F14F2444066D06BC430B7323BA122
|
||||
// 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)
|
||||
|
||||
//This file was generated by a program. Do not edit manually.
|
||||
// This file was generated by a program. Do not edit manually.
|
||||
|
||||
#include <boost/qvm/config.hpp>
|
||||
#include <boost/qvm/enable_if.hpp>
|
||||
#include <boost/qvm/inline.hpp>
|
||||
#include <boost/qvm/mat_traits.hpp>
|
||||
|
||||
namespace
|
||||
boost
|
||||
namespace boost { namespace qvm {
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS
|
||||
typename enable_if_c<
|
||||
mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
|
||||
mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
|
||||
A &>::type
|
||||
assign( A & a, B const & b )
|
||||
{
|
||||
namespace
|
||||
qvm
|
||||
{
|
||||
template <class A,class B>
|
||||
BOOST_QVM_INLINE_OPERATIONS
|
||||
typename enable_if_c<
|
||||
mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
|
||||
mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
|
||||
A &>::type
|
||||
assign( A & a, B const & b )
|
||||
{
|
||||
mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
|
||||
mat_traits<A>::template write_element<0,1>(a)=mat_traits<B>::template read_element<0,1>(b);
|
||||
mat_traits<A>::template write_element<0,2>(a)=mat_traits<B>::template read_element<0,2>(b);
|
||||
mat_traits<A>::template write_element<0,3>(a)=mat_traits<B>::template read_element<0,3>(b);
|
||||
mat_traits<A>::template write_element<1,0>(a)=mat_traits<B>::template read_element<1,0>(b);
|
||||
mat_traits<A>::template write_element<1,1>(a)=mat_traits<B>::template read_element<1,1>(b);
|
||||
mat_traits<A>::template write_element<1,2>(a)=mat_traits<B>::template read_element<1,2>(b);
|
||||
mat_traits<A>::template write_element<1,3>(a)=mat_traits<B>::template read_element<1,3>(b);
|
||||
mat_traits<A>::template write_element<2,0>(a)=mat_traits<B>::template read_element<2,0>(b);
|
||||
mat_traits<A>::template write_element<2,1>(a)=mat_traits<B>::template read_element<2,1>(b);
|
||||
mat_traits<A>::template write_element<2,2>(a)=mat_traits<B>::template read_element<2,2>(b);
|
||||
mat_traits<A>::template write_element<2,3>(a)=mat_traits<B>::template read_element<2,3>(b);
|
||||
mat_traits<A>::template write_element<3,0>(a)=mat_traits<B>::template read_element<3,0>(b);
|
||||
mat_traits<A>::template write_element<3,1>(a)=mat_traits<B>::template read_element<3,1>(b);
|
||||
mat_traits<A>::template write_element<3,2>(a)=mat_traits<B>::template read_element<3,2>(b);
|
||||
mat_traits<A>::template write_element<3,3>(a)=mat_traits<B>::template read_element<3,3>(b);
|
||||
return a;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::assign;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct assign_mm_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
assign_mm_defined<4,4>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_INLINE_OPERATIONS
|
||||
typename enable_if_c<
|
||||
mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
|
||||
mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
|
||||
A &>::type
|
||||
assign( A & a, B const & b )
|
||||
{
|
||||
mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
|
||||
mat_traits<A>::template write_element<1,0>(a)=mat_traits<B>::template read_element<1,0>(b);
|
||||
mat_traits<A>::template write_element<2,0>(a)=mat_traits<B>::template read_element<2,0>(b);
|
||||
mat_traits<A>::template write_element<3,0>(a)=mat_traits<B>::template read_element<3,0>(b);
|
||||
return a;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::assign;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct assign_mm_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
assign_mm_defined<4,1>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_INLINE_OPERATIONS
|
||||
typename enable_if_c<
|
||||
mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
|
||||
mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
|
||||
A &>::type
|
||||
assign( A & a, B const & b )
|
||||
{
|
||||
mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
|
||||
mat_traits<A>::template write_element<0,1>(a)=mat_traits<B>::template read_element<0,1>(b);
|
||||
mat_traits<A>::template write_element<0,2>(a)=mat_traits<B>::template read_element<0,2>(b);
|
||||
mat_traits<A>::template write_element<0,3>(a)=mat_traits<B>::template read_element<0,3>(b);
|
||||
return a;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::assign;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct assign_mm_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
assign_mm_defined<1,4>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
write_mat_element<0,0>(a,mat_traits<B>::template read_element<0,0>(b));
|
||||
write_mat_element<0,1>(a,mat_traits<B>::template read_element<0,1>(b));
|
||||
write_mat_element<0,2>(a,mat_traits<B>::template read_element<0,2>(b));
|
||||
write_mat_element<0,3>(a,mat_traits<B>::template read_element<0,3>(b));
|
||||
write_mat_element<1,0>(a,mat_traits<B>::template read_element<1,0>(b));
|
||||
write_mat_element<1,1>(a,mat_traits<B>::template read_element<1,1>(b));
|
||||
write_mat_element<1,2>(a,mat_traits<B>::template read_element<1,2>(b));
|
||||
write_mat_element<1,3>(a,mat_traits<B>::template read_element<1,3>(b));
|
||||
write_mat_element<2,0>(a,mat_traits<B>::template read_element<2,0>(b));
|
||||
write_mat_element<2,1>(a,mat_traits<B>::template read_element<2,1>(b));
|
||||
write_mat_element<2,2>(a,mat_traits<B>::template read_element<2,2>(b));
|
||||
write_mat_element<2,3>(a,mat_traits<B>::template read_element<2,3>(b));
|
||||
write_mat_element<3,0>(a,mat_traits<B>::template read_element<3,0>(b));
|
||||
write_mat_element<3,1>(a,mat_traits<B>::template read_element<3,1>(b));
|
||||
write_mat_element<3,2>(a,mat_traits<B>::template read_element<3,2>(b));
|
||||
write_mat_element<3,3>(a,mat_traits<B>::template read_element<3,3>(b));
|
||||
return a;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::assign;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct assign_mm_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
assign_mm_defined<4,4>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS
|
||||
typename enable_if_c<
|
||||
mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
|
||||
mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
|
||||
A &>::type
|
||||
assign( A & a, B const & b )
|
||||
{
|
||||
write_mat_element<0,0>(a,mat_traits<B>::template read_element<0,0>(b));
|
||||
write_mat_element<1,0>(a,mat_traits<B>::template read_element<1,0>(b));
|
||||
write_mat_element<2,0>(a,mat_traits<B>::template read_element<2,0>(b));
|
||||
write_mat_element<3,0>(a,mat_traits<B>::template read_element<3,0>(b));
|
||||
return a;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::assign;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct assign_mm_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
assign_mm_defined<4,1>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS
|
||||
typename enable_if_c<
|
||||
mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
|
||||
mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
|
||||
A &>::type
|
||||
assign( A & a, B const & b )
|
||||
{
|
||||
write_mat_element<0,0>(a,mat_traits<B>::template read_element<0,0>(b));
|
||||
write_mat_element<0,1>(a,mat_traits<B>::template read_element<0,1>(b));
|
||||
write_mat_element<0,2>(a,mat_traits<B>::template read_element<0,2>(b));
|
||||
write_mat_element<0,3>(a,mat_traits<B>::template read_element<0,3>(b));
|
||||
return a;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::assign;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct assign_mm_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
assign_mm_defined<1,4>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
} }
|
||||
|
||||
#endif
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,56 +1,51 @@
|
||||
//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
|
||||
#ifndef BOOST_QVM_GEN_VEC_ASSIGN2_HPP_INCLUDED
|
||||
#define BOOST_QVM_GEN_VEC_ASSIGN2_HPP_INCLUDED
|
||||
|
||||
//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)
|
||||
// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc.
|
||||
|
||||
#ifndef BOOST_QVM_61CDD11E9D9C167272E61DF0844F4A77
|
||||
#define BOOST_QVM_61CDD11E9D9C167272E61DF0844F4A77
|
||||
// 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)
|
||||
|
||||
//This file was generated by a program. Do not edit manually.
|
||||
// This file was generated by a program. Do not edit manually.
|
||||
|
||||
#include <boost/qvm/config.hpp>
|
||||
#include <boost/qvm/enable_if.hpp>
|
||||
#include <boost/qvm/inline.hpp>
|
||||
#include <boost/qvm/vec_traits.hpp>
|
||||
|
||||
namespace
|
||||
boost
|
||||
namespace boost { namespace qvm {
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS
|
||||
typename enable_if_c<
|
||||
vec_traits<A>::dim==2 && vec_traits<B>::dim==2,
|
||||
A &>::type
|
||||
assign( A & a, B const & b )
|
||||
{
|
||||
namespace
|
||||
qvm
|
||||
{
|
||||
template <class A,class B>
|
||||
BOOST_QVM_INLINE_OPERATIONS
|
||||
typename enable_if_c<
|
||||
vec_traits<A>::dim==2 && vec_traits<B>::dim==2,
|
||||
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);
|
||||
return a;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::assign;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int D>
|
||||
struct assign_vv_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
assign_vv_defined<2>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
write_vec_element<0>(a,vec_traits<B>::template read_element<0>(b));
|
||||
write_vec_element<1>(a,vec_traits<B>::template read_element<1>(b));
|
||||
return a;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::assign;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int D>
|
||||
struct assign_vv_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
assign_vv_defined<2>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
} }
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,57 +1,52 @@
|
||||
//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
|
||||
#ifndef BOOST_QVM_GEN_VEC_ASSIGN3_HPP_INCLUDED
|
||||
#define BOOST_QVM_GEN_VEC_ASSIGN3_HPP_INCLUDED
|
||||
|
||||
//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)
|
||||
// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc.
|
||||
|
||||
#ifndef BOOST_QVM_2D7E8392C53CBC9121E33749ECF4D5
|
||||
#define BOOST_QVM_2D7E8392C53CBC9121E33749ECF4D5
|
||||
// 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)
|
||||
|
||||
//This file was generated by a program. Do not edit manually.
|
||||
// This file was generated by a program. Do not edit manually.
|
||||
|
||||
#include <boost/qvm/config.hpp>
|
||||
#include <boost/qvm/enable_if.hpp>
|
||||
#include <boost/qvm/inline.hpp>
|
||||
#include <boost/qvm/vec_traits.hpp>
|
||||
|
||||
namespace
|
||||
boost
|
||||
namespace boost { namespace qvm {
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_CONSTEXPR 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 )
|
||||
{
|
||||
namespace
|
||||
qvm
|
||||
{
|
||||
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;
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
write_vec_element<0>(a,vec_traits<B>::template read_element<0>(b));
|
||||
write_vec_element<1>(a,vec_traits<B>::template read_element<1>(b));
|
||||
write_vec_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;
|
||||
};
|
||||
}
|
||||
|
||||
} }
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,58 +1,53 @@
|
||||
//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
|
||||
#ifndef BOOST_QVM_GEN_VEC_ASSIGN4_HPP_INCLUDED
|
||||
#define BOOST_QVM_GEN_VEC_ASSIGN4_HPP_INCLUDED
|
||||
|
||||
//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)
|
||||
// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc.
|
||||
|
||||
#ifndef BOOST_QVM_D49FD4A4597E35CF3222F4CCCFD3902D
|
||||
#define BOOST_QVM_D49FD4A4597E35CF3222F4CCCFD3902D
|
||||
// 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)
|
||||
|
||||
//This file was generated by a program. Do not edit manually.
|
||||
// This file was generated by a program. Do not edit manually.
|
||||
|
||||
#include <boost/qvm/config.hpp>
|
||||
#include <boost/qvm/enable_if.hpp>
|
||||
#include <boost/qvm/inline.hpp>
|
||||
#include <boost/qvm/vec_traits.hpp>
|
||||
|
||||
namespace
|
||||
boost
|
||||
namespace boost { namespace qvm {
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS
|
||||
typename enable_if_c<
|
||||
vec_traits<A>::dim==4 && vec_traits<B>::dim==4,
|
||||
A &>::type
|
||||
assign( A & a, B const & b )
|
||||
{
|
||||
namespace
|
||||
qvm
|
||||
{
|
||||
template <class A,class B>
|
||||
BOOST_QVM_INLINE_OPERATIONS
|
||||
typename enable_if_c<
|
||||
vec_traits<A>::dim==4 && vec_traits<B>::dim==4,
|
||||
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);
|
||||
vec_traits<A>::template write_element<3>(a)=vec_traits<B>::template read_element<3>(b);
|
||||
return a;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::assign;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int D>
|
||||
struct assign_vv_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
assign_vv_defined<4>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
write_vec_element<0>(a,vec_traits<B>::template read_element<0>(b));
|
||||
write_vec_element<1>(a,vec_traits<B>::template read_element<1>(b));
|
||||
write_vec_element<2>(a,vec_traits<B>::template read_element<2>(b));
|
||||
write_vec_element<3>(a,vec_traits<B>::template read_element<3>(b));
|
||||
return a;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::assign;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int D>
|
||||
struct assign_vv_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
assign_vv_defined<4>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
} }
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,114 +1,109 @@
|
||||
//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
|
||||
#ifndef BOOST_QVM_GEN_VEC_MAT_OPERATIONS2_HPP_INCLUDED
|
||||
#define BOOST_QVM_GEN_VEC_MAT_OPERATIONS2_HPP_INCLUDED
|
||||
|
||||
//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)
|
||||
// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc.
|
||||
|
||||
#ifndef BOOST_QVM_48D38F75E6D91D2AE5C0F72B78818744
|
||||
#define BOOST_QVM_48D38F75E6D91D2AE5C0F72B78818744
|
||||
// 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)
|
||||
|
||||
//This file was generated by a program. Do not edit manually.
|
||||
// This file was generated by a program. Do not edit manually.
|
||||
|
||||
#include <boost/qvm/config.hpp>
|
||||
#include <boost/qvm/deduce_vec.hpp>
|
||||
#include <boost/qvm/enable_if.hpp>
|
||||
#include <boost/qvm/inline.hpp>
|
||||
#include <boost/qvm/mat_traits.hpp>
|
||||
#include <boost/qvm/vec_traits.hpp>
|
||||
|
||||
namespace
|
||||
boost
|
||||
namespace boost { namespace qvm {
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS
|
||||
typename lazy_enable_if_c<
|
||||
mat_traits<A>::rows==2 && mat_traits<A>::cols==2 &&
|
||||
vec_traits<B>::dim==2,
|
||||
deduce_vec2<A,B,2> >::type
|
||||
operator*( A const & a, B const & b )
|
||||
{
|
||||
namespace
|
||||
qvm
|
||||
{
|
||||
template <class A,class B>
|
||||
BOOST_QVM_INLINE_OPERATIONS
|
||||
typename lazy_enable_if_c<
|
||||
mat_traits<A>::rows==2 && mat_traits<A>::cols==2 &&
|
||||
vec_traits<B>::dim==2,
|
||||
deduce_vec2<A,B,2> >::type
|
||||
operator*( A const & a, B const & b )
|
||||
{
|
||||
typedef typename mat_traits<A>::scalar_type Ta;
|
||||
typedef typename vec_traits<B>::scalar_type Tb;
|
||||
Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
|
||||
Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
|
||||
Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
|
||||
Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
|
||||
Tb const b0 = vec_traits<B>::template read_element<0>(b);
|
||||
Tb const b1 = vec_traits<B>::template read_element<1>(b);
|
||||
typedef typename deduce_vec2<A,B,2>::type R;
|
||||
BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==2);
|
||||
R r;
|
||||
vec_traits<R>::template write_element<0>(r)=a00*b0+a01*b1;
|
||||
vec_traits<R>::template write_element<1>(r)=a10*b0+a11*b1;
|
||||
return r;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::operator*;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct mul_mv_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
mul_mv_defined<2,2>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_INLINE_OPERATIONS
|
||||
typename lazy_enable_if_c<
|
||||
mat_traits<B>::rows==2 && mat_traits<B>::cols==2 &&
|
||||
vec_traits<A>::dim==2,
|
||||
deduce_vec2<A,B,2> >::type
|
||||
operator*( A const & a, B const & b )
|
||||
{
|
||||
typedef typename vec_traits<A>::scalar_type Ta;
|
||||
typedef typename mat_traits<B>::scalar_type Tb;
|
||||
Ta const a0 = vec_traits<A>::template read_element<0>(a);
|
||||
Ta const a1 = vec_traits<A>::template read_element<1>(a);
|
||||
Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
|
||||
Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
|
||||
Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
|
||||
Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
|
||||
typedef typename deduce_vec2<A,B,2>::type R;
|
||||
BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==2);
|
||||
R r;
|
||||
vec_traits<R>::template write_element<0>(r)=a0*b00+a1*b10;
|
||||
vec_traits<R>::template write_element<1>(r)=a0*b01+a1*b11;
|
||||
return r;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::operator*;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct mul_vm_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
mul_vm_defined<2,2>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
typedef typename mat_traits<A>::scalar_type Ta;
|
||||
typedef typename vec_traits<B>::scalar_type Tb;
|
||||
Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
|
||||
Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
|
||||
Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
|
||||
Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
|
||||
Tb const b0 = vec_traits<B>::template read_element<0>(b);
|
||||
Tb const b1 = vec_traits<B>::template read_element<1>(b);
|
||||
typedef typename deduce_vec2<A,B,2>::type R;
|
||||
BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==2);
|
||||
R r;
|
||||
write_vec_element<0>(r,a00*b0+a01*b1);
|
||||
write_vec_element<1>(r,a10*b0+a11*b1);
|
||||
return r;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::operator*;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct mul_mv_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
mul_mv_defined<2,2>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS
|
||||
typename lazy_enable_if_c<
|
||||
mat_traits<B>::rows==2 && mat_traits<B>::cols==2 &&
|
||||
vec_traits<A>::dim==2,
|
||||
deduce_vec2<A,B,2> >::type
|
||||
operator*( A const & a, B const & b )
|
||||
{
|
||||
typedef typename vec_traits<A>::scalar_type Ta;
|
||||
typedef typename mat_traits<B>::scalar_type Tb;
|
||||
Ta const a0 = vec_traits<A>::template read_element<0>(a);
|
||||
Ta const a1 = vec_traits<A>::template read_element<1>(a);
|
||||
Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
|
||||
Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
|
||||
Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
|
||||
Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
|
||||
typedef typename deduce_vec2<A,B,2>::type R;
|
||||
BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==2);
|
||||
R r;
|
||||
write_vec_element<0>(r,a0*b00+a1*b10);
|
||||
write_vec_element<1>(r,a0*b01+a1*b11);
|
||||
return r;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::operator*;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct mul_vm_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
mul_vm_defined<2,2>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
} }
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,128 +1,123 @@
|
||||
//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
|
||||
#ifndef BOOST_QVM_GEN_VEC_MAT_OPERATIONS3_HPP_INCLUDED
|
||||
#define BOOST_QVM_GEN_VEC_MAT_OPERATIONS3_HPP_INCLUDED
|
||||
|
||||
//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)
|
||||
// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc.
|
||||
|
||||
#ifndef BOOST_QVM_E5F500D4618DBE7B51573B33821F
|
||||
#define BOOST_QVM_E5F500D4618DBE7B51573B33821F
|
||||
// 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)
|
||||
|
||||
//This file was generated by a program. Do not edit manually.
|
||||
// This file was generated by a program. Do not edit manually.
|
||||
|
||||
#include <boost/qvm/config.hpp>
|
||||
#include <boost/qvm/deduce_vec.hpp>
|
||||
#include <boost/qvm/enable_if.hpp>
|
||||
#include <boost/qvm/inline.hpp>
|
||||
#include <boost/qvm/mat_traits.hpp>
|
||||
#include <boost/qvm/vec_traits.hpp>
|
||||
|
||||
namespace
|
||||
boost
|
||||
namespace boost { namespace qvm {
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS
|
||||
typename lazy_enable_if_c<
|
||||
mat_traits<A>::rows==3 && mat_traits<A>::cols==3 &&
|
||||
vec_traits<B>::dim==3,
|
||||
deduce_vec2<A,B,3> >::type
|
||||
operator*( A const & a, B const & b )
|
||||
{
|
||||
namespace
|
||||
qvm
|
||||
{
|
||||
template <class A,class B>
|
||||
BOOST_QVM_INLINE_OPERATIONS
|
||||
typename lazy_enable_if_c<
|
||||
mat_traits<A>::rows==3 && mat_traits<A>::cols==3 &&
|
||||
vec_traits<B>::dim==3,
|
||||
deduce_vec2<A,B,3> >::type
|
||||
operator*( A const & a, B const & b )
|
||||
{
|
||||
typedef typename mat_traits<A>::scalar_type Ta;
|
||||
typedef typename vec_traits<B>::scalar_type Tb;
|
||||
Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
|
||||
Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
|
||||
Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
|
||||
Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
|
||||
Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
|
||||
Ta const a12 = mat_traits<A>::template read_element<1,2>(a);
|
||||
Ta const a20 = mat_traits<A>::template read_element<2,0>(a);
|
||||
Ta const a21 = mat_traits<A>::template read_element<2,1>(a);
|
||||
Ta const a22 = mat_traits<A>::template read_element<2,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);
|
||||
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)=a00*b0+a01*b1+a02*b2;
|
||||
vec_traits<R>::template write_element<1>(r)=a10*b0+a11*b1+a12*b2;
|
||||
vec_traits<R>::template write_element<2>(r)=a20*b0+a21*b1+a22*b2;
|
||||
return r;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::operator*;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct mul_mv_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
mul_mv_defined<3,3>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_INLINE_OPERATIONS
|
||||
typename lazy_enable_if_c<
|
||||
mat_traits<B>::rows==3 && mat_traits<B>::cols==3 &&
|
||||
vec_traits<A>::dim==3,
|
||||
deduce_vec2<A,B,3> >::type
|
||||
operator*( A const & a, B const & b )
|
||||
{
|
||||
typedef typename vec_traits<A>::scalar_type Ta;
|
||||
typedef typename mat_traits<B>::scalar_type Tb;
|
||||
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 b00 = mat_traits<B>::template read_element<0,0>(b);
|
||||
Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
|
||||
Tb const b02 = mat_traits<B>::template read_element<0,2>(b);
|
||||
Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
|
||||
Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
|
||||
Tb const b12 = mat_traits<B>::template read_element<1,2>(b);
|
||||
Tb const b20 = mat_traits<B>::template read_element<2,0>(b);
|
||||
Tb const b21 = mat_traits<B>::template read_element<2,1>(b);
|
||||
Tb const b22 = mat_traits<B>::template read_element<2,2>(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)=a0*b00+a1*b10+a2*b20;
|
||||
vec_traits<R>::template write_element<1>(r)=a0*b01+a1*b11+a2*b21;
|
||||
vec_traits<R>::template write_element<2>(r)=a0*b02+a1*b12+a2*b22;
|
||||
return r;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::operator*;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct mul_vm_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
mul_vm_defined<3,3>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
typedef typename mat_traits<A>::scalar_type Ta;
|
||||
typedef typename vec_traits<B>::scalar_type Tb;
|
||||
Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
|
||||
Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
|
||||
Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
|
||||
Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
|
||||
Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
|
||||
Ta const a12 = mat_traits<A>::template read_element<1,2>(a);
|
||||
Ta const a20 = mat_traits<A>::template read_element<2,0>(a);
|
||||
Ta const a21 = mat_traits<A>::template read_element<2,1>(a);
|
||||
Ta const a22 = mat_traits<A>::template read_element<2,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);
|
||||
typedef typename deduce_vec2<A,B,3>::type R;
|
||||
BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==3);
|
||||
R r;
|
||||
write_vec_element<0>(r,a00*b0+a01*b1+a02*b2);
|
||||
write_vec_element<1>(r,a10*b0+a11*b1+a12*b2);
|
||||
write_vec_element<2>(r,a20*b0+a21*b1+a22*b2);
|
||||
return r;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::operator*;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct mul_mv_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
mul_mv_defined<3,3>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS
|
||||
typename lazy_enable_if_c<
|
||||
mat_traits<B>::rows==3 && mat_traits<B>::cols==3 &&
|
||||
vec_traits<A>::dim==3,
|
||||
deduce_vec2<A,B,3> >::type
|
||||
operator*( A const & a, B const & b )
|
||||
{
|
||||
typedef typename vec_traits<A>::scalar_type Ta;
|
||||
typedef typename mat_traits<B>::scalar_type Tb;
|
||||
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 b00 = mat_traits<B>::template read_element<0,0>(b);
|
||||
Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
|
||||
Tb const b02 = mat_traits<B>::template read_element<0,2>(b);
|
||||
Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
|
||||
Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
|
||||
Tb const b12 = mat_traits<B>::template read_element<1,2>(b);
|
||||
Tb const b20 = mat_traits<B>::template read_element<2,0>(b);
|
||||
Tb const b21 = mat_traits<B>::template read_element<2,1>(b);
|
||||
Tb const b22 = mat_traits<B>::template read_element<2,2>(b);
|
||||
typedef typename deduce_vec2<A,B,3>::type R;
|
||||
BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==3);
|
||||
R r;
|
||||
write_vec_element<0>(r,a0*b00+a1*b10+a2*b20);
|
||||
write_vec_element<1>(r,a0*b01+a1*b11+a2*b21);
|
||||
write_vec_element<2>(r,a0*b02+a1*b12+a2*b22);
|
||||
return r;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::operator*;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct mul_vm_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
mul_vm_defined<3,3>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
} }
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,146 +1,141 @@
|
||||
//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
|
||||
#ifndef BOOST_QVM_GEN_VEC_MAT_OPERATIONS4_HPP_INCLUDED
|
||||
#define BOOST_QVM_GEN_VEC_MAT_OPERATIONS4_HPP_INCLUDED
|
||||
|
||||
//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)
|
||||
// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc.
|
||||
|
||||
#ifndef BOOST_QVM_187092DA6454CEB1853E6915F8466A4
|
||||
#define BOOST_QVM_187092DA6454CEB1853E6915F8466A4
|
||||
// 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)
|
||||
|
||||
//This file was generated by a program. Do not edit manually.
|
||||
// This file was generated by a program. Do not edit manually.
|
||||
|
||||
#include <boost/qvm/config.hpp>
|
||||
#include <boost/qvm/deduce_vec.hpp>
|
||||
#include <boost/qvm/enable_if.hpp>
|
||||
#include <boost/qvm/inline.hpp>
|
||||
#include <boost/qvm/mat_traits.hpp>
|
||||
#include <boost/qvm/vec_traits.hpp>
|
||||
|
||||
namespace
|
||||
boost
|
||||
namespace boost { namespace qvm {
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS
|
||||
typename lazy_enable_if_c<
|
||||
mat_traits<A>::rows==4 && mat_traits<A>::cols==4 &&
|
||||
vec_traits<B>::dim==4,
|
||||
deduce_vec2<A,B,4> >::type
|
||||
operator*( A const & a, B const & b )
|
||||
{
|
||||
namespace
|
||||
qvm
|
||||
{
|
||||
template <class A,class B>
|
||||
BOOST_QVM_INLINE_OPERATIONS
|
||||
typename lazy_enable_if_c<
|
||||
mat_traits<A>::rows==4 && mat_traits<A>::cols==4 &&
|
||||
vec_traits<B>::dim==4,
|
||||
deduce_vec2<A,B,4> >::type
|
||||
operator*( A const & a, B const & b )
|
||||
{
|
||||
typedef typename mat_traits<A>::scalar_type Ta;
|
||||
typedef typename vec_traits<B>::scalar_type Tb;
|
||||
Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
|
||||
Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
|
||||
Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
|
||||
Ta const a03 = mat_traits<A>::template read_element<0,3>(a);
|
||||
Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
|
||||
Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
|
||||
Ta const a12 = mat_traits<A>::template read_element<1,2>(a);
|
||||
Ta const a13 = mat_traits<A>::template read_element<1,3>(a);
|
||||
Ta const a20 = mat_traits<A>::template read_element<2,0>(a);
|
||||
Ta const a21 = mat_traits<A>::template read_element<2,1>(a);
|
||||
Ta const a22 = mat_traits<A>::template read_element<2,2>(a);
|
||||
Ta const a23 = mat_traits<A>::template read_element<2,3>(a);
|
||||
Ta const a30 = mat_traits<A>::template read_element<3,0>(a);
|
||||
Ta const a31 = mat_traits<A>::template read_element<3,1>(a);
|
||||
Ta const a32 = mat_traits<A>::template read_element<3,2>(a);
|
||||
Ta const a33 = mat_traits<A>::template read_element<3,3>(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);
|
||||
Tb const b3 = vec_traits<B>::template read_element<3>(b);
|
||||
typedef typename deduce_vec2<A,B,4>::type R;
|
||||
BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==4);
|
||||
R r;
|
||||
vec_traits<R>::template write_element<0>(r)=a00*b0+a01*b1+a02*b2+a03*b3;
|
||||
vec_traits<R>::template write_element<1>(r)=a10*b0+a11*b1+a12*b2+a13*b3;
|
||||
vec_traits<R>::template write_element<2>(r)=a20*b0+a21*b1+a22*b2+a23*b3;
|
||||
vec_traits<R>::template write_element<3>(r)=a30*b0+a31*b1+a32*b2+a33*b3;
|
||||
return r;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::operator*;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct mul_mv_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
mul_mv_defined<4,4>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_INLINE_OPERATIONS
|
||||
typename lazy_enable_if_c<
|
||||
mat_traits<B>::rows==4 && mat_traits<B>::cols==4 &&
|
||||
vec_traits<A>::dim==4,
|
||||
deduce_vec2<A,B,4> >::type
|
||||
operator*( A const & a, B const & b )
|
||||
{
|
||||
typedef typename vec_traits<A>::scalar_type Ta;
|
||||
typedef typename mat_traits<B>::scalar_type Tb;
|
||||
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);
|
||||
Ta const a3 = vec_traits<A>::template read_element<3>(a);
|
||||
Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
|
||||
Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
|
||||
Tb const b02 = mat_traits<B>::template read_element<0,2>(b);
|
||||
Tb const b03 = mat_traits<B>::template read_element<0,3>(b);
|
||||
Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
|
||||
Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
|
||||
Tb const b12 = mat_traits<B>::template read_element<1,2>(b);
|
||||
Tb const b13 = mat_traits<B>::template read_element<1,3>(b);
|
||||
Tb const b20 = mat_traits<B>::template read_element<2,0>(b);
|
||||
Tb const b21 = mat_traits<B>::template read_element<2,1>(b);
|
||||
Tb const b22 = mat_traits<B>::template read_element<2,2>(b);
|
||||
Tb const b23 = mat_traits<B>::template read_element<2,3>(b);
|
||||
Tb const b30 = mat_traits<B>::template read_element<3,0>(b);
|
||||
Tb const b31 = mat_traits<B>::template read_element<3,1>(b);
|
||||
Tb const b32 = mat_traits<B>::template read_element<3,2>(b);
|
||||
Tb const b33 = mat_traits<B>::template read_element<3,3>(b);
|
||||
typedef typename deduce_vec2<A,B,4>::type R;
|
||||
BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==4);
|
||||
R r;
|
||||
vec_traits<R>::template write_element<0>(r)=a0*b00+a1*b10+a2*b20+a3*b30;
|
||||
vec_traits<R>::template write_element<1>(r)=a0*b01+a1*b11+a2*b21+a3*b31;
|
||||
vec_traits<R>::template write_element<2>(r)=a0*b02+a1*b12+a2*b22+a3*b32;
|
||||
vec_traits<R>::template write_element<3>(r)=a0*b03+a1*b13+a2*b23+a3*b33;
|
||||
return r;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::operator*;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct mul_vm_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
mul_vm_defined<4,4>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
typedef typename mat_traits<A>::scalar_type Ta;
|
||||
typedef typename vec_traits<B>::scalar_type Tb;
|
||||
Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
|
||||
Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
|
||||
Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
|
||||
Ta const a03 = mat_traits<A>::template read_element<0,3>(a);
|
||||
Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
|
||||
Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
|
||||
Ta const a12 = mat_traits<A>::template read_element<1,2>(a);
|
||||
Ta const a13 = mat_traits<A>::template read_element<1,3>(a);
|
||||
Ta const a20 = mat_traits<A>::template read_element<2,0>(a);
|
||||
Ta const a21 = mat_traits<A>::template read_element<2,1>(a);
|
||||
Ta const a22 = mat_traits<A>::template read_element<2,2>(a);
|
||||
Ta const a23 = mat_traits<A>::template read_element<2,3>(a);
|
||||
Ta const a30 = mat_traits<A>::template read_element<3,0>(a);
|
||||
Ta const a31 = mat_traits<A>::template read_element<3,1>(a);
|
||||
Ta const a32 = mat_traits<A>::template read_element<3,2>(a);
|
||||
Ta const a33 = mat_traits<A>::template read_element<3,3>(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);
|
||||
Tb const b3 = vec_traits<B>::template read_element<3>(b);
|
||||
typedef typename deduce_vec2<A,B,4>::type R;
|
||||
BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==4);
|
||||
R r;
|
||||
write_vec_element<0>(r,a00*b0+a01*b1+a02*b2+a03*b3);
|
||||
write_vec_element<1>(r,a10*b0+a11*b1+a12*b2+a13*b3);
|
||||
write_vec_element<2>(r,a20*b0+a21*b1+a22*b2+a23*b3);
|
||||
write_vec_element<3>(r,a30*b0+a31*b1+a32*b2+a33*b3);
|
||||
return r;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::operator*;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct mul_mv_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
mul_mv_defined<4,4>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
template <class A,class B>
|
||||
BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_OPERATIONS
|
||||
typename lazy_enable_if_c<
|
||||
mat_traits<B>::rows==4 && mat_traits<B>::cols==4 &&
|
||||
vec_traits<A>::dim==4,
|
||||
deduce_vec2<A,B,4> >::type
|
||||
operator*( A const & a, B const & b )
|
||||
{
|
||||
typedef typename vec_traits<A>::scalar_type Ta;
|
||||
typedef typename mat_traits<B>::scalar_type Tb;
|
||||
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);
|
||||
Ta const a3 = vec_traits<A>::template read_element<3>(a);
|
||||
Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
|
||||
Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
|
||||
Tb const b02 = mat_traits<B>::template read_element<0,2>(b);
|
||||
Tb const b03 = mat_traits<B>::template read_element<0,3>(b);
|
||||
Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
|
||||
Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
|
||||
Tb const b12 = mat_traits<B>::template read_element<1,2>(b);
|
||||
Tb const b13 = mat_traits<B>::template read_element<1,3>(b);
|
||||
Tb const b20 = mat_traits<B>::template read_element<2,0>(b);
|
||||
Tb const b21 = mat_traits<B>::template read_element<2,1>(b);
|
||||
Tb const b22 = mat_traits<B>::template read_element<2,2>(b);
|
||||
Tb const b23 = mat_traits<B>::template read_element<2,3>(b);
|
||||
Tb const b30 = mat_traits<B>::template read_element<3,0>(b);
|
||||
Tb const b31 = mat_traits<B>::template read_element<3,1>(b);
|
||||
Tb const b32 = mat_traits<B>::template read_element<3,2>(b);
|
||||
Tb const b33 = mat_traits<B>::template read_element<3,3>(b);
|
||||
typedef typename deduce_vec2<A,B,4>::type R;
|
||||
BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==4);
|
||||
R r;
|
||||
write_vec_element<0>(r,a0*b00+a1*b10+a2*b20+a3*b30);
|
||||
write_vec_element<1>(r,a0*b01+a1*b11+a2*b21+a3*b31);
|
||||
write_vec_element<2>(r,a0*b02+a1*b12+a2*b22+a3*b32);
|
||||
write_vec_element<3>(r,a0*b03+a1*b13+a2*b23+a3*b33);
|
||||
return r;
|
||||
}
|
||||
|
||||
namespace
|
||||
sfinae
|
||||
{
|
||||
using ::boost::qvm::operator*;
|
||||
}
|
||||
|
||||
namespace
|
||||
qvm_detail
|
||||
{
|
||||
template <int R,int C>
|
||||
struct mul_vm_defined;
|
||||
|
||||
template <>
|
||||
struct
|
||||
mul_vm_defined<4,4>
|
||||
{
|
||||
static bool const value=true;
|
||||
};
|
||||
}
|
||||
|
||||
} }
|
||||
|
||||
#endif
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user