traits<Ref>::match: use correct strides
This commit is contained in:
		
							parent
							
								
									516d08a490
								
							
						
					
					
						commit
						f78c37f0af
					
				| @ -26,7 +26,9 @@ struct traits<Ref<PlainObjectType_, Options_, StrideType_> > | ||||
|   enum { | ||||
|     Options = Options_, | ||||
|     Flags = traits<Map<PlainObjectType_, Options_, StrideType_> >::Flags | NestByRefBit, | ||||
|     Alignment = traits<Map<PlainObjectType_, Options_, StrideType_> >::Alignment | ||||
|     Alignment = traits<Map<PlainObjectType_, Options_, StrideType_> >::Alignment, | ||||
|     InnerStrideAtCompileTime = traits<Map<PlainObjectType_, Options_, StrideType_> >::InnerStrideAtCompileTime, | ||||
|     OuterStrideAtCompileTime = traits<Map<PlainObjectType_, Options_, StrideType_> >::OuterStrideAtCompileTime | ||||
|   }; | ||||
| 
 | ||||
|   template<typename Derived> struct match { | ||||
| @ -34,11 +36,11 @@ struct traits<Ref<PlainObjectType_, Options_, StrideType_> > | ||||
|       IsVectorAtCompileTime = PlainObjectType::IsVectorAtCompileTime || Derived::IsVectorAtCompileTime, | ||||
|       HasDirectAccess = internal::has_direct_access<Derived>::ret, | ||||
|       StorageOrderMatch = IsVectorAtCompileTime || ((PlainObjectType::Flags&RowMajorBit)==(Derived::Flags&RowMajorBit)), | ||||
|       InnerStrideMatch = int(StrideType::InnerStrideAtCompileTime)==int(Dynamic) | ||||
|                       || int(StrideType::InnerStrideAtCompileTime)==int(Derived::InnerStrideAtCompileTime) | ||||
|                       || (int(StrideType::InnerStrideAtCompileTime)==0 && int(Derived::InnerStrideAtCompileTime)==1), | ||||
|       InnerStrideMatch = int(InnerStrideAtCompileTime)==int(Dynamic) | ||||
|                       || int(InnerStrideAtCompileTime)==int(Derived::InnerStrideAtCompileTime) | ||||
|                       || (int(InnerStrideAtCompileTime)==0 && int(Derived::InnerStrideAtCompileTime)==1), | ||||
|       OuterStrideMatch = IsVectorAtCompileTime | ||||
|                       || int(StrideType::OuterStrideAtCompileTime)==int(Dynamic) || int(StrideType::OuterStrideAtCompileTime)==int(Derived::OuterStrideAtCompileTime), | ||||
|                       || int(OuterStrideAtCompileTime)==int(Dynamic) || int(OuterStrideAtCompileTime)==int(Derived::OuterStrideAtCompileTime), | ||||
|       // NOTE, this indirection of evaluator<Derived>::Alignment is needed
 | ||||
|       // to workaround a very strange bug in MSVC related to the instantiation
 | ||||
|       // of has_*ary_operator in evaluator<CwiseNullaryOp>.
 | ||||
|  | ||||
							
								
								
									
										15
									
								
								test/ref.cpp
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								test/ref.cpp
									
									
									
									
									
								
							| @ -341,6 +341,17 @@ template <typename MatrixType, typename Derived> void test_cref_move_ctor(const | ||||
|   VERIFY(test_is_equal(data1, obj_data2, MatrixType::MaxSizeAtCompileTime == Dynamic && owns_data)); | ||||
| } | ||||
| 
 | ||||
| template <typename MatrixType> | ||||
| void test_contiguous_ref_no_copy(const PlainObjectBase<MatrixType> &obj) { | ||||
|   typedef Ref<MatrixType, Unaligned, Stride<0, 0>> Ref_; | ||||
|   typedef Ref<const MatrixType, Unaligned, Stride<0, 0>> CRef_; | ||||
|   MatrixType m(obj); | ||||
|   Ref_ ref(m); | ||||
|   VERIFY(test_is_equal(ref.data(), m.data(), true)); | ||||
|   CRef_ cref(m); | ||||
|   VERIFY(test_is_equal(cref.data(), m.data(), true)); | ||||
| } | ||||
| 
 | ||||
| EIGEN_DECLARE_TEST(ref) | ||||
| { | ||||
|   for(int i = 0; i < g_repeat; i++) { | ||||
| @ -375,4 +386,8 @@ EIGEN_DECLARE_TEST(ref) | ||||
|   CALL_SUBTEST_9( test_cref_move_ctor<MatrixXd>(MatrixXd(9, 5)) ); | ||||
|   CALL_SUBTEST_9( test_cref_move_ctor<Matrix3d>(Matrix3d::Ones()) ); | ||||
|   CALL_SUBTEST_9( test_cref_move_ctor<Matrix3d>(Matrix3d()) ); | ||||
|   CALL_SUBTEST_10(test_contiguous_ref_no_copy(VectorXd(9))); | ||||
|   CALL_SUBTEST_10(test_contiguous_ref_no_copy(Vector3d())); | ||||
|   CALL_SUBTEST_10(test_contiguous_ref_no_copy(MatrixXd(9, 5))); | ||||
|   CALL_SUBTEST_10(test_contiguous_ref_no_copy(Matrix3d())); | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 wk
						wk