Assign.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // This file is part of Eigen, a lightweight C++ template library
  2. // for linear algebra.
  3. //
  4. // Copyright (C) 2007 Michael Olbrich <michael.olbrich@gmx.net>
  5. // Copyright (C) 2006-2010 Benoit Jacob <jacob.benoit.1@gmail.com>
  6. // Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
  7. //
  8. // This Source Code Form is subject to the terms of the Mozilla
  9. // Public License v. 2.0. If a copy of the MPL was not distributed
  10. // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
  11. #ifndef EIGEN_ASSIGN_H
  12. #define EIGEN_ASSIGN_H
  13. namespace Eigen {
  14. template<typename Derived>
  15. template<typename OtherDerived>
  16. EIGEN_STRONG_INLINE Derived& DenseBase<Derived>
  17. ::lazyAssign(const DenseBase<OtherDerived>& other)
  18. {
  19. enum{
  20. SameType = internal::is_same<typename Derived::Scalar,typename OtherDerived::Scalar>::value
  21. };
  22. EIGEN_STATIC_ASSERT_LVALUE(Derived)
  23. EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Derived,OtherDerived)
  24. EIGEN_STATIC_ASSERT(SameType,YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY)
  25. eigen_assert(rows() == other.rows() && cols() == other.cols());
  26. internal::call_assignment_no_alias(derived(),other.derived());
  27. return derived();
  28. }
  29. template<typename Derived>
  30. template<typename OtherDerived>
  31. EIGEN_DEVICE_FUNC
  32. EIGEN_STRONG_INLINE Derived& DenseBase<Derived>::operator=(const DenseBase<OtherDerived>& other)
  33. {
  34. internal::call_assignment(derived(), other.derived());
  35. return derived();
  36. }
  37. template<typename Derived>
  38. EIGEN_DEVICE_FUNC
  39. EIGEN_STRONG_INLINE Derived& DenseBase<Derived>::operator=(const DenseBase& other)
  40. {
  41. internal::call_assignment(derived(), other.derived());
  42. return derived();
  43. }
  44. template<typename Derived>
  45. EIGEN_DEVICE_FUNC
  46. EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const MatrixBase& other)
  47. {
  48. internal::call_assignment(derived(), other.derived());
  49. return derived();
  50. }
  51. template<typename Derived>
  52. template <typename OtherDerived>
  53. EIGEN_DEVICE_FUNC
  54. EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const DenseBase<OtherDerived>& other)
  55. {
  56. internal::call_assignment(derived(), other.derived());
  57. return derived();
  58. }
  59. template<typename Derived>
  60. template <typename OtherDerived>
  61. EIGEN_DEVICE_FUNC
  62. EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const EigenBase<OtherDerived>& other)
  63. {
  64. internal::call_assignment(derived(), other.derived());
  65. return derived();
  66. }
  67. template<typename Derived>
  68. template<typename OtherDerived>
  69. EIGEN_DEVICE_FUNC
  70. EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::operator=(const ReturnByValue<OtherDerived>& other)
  71. {
  72. other.derived().evalTo(derived());
  73. return derived();
  74. }
  75. } // end namespace Eigen
  76. #endif // EIGEN_ASSIGN_H