mat_assign4.hpp 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. //Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
  2. //Distributed under the Boost Software License, Version 1.0. (See accompanying
  3. //file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  4. #ifndef BOOST_QVM_AD4F14F2444066D06BC430B7323BA122
  5. #define BOOST_QVM_AD4F14F2444066D06BC430B7323BA122
  6. //This file was generated by a program. Do not edit manually.
  7. #include <boost/qvm/enable_if.hpp>
  8. #include <boost/qvm/inline.hpp>
  9. #include <boost/qvm/mat_traits.hpp>
  10. namespace
  11. boost
  12. {
  13. namespace
  14. qvm
  15. {
  16. template <class A,class B>
  17. BOOST_QVM_INLINE_OPERATIONS
  18. typename enable_if_c<
  19. mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
  20. mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
  21. A &>::type
  22. assign( A & a, B const & b )
  23. {
  24. mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
  25. mat_traits<A>::template write_element<0,1>(a)=mat_traits<B>::template read_element<0,1>(b);
  26. mat_traits<A>::template write_element<0,2>(a)=mat_traits<B>::template read_element<0,2>(b);
  27. mat_traits<A>::template write_element<0,3>(a)=mat_traits<B>::template read_element<0,3>(b);
  28. mat_traits<A>::template write_element<1,0>(a)=mat_traits<B>::template read_element<1,0>(b);
  29. mat_traits<A>::template write_element<1,1>(a)=mat_traits<B>::template read_element<1,1>(b);
  30. mat_traits<A>::template write_element<1,2>(a)=mat_traits<B>::template read_element<1,2>(b);
  31. mat_traits<A>::template write_element<1,3>(a)=mat_traits<B>::template read_element<1,3>(b);
  32. mat_traits<A>::template write_element<2,0>(a)=mat_traits<B>::template read_element<2,0>(b);
  33. mat_traits<A>::template write_element<2,1>(a)=mat_traits<B>::template read_element<2,1>(b);
  34. mat_traits<A>::template write_element<2,2>(a)=mat_traits<B>::template read_element<2,2>(b);
  35. mat_traits<A>::template write_element<2,3>(a)=mat_traits<B>::template read_element<2,3>(b);
  36. mat_traits<A>::template write_element<3,0>(a)=mat_traits<B>::template read_element<3,0>(b);
  37. mat_traits<A>::template write_element<3,1>(a)=mat_traits<B>::template read_element<3,1>(b);
  38. mat_traits<A>::template write_element<3,2>(a)=mat_traits<B>::template read_element<3,2>(b);
  39. mat_traits<A>::template write_element<3,3>(a)=mat_traits<B>::template read_element<3,3>(b);
  40. return a;
  41. }
  42. namespace
  43. sfinae
  44. {
  45. using ::boost::qvm::assign;
  46. }
  47. namespace
  48. qvm_detail
  49. {
  50. template <int R,int C>
  51. struct assign_mm_defined;
  52. template <>
  53. struct
  54. assign_mm_defined<4,4>
  55. {
  56. static bool const value=true;
  57. };
  58. }
  59. template <class A,class B>
  60. BOOST_QVM_INLINE_OPERATIONS
  61. typename enable_if_c<
  62. mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
  63. mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
  64. A &>::type
  65. assign( A & a, B const & b )
  66. {
  67. mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
  68. mat_traits<A>::template write_element<1,0>(a)=mat_traits<B>::template read_element<1,0>(b);
  69. mat_traits<A>::template write_element<2,0>(a)=mat_traits<B>::template read_element<2,0>(b);
  70. mat_traits<A>::template write_element<3,0>(a)=mat_traits<B>::template read_element<3,0>(b);
  71. return a;
  72. }
  73. namespace
  74. sfinae
  75. {
  76. using ::boost::qvm::assign;
  77. }
  78. namespace
  79. qvm_detail
  80. {
  81. template <int R,int C>
  82. struct assign_mm_defined;
  83. template <>
  84. struct
  85. assign_mm_defined<4,1>
  86. {
  87. static bool const value=true;
  88. };
  89. }
  90. template <class A,class B>
  91. BOOST_QVM_INLINE_OPERATIONS
  92. typename enable_if_c<
  93. mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
  94. mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
  95. A &>::type
  96. assign( A & a, B const & b )
  97. {
  98. mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
  99. mat_traits<A>::template write_element<0,1>(a)=mat_traits<B>::template read_element<0,1>(b);
  100. mat_traits<A>::template write_element<0,2>(a)=mat_traits<B>::template read_element<0,2>(b);
  101. mat_traits<A>::template write_element<0,3>(a)=mat_traits<B>::template read_element<0,3>(b);
  102. return a;
  103. }
  104. namespace
  105. sfinae
  106. {
  107. using ::boost::qvm::assign;
  108. }
  109. namespace
  110. qvm_detail
  111. {
  112. template <int R,int C>
  113. struct assign_mm_defined;
  114. template <>
  115. struct
  116. assign_mm_defined<1,4>
  117. {
  118. static bool const value=true;
  119. };
  120. }
  121. }
  122. }
  123. #endif