summaryrefslogtreecommitdiff
path: root/boost/qvm/detail/mat_assign.hpp
diff options
context:
space:
mode:
authorDongHun Kwak <dh0128.kwak@samsung.com>2017-09-13 11:24:46 +0900
committerDongHun Kwak <dh0128.kwak@samsung.com>2017-09-13 11:25:39 +0900
commit4fadd968fa12130524c8380f33fcfe25d4de79e5 (patch)
treefd26a490cd15388d42fc6652b3c5c13012e7f93e /boost/qvm/detail/mat_assign.hpp
parentb5c87084afaef42b2d058f68091be31988a6a874 (diff)
downloadboost-upstream/1.65.0.tar.gz
boost-upstream/1.65.0.tar.bz2
boost-upstream/1.65.0.zip
Imported Upstream version 1.65.0upstream/1.65.0
Change-Id: Icf8400b375482cb11bcf77440a6934ba360d6ba4 Signed-off-by: DongHun Kwak <dh0128.kwak@samsung.com>
Diffstat (limited to 'boost/qvm/detail/mat_assign.hpp')
-rw-r--r--boost/qvm/detail/mat_assign.hpp75
1 files changed, 75 insertions, 0 deletions
diff --git a/boost/qvm/detail/mat_assign.hpp b/boost/qvm/detail/mat_assign.hpp
new file mode 100644
index 0000000000..89d50243eb
--- /dev/null
+++ b/boost/qvm/detail/mat_assign.hpp
@@ -0,0 +1,75 @@
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_47136D2C385411E7BA27D3B681262D2E
+#define UUID_47136D2C385411E7BA27D3B681262D2E
+
+#include <boost/qvm/gen/mat_assign2.hpp>
+#include <boost/qvm/gen/mat_assign3.hpp>
+#include <boost/qvm/gen/mat_assign4.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ namespace
+ qvm_detail
+ {
+ template <int M,int N>
+ struct
+ assign_mm_defined
+ {
+ static bool const value=false;
+ };
+
+ template <int I,int N>
+ struct
+ copy_matrix_elements
+ {
+ template <class A,class B>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ void
+ f( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<I/mat_traits<A>::cols,I%mat_traits<A>::cols>(a) =
+ mat_traits<B>::template read_element<I/mat_traits<B>::cols,I%mat_traits<B>::cols>(b);
+ copy_matrix_elements<I+1,N>::f(a,b);
+ }
+ };
+
+ template <int N>
+ struct
+ copy_matrix_elements<N,N>
+ {
+ template <class A,class B>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ void
+ f( A &, B const & )
+ {
+ }
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename boost::enable_if_c<
+ is_mat<A>::value && is_mat<B>::value &&
+ mat_traits<A>::rows==mat_traits<B>::rows &&
+ mat_traits<A>::cols==mat_traits<B>::cols &&
+ !qvm_detail::assign_mm_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
+ A &>::type
+ assign( A & a, B const & b )
+ {
+ qvm_detail::copy_matrix_elements<0,mat_traits<A>::rows*mat_traits<A>::cols>::f(a,b);
+ return a;
+ }
+ }
+ }
+
+#endif