(in branch) Merged from trunk r8058-r8097
							parent
							
								
									21140ea0d5
								
							
						
					
					
						commit
						2fff75562f
					
				
							
								
								
									
										356
									
								
								.cproject
								
								
								
								
							
							
						
						
									
										356
									
								
								.cproject
								
								
								
								
							|  | @ -380,6 +380,14 @@ | |||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="testGaussianFactor.run" path="linear/tests" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>testGaussianFactor.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="all" path="inference" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
|  | @ -406,7 +414,6 @@ | |||
| 			</target> | ||||
| 			<target name="tests/testBayesTree.run" path="inference" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments/> | ||||
| 				<buildTarget>tests/testBayesTree.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>false</useDefaultCommand> | ||||
|  | @ -414,7 +421,6 @@ | |||
| 			</target> | ||||
| 			<target name="testBinaryBayesNet.run" path="inference" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments/> | ||||
| 				<buildTarget>testBinaryBayesNet.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>false</useDefaultCommand> | ||||
|  | @ -462,7 +468,6 @@ | |||
| 			</target> | ||||
| 			<target name="testSymbolicBayesNet.run" path="inference" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments/> | ||||
| 				<buildTarget>testSymbolicBayesNet.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>false</useDefaultCommand> | ||||
|  | @ -470,7 +475,6 @@ | |||
| 			</target> | ||||
| 			<target name="tests/testSymbolicFactor.run" path="inference" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments/> | ||||
| 				<buildTarget>tests/testSymbolicFactor.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>false</useDefaultCommand> | ||||
|  | @ -478,7 +482,6 @@ | |||
| 			</target> | ||||
| 			<target name="testSymbolicFactorGraph.run" path="inference" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments/> | ||||
| 				<buildTarget>testSymbolicFactorGraph.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>false</useDefaultCommand> | ||||
|  | @ -494,20 +497,11 @@ | |||
| 			</target> | ||||
| 			<target name="tests/testBayesTree" path="inference" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments/> | ||||
| 				<buildTarget>tests/testBayesTree</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>false</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="testGaussianFactor.run" path="linear/tests" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>testGaussianFactor.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="check" path="tests" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
|  | @ -534,6 +528,7 @@ | |||
| 			</target> | ||||
| 			<target name="testGraph.run" path="tests" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments/> | ||||
| 				<buildTarget>testGraph.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>false</useDefaultCommand> | ||||
|  | @ -605,6 +600,7 @@ | |||
| 			</target> | ||||
| 			<target name="testInference.run" path="tests" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments/> | ||||
| 				<buildTarget>testInference.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>false</useDefaultCommand> | ||||
|  | @ -612,6 +608,7 @@ | |||
| 			</target> | ||||
| 			<target name="testGaussianFactor.run" path="tests" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments/> | ||||
| 				<buildTarget>testGaussianFactor.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>false</useDefaultCommand> | ||||
|  | @ -619,6 +616,7 @@ | |||
| 			</target> | ||||
| 			<target name="testJunctionTree.run" path="tests" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments/> | ||||
| 				<buildTarget>testJunctionTree.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>false</useDefaultCommand> | ||||
|  | @ -626,6 +624,7 @@ | |||
| 			</target> | ||||
| 			<target name="testSymbolicBayesNet.run" path="tests" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments/> | ||||
| 				<buildTarget>testSymbolicBayesNet.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>false</useDefaultCommand> | ||||
|  | @ -633,6 +632,7 @@ | |||
| 			</target> | ||||
| 			<target name="testSymbolicFactorGraph.run" path="tests" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments/> | ||||
| 				<buildTarget>testSymbolicFactorGraph.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>false</useDefaultCommand> | ||||
|  | @ -702,22 +702,6 @@ | |||
| 				<useDefaultCommand>false</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="tests/testPose2.run" path="build_retract/gtsam/geometry" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>tests/testPose2.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="tests/testPose3.run" path="build_retract/gtsam/geometry" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>tests/testPose3.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="all" path="CppUnitLite" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
|  | @ -734,6 +718,22 @@ | |||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="tests/testPose2.run" path="build_retract/gtsam/geometry" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>tests/testPose2.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="tests/testPose3.run" path="build_retract/gtsam/geometry" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>tests/testPose3.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="all" path="spqr_mini" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
|  | @ -758,15 +758,7 @@ | |||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="all" path="build_wrap" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>all</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="check" path="build_wrap" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 			<target name="check" path="build/gtsam/nonlinear" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>check</buildTarget> | ||||
|  | @ -774,14 +766,6 @@ | |||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="clean" path="build_wrap" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>clean</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="tests/testGeneralSFMFactor.run" path="build/gtsam/slam" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
|  | @ -822,7 +806,15 @@ | |||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="check" path="build/gtsam/nonlinear" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 			<target name="all" path="build_wrap" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>all</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="check" path="build_wrap" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>check</buildTarget> | ||||
|  | @ -830,6 +822,14 @@ | |||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="clean" path="build_wrap" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>clean</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="check" path="build/geometry" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
|  | @ -1152,7 +1152,6 @@ | |||
| 			</target> | ||||
| 			<target name="testErrors.run" path="linear" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments/> | ||||
| 				<buildTarget>testErrors.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>false</useDefaultCommand> | ||||
|  | @ -1560,6 +1559,7 @@ | |||
| 			</target> | ||||
| 			<target name="testSimulated2DOriented.run" path="slam" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments/> | ||||
| 				<buildTarget>testSimulated2DOriented.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>false</useDefaultCommand> | ||||
|  | @ -1599,6 +1599,7 @@ | |||
| 			</target> | ||||
| 			<target name="testSimulated2D.run" path="slam" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments/> | ||||
| 				<buildTarget>testSimulated2D.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>false</useDefaultCommand> | ||||
|  | @ -1606,6 +1607,7 @@ | |||
| 			</target> | ||||
| 			<target name="testSimulated3D.run" path="slam" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments/> | ||||
| 				<buildTarget>testSimulated3D.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>false</useDefaultCommand> | ||||
|  | @ -1619,6 +1621,85 @@ | |||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="cmake" path="build_cmake" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>cmake</buildCommand> | ||||
| 				<buildArguments>..</buildArguments> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>false</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="all" path="build_cmake" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2 VERBOSE=1</buildArguments> | ||||
| 				<buildTarget>all</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>false</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="all j5" path="build_cmake" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j5 VERBOSE=1</buildArguments> | ||||
| 				<buildTarget>all</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>false</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="clean" path="build_cmake" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>clean</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="test" path="build_cmake" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>test</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="testSimulated2D.run" path="build_cmake" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>testSimulated2D.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="wrap_testWrap.run" path="build_cmake" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>wrap_testWrap.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="check" path="build_cmake" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>check</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="check j5" path="build_cmake" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j5</buildArguments> | ||||
| 				<buildTarget>check</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>false</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="install" path="build_cmake" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>install</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="tests/testDSFVector.run" path="build/gtsam/base" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
|  | @ -1853,6 +1934,7 @@ | |||
| 			</target> | ||||
| 			<target name="tests/testGaussianISAM2" path="build/slam" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments/> | ||||
| 				<buildTarget>tests/testGaussianISAM2</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>false</useDefaultCommand> | ||||
|  | @ -1874,46 +1956,6 @@ | |||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="install" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>install</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="clean" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>clean</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="check" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>check</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="all" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>all</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="dist" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>dist</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="testRot3.run" path="geometry" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
|  | @ -2010,6 +2052,94 @@ | |||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="install" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>install</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="clean" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>clean</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="check" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>check</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="all" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>all</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="dist" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>dist</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="check" path="build/wrap" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>check</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="install" path="build/wrap" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>install</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="tests/testSpirit.run" path="build/wrap" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>tests/testSpirit.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="tests/testWrap.run" path="build/wrap" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>tests/testWrap.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="clean" path="build/wrap" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>clean</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="all" path="build/wrap" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>all</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="check" path="build" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
|  | @ -2066,54 +2196,6 @@ | |||
| 				<useDefaultCommand>false</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="check" path="build/wrap" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>check</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="install" path="build/wrap" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>install</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="tests/testSpirit.run" path="build/wrap" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>tests/testSpirit.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="tests/testWrap.run" path="build/wrap" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>tests/testWrap.run</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="clean" path="build/wrap" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>clean</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 			<target name="all" path="build/wrap" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments>-j2</buildArguments> | ||||
| 				<buildTarget>all</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 		</buildTargets> | ||||
| 	</storageModule> | ||||
| </cproject> | ||||
|  |  | |||
|  | @ -0,0 +1,72 @@ | |||
| project(GTSAM CXX C) | ||||
| cmake_minimum_required(VERSION 2.6) | ||||
| 
 | ||||
| # Set the version number for the libarary | ||||
| set (GTSAM_VERSION_MAJOR 0) | ||||
| set (GTSAM_VERSION_MINOR 9) | ||||
| set (GTSAM_VERSION_PATCH 3) | ||||
| 
 | ||||
| # guard against in-source builds | ||||
| if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) | ||||
|   message(FATAL_ERROR "In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there. You may need to remove CMakeCache.txt. ") | ||||
| endif() | ||||
| 
 | ||||
| # guard against bad build-type strings | ||||
| if (NOT CMAKE_BUILD_TYPE) | ||||
|   set(CMAKE_BUILD_TYPE "Debug") | ||||
| endif() | ||||
| 
 | ||||
| string(TOLOWER "${CMAKE_BUILD_TYPE}" cmake_build_type_tolower) | ||||
| if(    NOT cmake_build_type_tolower STREQUAL "debug" | ||||
|    AND NOT cmake_build_type_tolower STREQUAL "release" | ||||
|    AND NOT cmake_build_type_tolower STREQUAL "relwithdebinfo") | ||||
|   message(FATAL_ERROR "Unknown build type \"${CMAKE_BUILD_TYPE}\". Allowed values are Debug, Release, RelWithDebInfo (case-insensitive).") | ||||
| endif() | ||||
| 
 | ||||
| # Turn off function inlining when debugging | ||||
| set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fno-inline -Wall") | ||||
| set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-inline -Wall") | ||||
| # No optimization in relwithdebinfo | ||||
| set(CMAKE_C_FLAGS_RELWITHDEBINFO "-g -fno-inline -Wall") | ||||
| set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-g -fno-inline -Wall") | ||||
| # Eigen no debug in release mode | ||||
| set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DEIGEN_NO_DEBUG") | ||||
| set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DEIGEN_NO_DEBUG") | ||||
| 
 | ||||
| # Configurable Options | ||||
| 
 | ||||
| 
 | ||||
| # Pull in tests | ||||
| enable_testing() | ||||
| include(Dart) | ||||
| include(CTest) | ||||
| 
 | ||||
| # Enable make check (http://www.cmake.org/Wiki/CMakeEmulateMakeCheck) | ||||
| add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}) | ||||
| 
 | ||||
| # Find boost | ||||
| find_package(Boost 1.40 REQUIRED) | ||||
| 
 | ||||
| # General build settings | ||||
| include_directories( | ||||
|   gtsam/3rdparty/UFconfig  | ||||
|   gtsam/3rdparty/CCOLAMD/Include | ||||
|   ${CMAKE_SOURCE_DIR} | ||||
|   CppUnitLite | ||||
|   ${BOOST_INCLUDE_DIR}) | ||||
| link_directories(${Boost_LIBRARY_DIRS}) | ||||
| 
 | ||||
| # Build GTSAM library | ||||
| add_subdirectory(gtsam) | ||||
| 
 | ||||
| # Build CppUnitLite | ||||
| add_subdirectory(CppUnitLite) | ||||
| 
 | ||||
| # Build Tests | ||||
| add_subdirectory(tests) | ||||
| 
 | ||||
| # Build wrap | ||||
| add_subdirectory(wrap) | ||||
| 
 | ||||
| # Build examples | ||||
| add_subdirectory(examples) | ||||
|  | @ -0,0 +1,9 @@ | |||
| # Build/install CppUnitLite | ||||
| 
 | ||||
| FILE(GLOB cppunitlite_headers "*.h") | ||||
| FILE(GLOB cppunitlite_src "*.cpp") | ||||
| 
 | ||||
| ADD_LIBRARY(CppUnitLite STATIC ${cppunitlite_src}) | ||||
| 
 | ||||
| install(FILES ${cppunitlite_headers} DESTINATION include/CppUnitLite) | ||||
| install(TARGETS CppUnitLite ARCHIVE DESTINATION lib) | ||||
|  | @ -0,0 +1,14 @@ | |||
| # Build example executables | ||||
| FILE(GLOB example_srcs "*.cpp") | ||||
| foreach(example_src ${example_srcs} ) | ||||
|     get_filename_component(example_base ${example_src} NAME_WE) | ||||
|     set( example_bin ${example_base} ) | ||||
|     add_executable(${example_bin} ${example_src}) | ||||
|     target_link_libraries(${example_bin} gtsam) | ||||
| endforeach(example_src) | ||||
| 
 | ||||
| add_subdirectory(vSLAMexample) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -0,0 +1,17 @@ | |||
| # Build vSLAMexample | ||||
| 
 | ||||
| set ( srcs  | ||||
|   Feature2D.cpp | ||||
|   vSLAMutils.cpp | ||||
| ) | ||||
| add_library(vSLAMexample ${srcs}) | ||||
| 
 | ||||
| add_executable(vISAMexample vISAMexample.cpp) | ||||
| target_link_libraries(vISAMexample vSLAMexample gtsam) | ||||
| 
 | ||||
| add_executable(vSFMexample vSFMexample.cpp) | ||||
| target_link_libraries(vSFMexample vSLAMexample gtsam) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -0,0 +1,15 @@ | |||
| # install CCOLAMD headers | ||||
| install(FILES CCOLAMD/Include/ccolamd.h DESTINATION ${CMAKE_INSTALL_PREFIX}/include/gtsam/3rdparty/CCOLAMD) | ||||
| install(FILES UFconfig/UFconfig.h DESTINATION ${CMAKE_INSTALL_PREFIX}/include/gtsam/3rdparty/UFconfig) | ||||
| 
 | ||||
| # install Eigen - only the headers | ||||
| install(DIRECTORY Eigen/Eigen  | ||||
|     DESTINATION ${CMAKE_INSTALL_PREFIX}/include/gtsam/3rdparty/Eigen | ||||
|     FILES_MATCHING PATTERN "*.h") | ||||
| file(GLOB eigen_dir_headers_all "Eigen/Eigen/*") | ||||
| foreach(eigen_dir ${eigen_dir_headers_all}) | ||||
|     get_filename_component(filename ${eigen_dir} NAME) | ||||
|     if (NOT ((${filename} MATCHES "CMakeLists.txt") OR (${filename} MATCHES "src") OR (${filename} MATCHES ".svn"))) | ||||
|         install(FILES Eigen/Eigen/${filename} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/gtsam/3rdparty/Eigen/Eigen)      | ||||
|     endif() | ||||
| endforeach(eigen_dir) | ||||
|  | @ -283,11 +283,17 @@ if(EIGEN_BUILD_PKGCONFIG) | |||
|     STRING(REPLACE ${path_separator} ";" pkg_config_libdir_search "$ENV{PKG_CONFIG_LIBDIR}") | ||||
|     message(STATUS "searching for 'pkgconfig' directory in PKG_CONFIG_LIBDIR ( $ENV{PKG_CONFIG_LIBDIR} ), ${CMAKE_INSTALL_PREFIX}/share, and ${CMAKE_INSTALL_PREFIX}/lib") | ||||
|     FIND_PATH(pkg_config_libdir pkgconfig ${pkg_config_libdir_search} ${CMAKE_INSTALL_PREFIX}/share ${CMAKE_INSTALL_PREFIX}/lib ${pkg_config_libdir_search}) | ||||
|     message(STATUS "found ${pkg_config_libdir}/pkgconfig" ) | ||||
|     if(pkg_config_libdir) | ||||
|         SET(pkg_config_install_dir ${pkg_config_libdir}) | ||||
|         message(STATUS "found ${pkg_config_libdir}/pkgconfig" ) | ||||
|     else(pkg_config_libdir) | ||||
|         SET(pkg_config_install_dir ${CMAKE_INSTALL_PREFIX}/share) | ||||
|         message(STATUS "pkgconfig not found; installing in ${pkg_config_install_dir}" ) | ||||
|     endif(pkg_config_libdir) | ||||
| 
 | ||||
|     configure_file(eigen3.pc.in eigen3.pc) | ||||
|     install(FILES ${CMAKE_CURRENT_BINARY_DIR}/eigen3.pc | ||||
|         DESTINATION ${pkg_config_libdir}/pkgconfig | ||||
|         DESTINATION ${pkg_config_install_dir}/pkgconfig | ||||
|         ) | ||||
| endif(EIGEN_BUILD_PKGCONFIG) | ||||
| 
 | ||||
|  |  | |||
|  | @ -167,7 +167,7 @@ | |||
|   #include <intrin.h> | ||||
| #endif | ||||
| 
 | ||||
| #if (defined(_CPPUNWIND) || defined(__EXCEPTIONS)) && !defined(EIGEN_NO_EXCEPTIONS) | ||||
| #if defined(_CPPUNWIND) || defined(__EXCEPTIONS) | ||||
|   #define EIGEN_EXCEPTIONS | ||||
| #endif | ||||
| 
 | ||||
|  |  | |||
|  | @ -68,10 +68,8 @@ class Array | |||
|     friend struct internal::conservative_resize_like_impl; | ||||
| 
 | ||||
|     using Base::m_storage; | ||||
| 
 | ||||
|   public: | ||||
|     enum { NeedsToAlign = (!(Options&DontAlign)) | ||||
|                           && SizeAtCompileTime!=Dynamic && ((static_cast<int>(sizeof(Scalar))*SizeAtCompileTime)%16)==0 }; | ||||
|     EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign) | ||||
| 
 | ||||
|     using Base::base; | ||||
|     using Base::coeff; | ||||
|  |  | |||
|  | @ -94,7 +94,7 @@ struct traits<Block<XprType, BlockRows, BlockCols, InnerPanel, HasDirectAccess> | |||
|     MaskPacketAccessBit = (InnerSize == Dynamic || (InnerSize % packet_traits<Scalar>::size) == 0) | ||||
|                        && (InnerStrideAtCompileTime == 1) | ||||
|                         ? PacketAccessBit : 0, | ||||
|     MaskAlignedBit = (InnerPanel && (OuterStrideAtCompileTime!=Dynamic) && ((OuterStrideAtCompileTime % packet_traits<Scalar>::size) == 0)) ? AlignedBit : 0, | ||||
|     MaskAlignedBit = (InnerPanel && (OuterStrideAtCompileTime!=Dynamic) && (((OuterStrideAtCompileTime * sizeof(Scalar)) % 16) == 0)) ? AlignedBit : 0, | ||||
|     FlagsLinearAccessBit = (RowsAtCompileTime == 1 || ColsAtCompileTime == 1) ? LinearAccessBit : 0, | ||||
|     FlagsLvalueBit = is_lvalue<XprType>::value ? LvalueBit : 0, | ||||
|     FlagsRowMajorBit = IsRowMajor ? RowMajorBit : 0, | ||||
|  |  | |||
|  | @ -170,8 +170,8 @@ template<typename Derived> class MapBase<Derived, ReadOnlyAccessors> | |||
|       EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(internal::traits<Derived>::Flags&PacketAccessBit, | ||||
|                                         internal::inner_stride_at_compile_time<Derived>::ret==1), | ||||
|                           PACKET_ACCESS_REQUIRES_TO_HAVE_INNER_STRIDE_FIXED_TO_1); | ||||
|       eigen_assert(EIGEN_IMPLIES(internal::traits<Derived>::Flags&AlignedBit, (size_t(m_data) % (sizeof(Scalar)*internal::packet_traits<Scalar>::size)) == 0) | ||||
|         && "data is not aligned"); | ||||
|       eigen_assert(EIGEN_IMPLIES(internal::traits<Derived>::Flags&AlignedBit, (size_t(m_data) % 16) == 0) | ||||
|                    && "data is not aligned"); | ||||
|     } | ||||
| 
 | ||||
|     PointerType m_data; | ||||
|  |  | |||
|  | @ -153,10 +153,6 @@ class Matrix | |||
| 
 | ||||
|     typedef typename Base::PlainObject PlainObject; | ||||
| 
 | ||||
|     enum { NeedsToAlign = (!(Options&DontAlign)) | ||||
|                           && SizeAtCompileTime!=Dynamic && ((static_cast<int>(sizeof(Scalar))*SizeAtCompileTime)%16)==0 }; | ||||
|     EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign) | ||||
| 
 | ||||
|     using Base::base; | ||||
|     using Base::coeffRef; | ||||
| 
 | ||||
|  |  | |||
|  | @ -34,6 +34,19 @@ | |||
| 
 | ||||
| namespace internal { | ||||
| 
 | ||||
| template<typename Index> | ||||
| EIGEN_ALWAYS_INLINE void check_rows_cols_for_overflow(Index rows, Index cols) | ||||
| { | ||||
|   // http://hg.mozilla.org/mozilla-central/file/6c8a909977d3/xpcom/ds/CheckedInt.h#l242
 | ||||
|   // we assume Index is signed
 | ||||
|   Index max_index = (size_t(1) << (8 * sizeof(Index) - 1)) - 1; // assume Index is signed
 | ||||
|   bool error = (rows < 0  || cols < 0)  ? true | ||||
|              : (rows == 0 || cols == 0) ? false | ||||
|                                         : (rows > max_index / cols); | ||||
|   if (error) | ||||
|     throw_std_bad_alloc(); | ||||
| } | ||||
| 
 | ||||
| template <typename Derived, typename OtherDerived = Derived, bool IsVector = static_cast<bool>(Derived::IsVectorAtCompileTime)> struct conservative_resize_like_impl; | ||||
| 
 | ||||
| template<typename MatrixTypeA, typename MatrixTypeB, bool SwapPointers> struct matrix_swap_impl; | ||||
|  | @ -84,14 +97,12 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type | |||
|     template<typename StrideType> struct StridedConstMapType { typedef Eigen::Map<const Derived, Unaligned, StrideType> type; }; | ||||
|     template<typename StrideType> struct StridedAlignedMapType { typedef Eigen::Map<Derived, Aligned, StrideType> type; }; | ||||
|     template<typename StrideType> struct StridedConstAlignedMapType { typedef Eigen::Map<const Derived, Aligned, StrideType> type; }; | ||||
|      | ||||
| 
 | ||||
|   protected: | ||||
|     DenseStorage<Scalar, Base::MaxSizeAtCompileTime, Base::RowsAtCompileTime, Base::ColsAtCompileTime, Options> m_storage; | ||||
| 
 | ||||
|   public: | ||||
|     enum { NeedsToAlign = (!(Options&DontAlign)) | ||||
|                           && SizeAtCompileTime!=Dynamic && ((static_cast<int>(sizeof(Scalar))*SizeAtCompileTime)%16)==0 }; | ||||
|     enum { NeedsToAlign = SizeAtCompileTime != Dynamic && (internal::traits<Derived>::Flags & AlignedBit) != 0 }; | ||||
|     EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign) | ||||
| 
 | ||||
|     Base& base() { return *static_cast<Base*>(this); } | ||||
|  | @ -200,11 +211,13 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type | |||
|     EIGEN_STRONG_INLINE void resize(Index rows, Index cols) | ||||
|     { | ||||
|       #ifdef EIGEN_INITIALIZE_MATRICES_BY_ZERO | ||||
|         internal::check_rows_cols_for_overflow(rows, cols); | ||||
|         Index size = rows*cols; | ||||
|         bool size_changed = size != this->size(); | ||||
|         m_storage.resize(size, rows, cols); | ||||
|         if(size_changed) EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED | ||||
|       #else | ||||
|         internal::check_rows_cols_for_overflow(rows, cols); | ||||
|         m_storage.resize(rows*cols, rows, cols); | ||||
|       #endif | ||||
|     } | ||||
|  | @ -273,6 +286,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type | |||
|     EIGEN_STRONG_INLINE void resizeLike(const EigenBase<OtherDerived>& _other) | ||||
|     { | ||||
|       const OtherDerived& other = _other.derived(); | ||||
|       internal::check_rows_cols_for_overflow(other.rows(), other.cols()); | ||||
|       const Index othersize = other.rows()*other.cols(); | ||||
|       if(RowsAtCompileTime == 1) | ||||
|       { | ||||
|  | @ -417,6 +431,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type | |||
|       : m_storage(other.derived().rows() * other.derived().cols(), other.derived().rows(), other.derived().cols()) | ||||
|     { | ||||
|       _check_template_params(); | ||||
|       internal::check_rows_cols_for_overflow(other.derived().rows(), other.derived().cols()); | ||||
|       Base::operator=(other.derived()); | ||||
|     } | ||||
| 
 | ||||
|  | @ -581,6 +596,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type | |||
|     { | ||||
|       eigen_assert(rows >= 0 && (RowsAtCompileTime == Dynamic || RowsAtCompileTime == rows) | ||||
|              && cols >= 0 && (ColsAtCompileTime == Dynamic || ColsAtCompileTime == cols)); | ||||
|       internal::check_rows_cols_for_overflow(rows, cols);       | ||||
|       m_storage.resize(rows*cols,rows,cols); | ||||
|       EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED | ||||
|     } | ||||
|  | @ -638,6 +654,7 @@ struct internal::conservative_resize_like_impl | |||
|     if ( ( Derived::IsRowMajor && _this.cols() == cols) || // row-major and we change only the number of rows
 | ||||
|          (!Derived::IsRowMajor && _this.rows() == rows) )  // column-major and we change only the number of columns
 | ||||
|     { | ||||
|       internal::check_rows_cols_for_overflow(rows, cols); | ||||
|       _this.derived().m_storage.conservativeResize(rows*cols,rows,cols); | ||||
|     } | ||||
|     else | ||||
|  |  | |||
|  | @ -27,8 +27,8 @@ | |||
| 
 | ||||
| namespace internal { | ||||
| 
 | ||||
| static uint32x4_t p4ui_CONJ_XOR = { 0x00000000, 0x80000000, 0x00000000, 0x80000000 }; | ||||
| static uint32x2_t p2ui_CONJ_XOR = { 0x00000000, 0x80000000 }; | ||||
| static uint32x4_t p4ui_CONJ_XOR = EIGEN_INIT_NEON_PACKET4(0x00000000, 0x80000000, 0x00000000, 0x80000000); | ||||
| static uint32x2_t p2ui_CONJ_XOR = EIGEN_INIT_NEON_PACKET2(0x00000000, 0x80000000); | ||||
| 
 | ||||
| //---------- float ----------
 | ||||
| struct Packet2cf | ||||
|  |  | |||
|  | @ -52,6 +52,16 @@ typedef uint32x4_t  Packet4ui; | |||
| #define _EIGEN_DECLARE_CONST_Packet4i(NAME,X) \ | ||||
|   const Packet4i p4i_##NAME = pset1<Packet4i>(X) | ||||
| 
 | ||||
| #if defined(__llvm__) && !defined(__clang__) | ||||
|   //Special treatment for Apple's llvm-gcc, its NEON packet types are unions
 | ||||
|   #define EIGEN_INIT_NEON_PACKET2(X, Y)       {{X, Y}} | ||||
|   #define EIGEN_INIT_NEON_PACKET4(X, Y, Z, W) {{X, Y, Z, W}} | ||||
| #else | ||||
|   //Default initializer for packets
 | ||||
|   #define EIGEN_INIT_NEON_PACKET2(X, Y)       {X, Y} | ||||
|   #define EIGEN_INIT_NEON_PACKET4(X, Y, Z, W) {X, Y, Z, W} | ||||
| #endif | ||||
|      | ||||
| #ifndef __pld | ||||
| #define __pld(x) asm volatile ( "   pld [%[addr]]\n" :: [addr] "r" (x) : "cc" ); | ||||
| #endif | ||||
|  | @ -84,7 +94,7 @@ template<> struct packet_traits<int>    : default_packet_traits | |||
|   }; | ||||
| }; | ||||
| 
 | ||||
| #if EIGEN_GNUC_AT_MOST(4,4) | ||||
| #if EIGEN_GNUC_AT_MOST(4,4) && !defined(__llvm__) | ||||
| // workaround gcc 4.2, 4.3 and 4.4 compilatin issue
 | ||||
| EIGEN_STRONG_INLINE float32x4_t vld1q_f32(const float* x) { return ::vld1q_f32((const float32_t*)x); } | ||||
| EIGEN_STRONG_INLINE float32x2_t vld1_f32 (const float* x) { return ::vld1_f32 ((const float32_t*)x); } | ||||
|  | @ -100,12 +110,12 @@ template<> EIGEN_STRONG_INLINE Packet4i pset1<Packet4i>(const int&    from)   { | |||
| 
 | ||||
| template<> EIGEN_STRONG_INLINE Packet4f plset<float>(const float& a) | ||||
| { | ||||
|   Packet4f countdown = { 0, 1, 2, 3 }; | ||||
|   Packet4f countdown = EIGEN_INIT_NEON_PACKET4(0, 1, 2, 3); | ||||
|   return vaddq_f32(pset1<Packet4f>(a), countdown); | ||||
| } | ||||
| template<> EIGEN_STRONG_INLINE Packet4i plset<int>(const int& a) | ||||
| { | ||||
|   Packet4i countdown = { 0, 1, 2, 3 }; | ||||
|   Packet4i countdown = EIGEN_INIT_NEON_PACKET4(0, 1, 2, 3); | ||||
|   return vaddq_s32(pset1<Packet4i>(a), countdown); | ||||
| } | ||||
| 
 | ||||
|  | @ -395,25 +405,29 @@ template<> EIGEN_STRONG_INLINE int predux_max<Packet4i>(const Packet4i& a) | |||
|   return s[0]; | ||||
| } | ||||
| 
 | ||||
| template<int Offset> | ||||
| struct palign_impl<Offset,Packet4f> | ||||
| { | ||||
|   EIGEN_STRONG_INLINE static void run(Packet4f& first, const Packet4f& second) | ||||
|   { | ||||
|     if (Offset!=0) | ||||
|       first = vextq_f32(first, second, Offset); | ||||
|   } | ||||
| }; | ||||
| // this PALIGN_NEON business is to work around a bug in LLVM Clang 3.0 causing incorrect compilation errors,
 | ||||
| // see bug 347 and this LLVM bug: http://llvm.org/bugs/show_bug.cgi?id=11074
 | ||||
| #define PALIGN_NEON(Offset,Type,Command) \ | ||||
| template<>\ | ||||
| struct palign_impl<Offset,Type>\ | ||||
| {\ | ||||
|     EIGEN_STRONG_INLINE static void run(Type& first, const Type& second)\ | ||||
|     {\ | ||||
|         if (Offset!=0)\ | ||||
|             first = Command(first, second, Offset);\ | ||||
|     }\ | ||||
| };\ | ||||
| 
 | ||||
| template<int Offset> | ||||
| struct palign_impl<Offset,Packet4i> | ||||
| { | ||||
|   EIGEN_STRONG_INLINE static void run(Packet4i& first, const Packet4i& second) | ||||
|   { | ||||
|     if (Offset!=0) | ||||
|       first = vextq_s32(first, second, Offset); | ||||
|   } | ||||
| }; | ||||
| PALIGN_NEON(0,Packet4f,vextq_f32) | ||||
| PALIGN_NEON(1,Packet4f,vextq_f32) | ||||
| PALIGN_NEON(2,Packet4f,vextq_f32) | ||||
| PALIGN_NEON(3,Packet4f,vextq_f32) | ||||
| PALIGN_NEON(0,Packet4i,vextq_s32) | ||||
| PALIGN_NEON(1,Packet4i,vextq_s32) | ||||
| PALIGN_NEON(2,Packet4i,vextq_s32) | ||||
| PALIGN_NEON(3,Packet4i,vextq_s32) | ||||
|      | ||||
| #undef PALIGN_NEON | ||||
| 
 | ||||
| } // end namespace internal
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -118,14 +118,14 @@ inline void computeProductBlockingSizes(std::ptrdiff_t& k, std::ptrdiff_t& m, st | |||
|   // FIXME (a bit overkill maybe ?)
 | ||||
| 
 | ||||
|   template<typename CJ, typename A, typename B, typename C, typename T> struct gebp_madd_selector { | ||||
|     EIGEN_STRONG_INLINE EIGEN_ALWAYS_INLINE_ATTRIB static void run(const CJ& cj, A& a, B& b, C& c, T& /*t*/) | ||||
|     EIGEN_ALWAYS_INLINE static void run(const CJ& cj, A& a, B& b, C& c, T& /*t*/) | ||||
|     { | ||||
|       c = cj.pmadd(a,b,c); | ||||
|     } | ||||
|   }; | ||||
| 
 | ||||
|   template<typename CJ, typename T> struct gebp_madd_selector<CJ,T,T,T,T> { | ||||
|     EIGEN_STRONG_INLINE EIGEN_ALWAYS_INLINE_ATTRIB static void run(const CJ& cj, T& a, T& b, T& c, T& t) | ||||
|     EIGEN_ALWAYS_INLINE static void run(const CJ& cj, T& a, T& b, T& c, T& t) | ||||
|     { | ||||
|       t = b; t = cj.pmul(a,t); c = padd(c,t); | ||||
|     } | ||||
|  |  | |||
|  | @ -28,7 +28,7 @@ | |||
| 
 | ||||
| #define EIGEN_WORLD_VERSION 3 | ||||
| #define EIGEN_MAJOR_VERSION 0 | ||||
| #define EIGEN_MINOR_VERSION 3 | ||||
| #define EIGEN_MINOR_VERSION 4 | ||||
| 
 | ||||
| #define EIGEN_VERSION_AT_LEAST(x,y,z) (EIGEN_WORLD_VERSION>x || (EIGEN_WORLD_VERSION>=x && \ | ||||
|                                       (EIGEN_MAJOR_VERSION>y || (EIGEN_MAJOR_VERSION>=y && \ | ||||
|  | @ -45,7 +45,7 @@ | |||
|   #define EIGEN_GNUC_AT_MOST(x,y) 0 | ||||
| #endif | ||||
| 
 | ||||
| #if EIGEN_GNUC_AT_MOST(4,3) | ||||
| #if EIGEN_GNUC_AT_MOST(4,3) && !defined(__clang__) | ||||
|   // see bug 89
 | ||||
|   #define EIGEN_SAFE_TO_USE_STANDARD_ASSERT_MACRO 0 | ||||
| #else | ||||
|  | @ -130,31 +130,34 @@ | |||
| #define EIGEN_MAKESTRING2(a) #a | ||||
| #define EIGEN_MAKESTRING(a) EIGEN_MAKESTRING2(a) | ||||
| 
 | ||||
| // EIGEN_ALWAYS_INLINE_ATTRIB should be use in the declaration of function
 | ||||
| // which should be inlined even in debug mode.
 | ||||
| // FIXME with the always_inline attribute,
 | ||||
| // gcc 3.4.x reports the following compilation error:
 | ||||
| //   Eval.h:91: sorry, unimplemented: inlining failed in call to 'const Eigen::Eval<Derived> Eigen::MatrixBase<Scalar, Derived>::eval() const'
 | ||||
| //    : function body not available
 | ||||
| #if EIGEN_GNUC_AT_LEAST(4,0) | ||||
| #define EIGEN_ALWAYS_INLINE_ATTRIB __attribute__((always_inline)) | ||||
| #else | ||||
| #define EIGEN_ALWAYS_INLINE_ATTRIB | ||||
| #endif | ||||
| 
 | ||||
| #if EIGEN_GNUC_AT_LEAST(4,1) && !defined(__clang__) && !defined(__INTEL_COMPILER) | ||||
| #define EIGEN_FLATTEN_ATTRIB __attribute__((flatten)) | ||||
| #else | ||||
| #define EIGEN_FLATTEN_ATTRIB | ||||
| #endif | ||||
| 
 | ||||
| // EIGEN_FORCE_INLINE means "inline as much as possible"
 | ||||
| // EIGEN_STRONG_INLINE is a stronger version of the inline, using __forceinline on MSVC,
 | ||||
| // but it still doesn't use GCC's always_inline. This is useful in (common) situations where MSVC needs forceinline
 | ||||
| // but GCC is still doing fine with just inline.
 | ||||
| #if (defined _MSC_VER) || (defined __INTEL_COMPILER) | ||||
| #define EIGEN_STRONG_INLINE __forceinline | ||||
| #else | ||||
| #define EIGEN_STRONG_INLINE inline | ||||
| #endif | ||||
| 
 | ||||
| // EIGEN_ALWAYS_INLINE is the stronget, it has the effect of making the function inline and adding every possible
 | ||||
| // attribute to maximize inlining. This should only be used when really necessary: in particular,
 | ||||
| // it uses __attribute__((always_inline)) on GCC, which most of the time is useless and can severely harm compile times.
 | ||||
| // FIXME with the always_inline attribute,
 | ||||
| // gcc 3.4.x reports the following compilation error:
 | ||||
| //   Eval.h:91: sorry, unimplemented: inlining failed in call to 'const Eigen::Eval<Derived> Eigen::MatrixBase<Scalar, Derived>::eval() const'
 | ||||
| //    : function body not available
 | ||||
| #if EIGEN_GNUC_AT_LEAST(4,0) | ||||
| #define EIGEN_ALWAYS_INLINE __attribute__((always_inline)) inline | ||||
| #else | ||||
| #define EIGEN_ALWAYS_INLINE EIGEN_STRONG_INLINE | ||||
| #endif | ||||
| 
 | ||||
| #if (defined __GNUC__) | ||||
| #define EIGEN_DONT_INLINE __attribute__((noinline)) | ||||
| #elif (defined _MSC_VER) | ||||
|  | @ -249,7 +252,7 @@ | |||
| #define EIGEN_UNUSED_VARIABLE(var) (void)var; | ||||
| 
 | ||||
| #if (defined __GNUC__) | ||||
| #define EIGEN_ASM_COMMENT(X)  asm("#"X) | ||||
| #define EIGEN_ASM_COMMENT(X)  asm("#" X) | ||||
| #else | ||||
| #define EIGEN_ASM_COMMENT(X) | ||||
| #endif | ||||
|  |  | |||
|  | @ -82,6 +82,16 @@ | |||
| 
 | ||||
| namespace internal { | ||||
| 
 | ||||
| inline void throw_std_bad_alloc() | ||||
| { | ||||
|   #ifdef EIGEN_EXCEPTIONS | ||||
|     throw std::bad_alloc(); | ||||
|   #else | ||||
|     std::size_t huge = -1; | ||||
|     new int[huge]; | ||||
|   #endif | ||||
| } | ||||
| 
 | ||||
| /*****************************************************************************
 | ||||
| *** Implementation of handmade aligned functions                           *** | ||||
| *****************************************************************************/ | ||||
|  | @ -192,7 +202,7 @@ inline void check_that_malloc_is_allowed() | |||
| #endif | ||||
| 
 | ||||
| /** \internal Allocates \a size bytes. The returned pointer is guaranteed to have 16 bytes alignment.
 | ||||
|   * On allocation error, the returned pointer is null, and if exceptions are enabled then a std::bad_alloc is thrown. | ||||
|   * On allocation error, the returned pointer is null, and std::bad_alloc is thrown. | ||||
|   */ | ||||
| inline void* aligned_malloc(size_t size) | ||||
| { | ||||
|  | @ -213,10 +223,9 @@ inline void* aligned_malloc(size_t size) | |||
|     result = handmade_aligned_malloc(size); | ||||
|   #endif | ||||
| 
 | ||||
|   #ifdef EIGEN_EXCEPTIONS | ||||
|     if(result == 0) | ||||
|       throw std::bad_alloc(); | ||||
|   #endif | ||||
|   if(!result && size) | ||||
|     throw_std_bad_alloc(); | ||||
| 
 | ||||
|   return result; | ||||
| } | ||||
| 
 | ||||
|  | @ -241,7 +250,7 @@ inline void aligned_free(void *ptr) | |||
| /**
 | ||||
| * \internal | ||||
| * \brief Reallocates an aligned block of memory. | ||||
| * \throws std::bad_alloc if EIGEN_EXCEPTIONS are defined. | ||||
| * \throws std::bad_alloc on allocation failure | ||||
| **/ | ||||
| inline void* aligned_realloc(void *ptr, size_t new_size, size_t old_size) | ||||
| { | ||||
|  | @ -269,10 +278,9 @@ inline void* aligned_realloc(void *ptr, size_t new_size, size_t old_size) | |||
|   result = handmade_aligned_realloc(ptr,new_size,old_size); | ||||
| #endif | ||||
| 
 | ||||
| #ifdef EIGEN_EXCEPTIONS | ||||
|   if (result==0 && new_size!=0) | ||||
|     throw std::bad_alloc(); | ||||
| #endif | ||||
|   if (!result && new_size) | ||||
|     throw_std_bad_alloc(); | ||||
| 
 | ||||
|   return result; | ||||
| } | ||||
| 
 | ||||
|  | @ -281,7 +289,7 @@ inline void* aligned_realloc(void *ptr, size_t new_size, size_t old_size) | |||
| *****************************************************************************/ | ||||
| 
 | ||||
| /** \internal Allocates \a size bytes. If Align is true, then the returned ptr is 16-byte-aligned.
 | ||||
|   * On allocation error, the returned pointer is null, and if exceptions are enabled then a std::bad_alloc is thrown. | ||||
|   * On allocation error, the returned pointer is null, and a std::bad_alloc is thrown. | ||||
|   */ | ||||
| template<bool Align> inline void* conditional_aligned_malloc(size_t size) | ||||
| { | ||||
|  | @ -293,9 +301,8 @@ template<> inline void* conditional_aligned_malloc<false>(size_t size) | |||
|   check_that_malloc_is_allowed(); | ||||
| 
 | ||||
|   void *result = std::malloc(size); | ||||
|   #ifdef EIGEN_EXCEPTIONS | ||||
|     if(!result) throw std::bad_alloc(); | ||||
|   #endif | ||||
|   if(!result && size) | ||||
|     throw_std_bad_alloc(); | ||||
|   return result; | ||||
| } | ||||
| 
 | ||||
|  | @ -347,18 +354,27 @@ template<typename T> inline void destruct_elements_of_array(T *ptr, size_t size) | |||
| *** Implementation of aligned new/delete-like functions                    *** | ||||
| *****************************************************************************/ | ||||
| 
 | ||||
| template<typename T> | ||||
| EIGEN_ALWAYS_INLINE void check_size_for_overflow(size_t size) | ||||
| { | ||||
|   if(size > size_t(-1) / sizeof(T)) | ||||
|     throw_std_bad_alloc(); | ||||
| } | ||||
| 
 | ||||
| /** \internal Allocates \a size objects of type T. The returned pointer is guaranteed to have 16 bytes alignment.
 | ||||
|   * On allocation error, the returned pointer is undefined, but if exceptions are enabled then a std::bad_alloc is thrown. | ||||
|   * On allocation error, the returned pointer is undefined, but a std::bad_alloc is thrown. | ||||
|   * The default constructor of T is called. | ||||
|   */ | ||||
| template<typename T> inline T* aligned_new(size_t size) | ||||
| { | ||||
|   check_size_for_overflow<T>(size); | ||||
|   T *result = reinterpret_cast<T*>(aligned_malloc(sizeof(T)*size)); | ||||
|   return construct_elements_of_array(result, size); | ||||
| } | ||||
| 
 | ||||
| template<typename T, bool Align> inline T* conditional_aligned_new(size_t size) | ||||
| { | ||||
|   check_size_for_overflow<T>(size); | ||||
|   T *result = reinterpret_cast<T*>(conditional_aligned_malloc<Align>(sizeof(T)*size)); | ||||
|   return construct_elements_of_array(result, size); | ||||
| } | ||||
|  | @ -383,6 +399,8 @@ template<typename T, bool Align> inline void conditional_aligned_delete(T *ptr, | |||
| 
 | ||||
| template<typename T, bool Align> inline T* conditional_aligned_realloc_new(T* pts, size_t new_size, size_t old_size) | ||||
| { | ||||
|   check_size_for_overflow<T>(new_size); | ||||
|   check_size_for_overflow<T>(old_size); | ||||
|   if(new_size < old_size) | ||||
|     destruct_elements_of_array(pts+new_size, old_size-new_size); | ||||
|   T *result = reinterpret_cast<T*>(conditional_aligned_realloc<Align>(reinterpret_cast<void*>(pts), sizeof(T)*new_size, sizeof(T)*old_size)); | ||||
|  | @ -394,6 +412,7 @@ template<typename T, bool Align> inline T* conditional_aligned_realloc_new(T* pt | |||
| 
 | ||||
| template<typename T, bool Align> inline T* conditional_aligned_new_auto(size_t size) | ||||
| { | ||||
|   check_size_for_overflow<T>(size); | ||||
|   T *result = reinterpret_cast<T*>(conditional_aligned_malloc<Align>(sizeof(T)*size)); | ||||
|   if(NumTraits<T>::RequireInitialization) | ||||
|     construct_elements_of_array(result, size); | ||||
|  | @ -402,6 +421,8 @@ template<typename T, bool Align> inline T* conditional_aligned_new_auto(size_t s | |||
| 
 | ||||
| template<typename T, bool Align> inline T* conditional_aligned_realloc_new_auto(T* pts, size_t new_size, size_t old_size) | ||||
| { | ||||
|   check_size_for_overflow<T>(new_size); | ||||
|   check_size_for_overflow<T>(old_size); | ||||
|   if(NumTraits<T>::RequireInitialization && (new_size < old_size)) | ||||
|     destruct_elements_of_array(pts+new_size, old_size-new_size); | ||||
|   T *result = reinterpret_cast<T*>(conditional_aligned_realloc<Align>(reinterpret_cast<void*>(pts), sizeof(T)*new_size, sizeof(T)*old_size)); | ||||
|  | @ -536,6 +557,7 @@ template<typename T> class aligned_stack_memory_handler | |||
|   #endif | ||||
| 
 | ||||
|   #define ei_declare_aligned_stack_constructed_variable(TYPE,NAME,SIZE,BUFFER) \ | ||||
|     Eigen::internal::check_size_for_overflow<TYPE>(SIZE); \ | ||||
|     TYPE* NAME = (BUFFER)!=0 ? (BUFFER) \ | ||||
|                : reinterpret_cast<TYPE*>( \ | ||||
|                       (sizeof(TYPE)*SIZE<=EIGEN_STACK_ALLOCATION_LIMIT) ? EIGEN_ALIGNED_ALLOCA(sizeof(TYPE)*SIZE) \ | ||||
|  | @ -545,6 +567,7 @@ template<typename T> class aligned_stack_memory_handler | |||
| #else | ||||
| 
 | ||||
|   #define ei_declare_aligned_stack_constructed_variable(TYPE,NAME,SIZE,BUFFER) \ | ||||
|     Eigen::internal::check_size_for_overflow<TYPE>(SIZE); \ | ||||
|     TYPE* NAME = (BUFFER)!=0 ? BUFFER : reinterpret_cast<TYPE*>(Eigen::internal::aligned_malloc(sizeof(TYPE)*SIZE));    \ | ||||
|     Eigen::internal::aligned_stack_memory_handler<TYPE> EIGEN_CAT(NAME,_stack_memory_destructor)((BUFFER)==0 ? NAME : 0,SIZE,true) | ||||
|      | ||||
|  | @ -669,6 +692,7 @@ public: | |||
|     pointer allocate( size_type num, const void* hint = 0 ) | ||||
|     { | ||||
|         EIGEN_UNUSED_VARIABLE(hint); | ||||
|         internal::check_size_for_overflow<T>(num); | ||||
|         return static_cast<pointer>( internal::aligned_malloc( num * sizeof(T) ) ); | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -125,10 +125,9 @@ class compute_matrix_flags | |||
|       aligned_bit = | ||||
|       ( | ||||
|             ((Options&DontAlign)==0) | ||||
|         &&  packet_traits<Scalar>::Vectorizable | ||||
|         && ( | ||||
| #if EIGEN_ALIGN_STATICALLY | ||||
|              ((!is_dynamic_size_storage) && (((MaxCols*MaxRows) % packet_traits<Scalar>::size) == 0)) | ||||
|              ((!is_dynamic_size_storage) && (((MaxCols*MaxRows*sizeof(Scalar)) % 16) == 0)) | ||||
| #else | ||||
|              0 | ||||
| #endif | ||||
|  |  | |||
|  | @ -220,6 +220,7 @@ template<typename _MatrixType> class SelfAdjointEigenSolver | |||
|     const MatrixType& eigenvectors() const | ||||
|     { | ||||
|       eigen_assert(m_isInitialized && "SelfAdjointEigenSolver is not initialized."); | ||||
|       eigen_assert(info() == Success && "Eigenvalue computation did not converge."); | ||||
|       eigen_assert(m_eigenvectorsOk && "The eigenvectors have not been computed together with the eigenvalues."); | ||||
|       return m_eivec; | ||||
|     } | ||||
|  | @ -242,6 +243,7 @@ template<typename _MatrixType> class SelfAdjointEigenSolver | |||
|     const RealVectorType& eigenvalues() const | ||||
|     { | ||||
|       eigen_assert(m_isInitialized && "SelfAdjointEigenSolver is not initialized."); | ||||
|       eigen_assert(info() == Success && "Eigenvalue computation did not converge."); | ||||
|       return m_eivalues; | ||||
|     } | ||||
| 
 | ||||
|  | @ -266,6 +268,7 @@ template<typename _MatrixType> class SelfAdjointEigenSolver | |||
|     MatrixType operatorSqrt() const | ||||
|     { | ||||
|       eigen_assert(m_isInitialized && "SelfAdjointEigenSolver is not initialized."); | ||||
|       eigen_assert(info() == Success && "Eigenvalue computation did not converge."); | ||||
|       eigen_assert(m_eigenvectorsOk && "The eigenvectors have not been computed together with the eigenvalues."); | ||||
|       return m_eivec * m_eivalues.cwiseSqrt().asDiagonal() * m_eivec.adjoint(); | ||||
|     } | ||||
|  | @ -291,6 +294,7 @@ template<typename _MatrixType> class SelfAdjointEigenSolver | |||
|     MatrixType operatorInverseSqrt() const | ||||
|     { | ||||
|       eigen_assert(m_isInitialized && "SelfAdjointEigenSolver is not initialized."); | ||||
|       eigen_assert(info() == Success && "Eigenvalue computation did not converge."); | ||||
|       eigen_assert(m_eigenvectorsOk && "The eigenvectors have not been computed together with the eigenvalues."); | ||||
|       return m_eivec * m_eivalues.cwiseInverse().cwiseSqrt().asDiagonal() * m_eivec.adjoint(); | ||||
|     } | ||||
|  | @ -307,7 +311,8 @@ template<typename _MatrixType> class SelfAdjointEigenSolver | |||
| 
 | ||||
|     /** \brief Maximum number of iterations.
 | ||||
|       * | ||||
|       * Maximum number of iterations allowed for an eigenvalue to converge. | ||||
|       * The algorithm terminates if it does not converge within m_maxIterations * n iterations, where n | ||||
|       * denotes the size of the matrix. This value is currently set to 30 (copied from LAPACK). | ||||
|       */ | ||||
|     static const int m_maxIterations = 30; | ||||
| 
 | ||||
|  | @ -407,7 +412,7 @@ SelfAdjointEigenSolver<MatrixType>& SelfAdjointEigenSolver<MatrixType> | |||
|    | ||||
|   Index end = n-1; | ||||
|   Index start = 0; | ||||
|   Index iter = 0; // number of iterations we are working on one element
 | ||||
|   Index iter = 0; // total number of iterations
 | ||||
| 
 | ||||
|   while (end>0) | ||||
|   { | ||||
|  | @ -418,15 +423,14 @@ SelfAdjointEigenSolver<MatrixType>& SelfAdjointEigenSolver<MatrixType> | |||
|     // find the largest unreduced block
 | ||||
|     while (end>0 && m_subdiag[end-1]==0) | ||||
|     { | ||||
|       iter = 0; | ||||
|       end--; | ||||
|     } | ||||
|     if (end<=0) | ||||
|       break; | ||||
| 
 | ||||
|     // if we spent too many iterations on the current element, we give up
 | ||||
|     // if we spent too many iterations, we give up
 | ||||
|     iter++; | ||||
|     if(iter > m_maxIterations) break; | ||||
|     if(iter > m_maxIterations * n) break; | ||||
| 
 | ||||
|     start = end - 1; | ||||
|     while (start>0 && m_subdiag[start-1]!=0) | ||||
|  | @ -435,7 +439,7 @@ SelfAdjointEigenSolver<MatrixType>& SelfAdjointEigenSolver<MatrixType> | |||
|     internal::tridiagonal_qr_step<MatrixType::Flags&RowMajorBit ? RowMajor : ColMajor>(diag.data(), m_subdiag.data(), start, end, computeEigenvectors ? m_eivec.data() : (Scalar*)0, n); | ||||
|   } | ||||
| 
 | ||||
|   if (iter <= m_maxIterations) | ||||
|   if (iter <= m_maxIterations * n) | ||||
|     m_info = Success; | ||||
|   else | ||||
|     m_info = NoConvergence; | ||||
|  |  | |||
|  | @ -182,10 +182,9 @@ public: | |||
|   template<typename NewScalarType> | ||||
|   inline typename internal::cast_return_type<Derived,Quaternion<NewScalarType> >::type cast() const | ||||
|   { | ||||
|     return typename internal::cast_return_type<Derived,Quaternion<NewScalarType> >::type( | ||||
|       coeffs().template cast<NewScalarType>()); | ||||
|     return typename internal::cast_return_type<Derived,Quaternion<NewScalarType> >::type(derived()); | ||||
|   } | ||||
|    | ||||
| 
 | ||||
| #ifdef EIGEN_QUATERNIONBASE_PLUGIN | ||||
| # include EIGEN_QUATERNIONBASE_PLUGIN | ||||
| #endif | ||||
|  | @ -225,22 +224,25 @@ struct traits<Quaternion<_Scalar,_Options> > | |||
|   typedef _Scalar Scalar; | ||||
|   typedef Matrix<_Scalar,4,1,_Options> Coefficients; | ||||
|   enum{ | ||||
|     IsAligned = bool(EIGEN_ALIGN) && ((int(_Options)&Aligned)==Aligned), | ||||
|     IsAligned = internal::traits<Coefficients>::Flags & AlignedBit, | ||||
|     Flags = IsAligned ? (AlignedBit | LvalueBit) : LvalueBit | ||||
|   }; | ||||
| }; | ||||
| } | ||||
| 
 | ||||
| template<typename _Scalar, int _Options> | ||||
| class Quaternion : public QuaternionBase<Quaternion<_Scalar,_Options> >{ | ||||
| class Quaternion : public QuaternionBase<Quaternion<_Scalar,_Options> > | ||||
| { | ||||
|   typedef QuaternionBase<Quaternion<_Scalar,_Options> > Base; | ||||
|   enum { IsAligned = internal::traits<Quaternion>::IsAligned }; | ||||
| 
 | ||||
| public: | ||||
|   typedef _Scalar Scalar; | ||||
| 
 | ||||
|   EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Quaternion) | ||||
|   using Base::operator*=; | ||||
| 
 | ||||
|   typedef typename internal::traits<Quaternion<Scalar,_Options> >::Coefficients Coefficients; | ||||
|   typedef typename internal::traits<Quaternion>::Coefficients Coefficients; | ||||
|   typedef typename Base::AngleAxisType AngleAxisType; | ||||
| 
 | ||||
|   /** Default constructor leaving the quaternion uninitialized. */ | ||||
|  | @ -271,9 +273,16 @@ public: | |||
|   template<typename Derived> | ||||
|   explicit inline Quaternion(const MatrixBase<Derived>& other) { *this = other; } | ||||
| 
 | ||||
|   /** Explicit copy constructor with scalar conversion */ | ||||
|   template<typename OtherScalar, int OtherOptions> | ||||
|   explicit inline Quaternion(const Quaternion<OtherScalar, OtherOptions>& other) | ||||
|   { m_coeffs = other.coeffs().template cast<Scalar>(); } | ||||
| 
 | ||||
|   inline Coefficients& coeffs() { return m_coeffs;} | ||||
|   inline const Coefficients& coeffs() const { return m_coeffs;} | ||||
| 
 | ||||
|   EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(IsAligned) | ||||
| 
 | ||||
| protected: | ||||
|   Coefficients m_coeffs; | ||||
|    | ||||
|  |  | |||
|  | @ -443,7 +443,6 @@ FullPivLU<MatrixType>& FullPivLU<MatrixType>::compute(const MatrixType& matrix) | |||
| 
 | ||||
|   m_nonzero_pivots = size; // the generic case is that in which all pivots are nonzero (invertible case)
 | ||||
|   m_maxpivot = RealScalar(0); | ||||
|   RealScalar cutoff(0); | ||||
| 
 | ||||
|   for(Index k = 0; k < size; ++k) | ||||
|   { | ||||
|  | @ -458,14 +457,7 @@ FullPivLU<MatrixType>& FullPivLU<MatrixType>::compute(const MatrixType& matrix) | |||
|     row_of_biggest_in_corner += k; // correct the values! since they were computed in the corner,
 | ||||
|     col_of_biggest_in_corner += k; // need to add k to them.
 | ||||
| 
 | ||||
|     // when k==0, biggest_in_corner is the biggest coeff absolute value in the original matrix
 | ||||
|     if(k == 0) cutoff = biggest_in_corner * NumTraits<Scalar>::epsilon(); | ||||
| 
 | ||||
|     // if the pivot (hence the corner) is "zero", terminate to avoid generating nan/inf values.
 | ||||
|     // Notice that using an exact comparison (biggest_in_corner==0) here, as Golub-van Loan do in
 | ||||
|     // their pseudo-code, results in numerical instability! The cutoff here has been validated
 | ||||
|     // by running the unit test 'lu' with many repetitions.
 | ||||
|     if(biggest_in_corner < cutoff) | ||||
|     if(biggest_in_corner==RealScalar(0)) | ||||
|     { | ||||
|       // before exiting, make sure to initialize the still uninitialized transpositions
 | ||||
|       // in a sane state without destroying what we already have.
 | ||||
|  |  | |||
|  | @ -39,7 +39,7 @@ | |||
| #endif | ||||
| 
 | ||||
| #if (defined __GNUC__) | ||||
| #define BTL_ASM_COMMENT(X)  asm("#"X) | ||||
| #define BTL_ASM_COMMENT(X)  asm("#" X) | ||||
| #else | ||||
| #define BTL_ASM_COMMENT(X) | ||||
| #endif | ||||
|  |  | |||
|  | @ -64,9 +64,14 @@ add_custom_target( | |||
| 
 | ||||
| add_dependencies(doc-eigen-prerequisites all_snippets all_examples) | ||||
| add_dependencies(doc-unsupported-prerequisites unsupported_snippets unsupported_examples) | ||||
| 
 | ||||
| add_custom_target(doc ALL | ||||
|   COMMAND doxygen Doxyfile-unsupported | ||||
|   COMMAND doxygen | ||||
|   COMMAND doxygen Doxyfile-unsupported # run doxygen twice to get proper eigen <=> unsupported cross references | ||||
|   COMMAND ${CMAKE_COMMAND} -E rename html eigen-doc | ||||
|   COMMAND ${CMAKE_COMMAND} -E tar cvfz eigen-doc/eigen-doc.tgz eigen-doc/*.html eigen-doc/*.map eigen-doc/*.png eigen-doc/*.css eigen-doc/*.js eigen-doc/*.txt eigen-doc/unsupported | ||||
|   COMMAND ${CMAKE_COMMAND} -E rename eigen-doc html | ||||
|   WORKING_DIRECTORY ${Eigen_BINARY_DIR}/doc) | ||||
| 
 | ||||
| add_dependencies(doc doc-eigen-prerequisites doc-unsupported-prerequisites) | ||||
|  |  | |||
|  | @ -8,7 +8,7 @@ o /** \mainpage Eigen | |||
|   | \ref QuickRefPage         "Short reference" | ||||
| </div> | ||||
| 
 | ||||
| This is the API documentation for Eigen3. | ||||
| This is the API documentation for Eigen3. You can <a href="eigen-doc.tgz">download</a> it as a tgz archive for offline reading. | ||||
| 
 | ||||
| Eigen2 users: here is a \ref Eigen2ToEigen3 guide to help porting your application. | ||||
| 
 | ||||
|  |  | |||
|  | @ -10,8 +10,9 @@ int main() | |||
|    A << 1, 2, 2, 3; | ||||
|    cout << "Here is the matrix A:\n" << A << endl; | ||||
|    SelfAdjointEigenSolver<Matrix2f> eigensolver(A); | ||||
|    if (eigensolver.info() != Success) abort(); | ||||
|    cout << "The eigenvalues of A are:\n" << eigensolver.eigenvalues() << endl; | ||||
|    cout << "Here's a matrix whose columns are eigenvectors of A " | ||||
|    cout << "Here's a matrix whose columns are eigenvectors of A \n" | ||||
|         << "corresponding to these eigenvalues:\n" | ||||
|         << eigensolver.eigenvectors() << endl; | ||||
| } | ||||
|  |  | |||
|  | @ -121,7 +121,7 @@ ei_add_test(nullary) | |||
| ei_add_test(nesting_ops "${CMAKE_CXX_FLAGS_DEBUG}") | ||||
| ei_add_test(zerosized) | ||||
| ei_add_test(dontalign) | ||||
| 
 | ||||
| ei_add_test(sizeoverflow) | ||||
| ei_add_test(prec_inverse_4x4) | ||||
| 
 | ||||
| string(TOLOWER "${CMAKE_CXX_COMPILER}" cmake_cxx_compiler_tolower) | ||||
|  |  | |||
|  | @ -120,6 +120,10 @@ template<typename Scalar, int Options> void quaternion(void) | |||
|   VERIFY_IS_APPROX(q1f.template cast<Scalar>(),q1); | ||||
|   Quaternion<double> q1d = q1.template cast<double>(); | ||||
|   VERIFY_IS_APPROX(q1d.template cast<Scalar>(),q1); | ||||
| 
 | ||||
|   // test bug 369 - improper alignment.
 | ||||
|   Quaternionx *q = new Quaternionx; | ||||
|   delete q; | ||||
| } | ||||
| 
 | ||||
| template<typename Scalar> void mapQuaternion(void){ | ||||
|  | @ -191,7 +195,6 @@ template<typename PlainObjectType> void check_const_correctness(const PlainObjec | |||
|   VERIFY( !(Map<ConstPlainObjectType, Aligned>::Flags & LvalueBit) ); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void test_geo_quaternion() | ||||
| { | ||||
|   for(int i = 0; i < g_repeat; i++) { | ||||
|  |  | |||
|  | @ -118,7 +118,7 @@ namespace Eigen | |||
|       }                                     \ | ||||
|       else if (Eigen::internal::push_assert)       \ | ||||
|       {                                     \ | ||||
|         eigen_assert_list.push_back(std::string(EI_PP_MAKE_STRING(__FILE__)" ("EI_PP_MAKE_STRING(__LINE__)") : "#a) ); \ | ||||
|         eigen_assert_list.push_back(std::string(EI_PP_MAKE_STRING(__FILE__) " (" EI_PP_MAKE_STRING(__LINE__) ") : " #a) ); \ | ||||
|       } | ||||
| 
 | ||||
|     #define VERIFY_RAISES_ASSERT(a)                                                   \ | ||||
|  |  | |||
|  | @ -0,0 +1,81 @@ | |||
| // This file is part of Eigen, a lightweight C++ template library
 | ||||
| // for linear algebra.
 | ||||
| //
 | ||||
| // Copyright (C) 2011 Benoit Jacob <jacob.benoit.1@gmail.com>
 | ||||
| //
 | ||||
| // Eigen is free software; you can redistribute it and/or
 | ||||
| // modify it under the terms of the GNU Lesser General Public
 | ||||
| // License as published by the Free Software Foundation; either
 | ||||
| // version 3 of the License, or (at your option) any later version.
 | ||||
| //
 | ||||
| // Alternatively, you can redistribute it and/or
 | ||||
| // modify it under the terms of the GNU General Public License as
 | ||||
| // published by the Free Software Foundation; either version 2 of
 | ||||
| // the License, or (at your option) any later version.
 | ||||
| //
 | ||||
| // Eigen is distributed in the hope that it will be useful, but WITHOUT ANY
 | ||||
| // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 | ||||
| // FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the
 | ||||
| // GNU General Public License for more details.
 | ||||
| //
 | ||||
| // You should have received a copy of the GNU Lesser General Public
 | ||||
| // License and a copy of the GNU General Public License along with
 | ||||
| // Eigen. If not, see <http://www.gnu.org/licenses/>.
 | ||||
| 
 | ||||
| #include "main.h" | ||||
| 
 | ||||
| #define VERIFY_THROWS_BADALLOC(a) {                           \ | ||||
|     bool threw = false;                                       \ | ||||
|     try {                                                     \ | ||||
|       a;                                                      \ | ||||
|     }                                                         \ | ||||
|     catch (std::bad_alloc&) { threw = true; }                 \ | ||||
|     VERIFY(threw && "should have thrown bad_alloc: " #a);     \ | ||||
|   } | ||||
| 
 | ||||
| typedef DenseIndex Index; | ||||
| 
 | ||||
| template<typename MatrixType> | ||||
| void triggerMatrixBadAlloc(Index rows, Index cols) | ||||
| { | ||||
|   VERIFY_THROWS_BADALLOC( MatrixType m(rows, cols) ); | ||||
|   VERIFY_THROWS_BADALLOC( MatrixType m; m.resize(rows, cols) ); | ||||
|   VERIFY_THROWS_BADALLOC( MatrixType m; m.conservativeResize(rows, cols) ); | ||||
| } | ||||
| 
 | ||||
| template<typename VectorType> | ||||
| void triggerVectorBadAlloc(Index size) | ||||
| { | ||||
|   VERIFY_THROWS_BADALLOC( VectorType v(size) ); | ||||
|   VERIFY_THROWS_BADALLOC( VectorType v; v.resize(size) ); | ||||
|   VERIFY_THROWS_BADALLOC( VectorType v; v.conservativeResize(size) ); | ||||
| } | ||||
| 
 | ||||
| void test_sizeoverflow() | ||||
| { | ||||
|   // there are 2 levels of overflow checking. first in PlainObjectBase.h we check for overflow in rows*cols computations.
 | ||||
|   // this is tested in tests of the form times_itself_gives_0 * times_itself_gives_0
 | ||||
|   // Then in Memory.h we check for overflow in size * sizeof(T) computations.
 | ||||
|   // this is tested in tests of the form times_4_gives_0 * sizeof(float)
 | ||||
|    | ||||
|   size_t times_itself_gives_0 = size_t(1) << (8 * sizeof(Index) / 2); | ||||
|   VERIFY(times_itself_gives_0 * times_itself_gives_0 == 0); | ||||
| 
 | ||||
|   size_t times_4_gives_0 = size_t(1) << (8 * sizeof(Index) - 2); | ||||
|   VERIFY(times_4_gives_0 * 4 == 0); | ||||
| 
 | ||||
|   size_t times_8_gives_0 = size_t(1) << (8 * sizeof(Index) - 3); | ||||
|   VERIFY(times_8_gives_0 * 8 == 0); | ||||
| 
 | ||||
|   triggerMatrixBadAlloc<MatrixXf>(times_itself_gives_0, times_itself_gives_0); | ||||
|   triggerMatrixBadAlloc<MatrixXf>(times_itself_gives_0 / 4, times_itself_gives_0); | ||||
|   triggerMatrixBadAlloc<MatrixXf>(times_4_gives_0, 1); | ||||
| 
 | ||||
|   triggerMatrixBadAlloc<MatrixXd>(times_itself_gives_0, times_itself_gives_0); | ||||
|   triggerMatrixBadAlloc<MatrixXd>(times_itself_gives_0 / 8, times_itself_gives_0); | ||||
|   triggerMatrixBadAlloc<MatrixXd>(times_8_gives_0, 1); | ||||
|    | ||||
|   triggerVectorBadAlloc<VectorXf>(times_4_gives_0); | ||||
|    | ||||
|   triggerVectorBadAlloc<VectorXd>(times_8_gives_0); | ||||
| } | ||||
|  | @ -35,7 +35,8 @@ | |||
| 
 | ||||
| namespace Eigen { | ||||
| 
 | ||||
|   /** \defgroup MPRealSupport_Module MPFRC++ Support module | ||||
|   /** \ingroup Unsupported_modules | ||||
|     * \defgroup MPRealSupport_Module MPFRC++ Support module | ||||
|     * | ||||
|     * \code | ||||
|     * #include <Eigen/MPRealSupport> | ||||
|  |  | |||
|  | @ -1,13 +1,22 @@ | |||
| namespace Eigen { | ||||
| 
 | ||||
| o /** \mainpage Eigen's unsupported modules | ||||
| /** \mainpage Eigen's unsupported modules | ||||
| 
 | ||||
| This is the API documentation for Eigen's unsupported modules. | ||||
| 
 | ||||
| These modules are contributions from various users. They are provided "as is", without any support. | ||||
| 
 | ||||
| Click on the \e Modules tab at the top of this page to get a list of all unsupported modules. | ||||
| 
 | ||||
| Don't miss the <a href="..//index.html">official Eigen documentation</a>. | ||||
| 
 | ||||
| 
 | ||||
| \defgroup Unsupported_modules Unsupported modules | ||||
| 
 | ||||
| The unsupported modules are contributions from various users. They are | ||||
| provided "as is", without any support. Nevertheless, some of them are | ||||
| subject to be included in Eigen in the future. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -0,0 +1,59 @@ | |||
| # Build full gtsam library as a single library | ||||
| # and also build tests  | ||||
| set (gtsam_subdirs  | ||||
|     base  | ||||
|     geometry  | ||||
|     inference  | ||||
|     linear  | ||||
|     nonlinear  | ||||
|     slam) | ||||
|   | ||||
| set (ccolamd_srcs  | ||||
|  3rdparty/CCOLAMD/Source/ccolamd.c  | ||||
|  3rdparty/CCOLAMD/Source/ccolamd_global.c | ||||
|  3rdparty/UFconfig/UFconfig.c)  | ||||
| 
 | ||||
| # install headers from 3rdparty libraries | ||||
| add_subdirectory(3rdparty) | ||||
| 
 | ||||
| # Accumulate gtsam_srcs | ||||
| set(gtsam_srcs ${ccolamd_srcs}) | ||||
| 
 | ||||
| # Get all sources and headers from each  | ||||
| foreach(subdir ${gtsam_subdirs}) | ||||
|     message(STATUS "Building ${subdir}") | ||||
|     file(GLOB sub_gtsam_srcs "${subdir}/*.cpp") | ||||
|     list(APPEND gtsam_srcs ${sub_gtsam_srcs}) | ||||
|      | ||||
|     # install headers | ||||
|     file(GLOB sub_gtsam_headers "${subdir}/*.h") | ||||
|     install(FILES ${sub_gtsam_headers} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/gtsam/${subdir}) | ||||
|      | ||||
|     # Build tests | ||||
|     file(GLOB tests_srcs "${subdir}/tests/test*.cpp") | ||||
|     foreach(test_src ${tests_srcs}) | ||||
|         get_filename_component(test_base ${test_src} NAME_WE) | ||||
|         set( test_bin ${subdir}_${test_base} ) | ||||
|         add_executable(${test_bin} EXCLUDE_FROM_ALL ${test_src}) | ||||
|         add_dependencies(check ${test_bin}) | ||||
|         add_test(${subdir}/${test_base} ${EXECUTABLE_OUTPUT_PATH}${test_bin}) | ||||
|         target_link_libraries(${test_bin} CppUnitLite gtsam) | ||||
|         add_custom_target(${test_bin}.run ${EXECUTABLE_OUTPUT_PATH}${test_bin} ${ARGN}) | ||||
|     endforeach(test_src) | ||||
|      | ||||
|     # Build timing scripts | ||||
|     file(GLOB time_srcs "${subdir}/tests/time*.cpp")  | ||||
|     foreach(time_src ${time_srcs}) | ||||
|         get_filename_component(time_base ${time_src} NAME_WE) | ||||
|         set( time_bin ${time_base} ) | ||||
|         add_executable(${time_bin} EXCLUDE_FROM_ALL ${time_src}) | ||||
|         add_dependencies(check ${time_bin}) | ||||
|         target_link_libraries(${time_bin} CppUnitLite gtsam) | ||||
|         add_custom_target(${time_base}.run ${EXECUTABLE_OUTPUT_PATH}${time_bin} ${ARGN}) | ||||
|     endforeach(time_src) | ||||
| endforeach(subdir) | ||||
| 
 | ||||
| # build a single shared library | ||||
| add_library(gtsam SHARED ${gtsam_srcs}) | ||||
| install(TARGETS gtsam LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) | ||||
| 
 | ||||
|  | @ -61,6 +61,8 @@ Point2 CalibratedCamera::project(const Point3& point, | |||
| 	const Rot3& R = pose.rotation(); | ||||
| 	const Point3& r1 = R.r1(), r2 = R.r2(), r3 = R.r3(); | ||||
| 	Point3 q = pose.transform_to(point); | ||||
| 	if(q.z() <= 0) | ||||
| 	  throw CheiralityException(); | ||||
| 
 | ||||
| 	if (D_intrinsic_pose || D_intrinsic_point) { | ||||
| 		double X = q.x(), Y = q.y(), Z = q.z(); | ||||
|  |  | |||
|  | @ -23,6 +23,11 @@ | |||
| 
 | ||||
| namespace gtsam { | ||||
| 
 | ||||
|   class CheiralityException: public std::runtime_error { | ||||
|   public: | ||||
|     CheiralityException() : std::runtime_error("Cheirality Exception") {} | ||||
|   }; | ||||
| 
 | ||||
| 	/**
 | ||||
| 	 * A Calibrated camera class [R|-R't], calibration K=I. | ||||
| 	 * If calibration is known, it is more computationally efficient | ||||
|  |  | |||
|  | @ -82,9 +82,18 @@ namespace gtsam { | |||
| 		/// Evaluate error h(x)-z and optionally derivatives
 | ||||
| 		Vector evaluateError(const Pose3& pose, const Point3& point, | ||||
| 				boost::optional<Matrix&> H1, boost::optional<Matrix&> H2) const { | ||||
| 			SimpleCamera camera(*K_, pose); | ||||
| 			Point2 reprojectionError(camera.project(point, H1, H2) - z_); | ||||
| 			return reprojectionError.vector(); | ||||
| 			try { | ||||
| 	      SimpleCamera camera(*K_, pose); | ||||
| 			  Point2 reprojectionError(camera.project(point, H1, H2) - z_); | ||||
| 	      return reprojectionError.vector(); | ||||
| 			} | ||||
| 			catch( CheiralityException& e) { | ||||
| 			  if (H1) *H1 = zeros(2,6); | ||||
| 			  if (H2) *H2 = zeros(2,3); | ||||
| 			  cout << e.what() << ": Landmark "<< this->key2_.index() << | ||||
| 			      " moved behind camera " << this->key1_.index() << endl; | ||||
| 			  return zero(2); | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
|     /** return the measurement */ | ||||
|  |  | |||
|  | @ -0,0 +1,29 @@ | |||
| include_directories( | ||||
|   3rdparty/UFconfig  | ||||
|   3rdparty/CCOLAMD/Include | ||||
|   ${CMAKE_SOURCE_DIR}) | ||||
| 
 | ||||
| find_package(Boost COMPONENTS serialization REQUIRED) | ||||
| 
 | ||||
| # Build tests | ||||
| file(GLOB tests_srcs "test*.cpp") | ||||
| foreach(test_src ${tests_srcs}) | ||||
|     get_filename_component(test_base ${test_src} NAME_WE) | ||||
|     set( test_bin ${test_base} ) | ||||
|     add_executable(${test_bin} EXCLUDE_FROM_ALL ${test_src}) | ||||
|     add_dependencies(check ${test_bin}) | ||||
|     add_test(${test_bin} ${EXECUTABLE_OUTPUT_PATH}${test_bin}) | ||||
|     target_link_libraries(${test_bin} CppUnitLite gtsam ${Boost_SERIALIZATION_LIBRARY}) | ||||
|     add_custom_target(${test_base}.run ${EXECUTABLE_OUTPUT_PATH}${test_bin} ${ARGN}) | ||||
| endforeach(test_src) | ||||
| 
 | ||||
| # Build timing scripts | ||||
| file(GLOB time_srcs "time*.cpp")  | ||||
| foreach(time_src ${time_srcs}) | ||||
|     get_filename_component(time_base ${time_src} NAME_WE) | ||||
|     set( time_bin ${time_base} ) | ||||
|     add_executable(${time_bin} EXCLUDE_FROM_ALL ${time_src}) | ||||
|     add_dependencies(check ${time_bin}) | ||||
|     target_link_libraries(${time_bin} CppUnitLite gtsam) | ||||
|     add_custom_target(${time_base}.run ${EXECUTABLE_OUTPUT_PATH}${time_bin} ${ARGN}) | ||||
| endforeach(time_src) | ||||
|  | @ -18,6 +18,7 @@ | |||
| #include <fstream> | ||||
| #include <sstream> | ||||
| #include <boost/foreach.hpp> | ||||
| #include <boost/regex.hpp> | ||||
| 
 | ||||
| #include "Argument.h" | ||||
| 
 | ||||
|  | @ -70,8 +71,17 @@ string ArgumentList::types() const { | |||
| /* ************************************************************************* */ | ||||
| string ArgumentList::signature() const { | ||||
|   string str; | ||||
| 
 | ||||
|   BOOST_FOREACH(Argument arg, *this) | ||||
|     str += arg.type[0]; | ||||
|   { | ||||
|     BOOST_FOREACH(char ch, arg.type) | ||||
|         if(isupper(ch)) | ||||
|             str += ch; | ||||
| 
 | ||||
|     if(str.length() == 0) | ||||
|         str += arg.type[0]; | ||||
|   } | ||||
| 
 | ||||
|   return str; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -0,0 +1,25 @@ | |||
| # Build/install Wrap | ||||
| 
 | ||||
| # Build the executable itself | ||||
| file(GLOB wrap_srcs "*.cpp") | ||||
| list(REMOVE_ITEM wrap_srcs wrap.cpp) | ||||
| add_library(wrapLib STATIC ${wrap_srcs}) | ||||
| add_executable(wrap wrap.cpp) | ||||
| target_link_libraries(wrap wrapLib) | ||||
| install(TARGETS wrap DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) | ||||
| 
 | ||||
| # Build tests | ||||
| file(GLOB wrap_test_srcs "tests/test*.cpp") | ||||
| add_definitions(-DTOPSRCDIR="${CMAKE_SOURCE_DIR}") | ||||
| foreach(test_src ${wrap_test_srcs} ) | ||||
|     get_filename_component(test_base ${test_src} NAME_WE) | ||||
|     set( test_bin wrap_${test_base} ) | ||||
|     add_executable(${test_bin} EXCLUDE_FROM_ALL ${test_src}) | ||||
|     add_test(${test_base} ${EXECUTABLE_OUTPUT_PATH}${test_bin}) | ||||
|     add_dependencies(check ${test_bin}) | ||||
|     target_link_libraries(${test_bin} CppUnitLite gtsam wrapLib) | ||||
|     add_custom_target(${test_bin}.run ${EXECUTABLE_OUTPUT_PATH}${test_bin} ${ARGN}) | ||||
| endforeach(test_src) | ||||
| 
 | ||||
| # Install matlab header | ||||
| install(FILES matlab.h DESTINATION ${CMAKE_INSTALL_PREFIX}/include/wrap) | ||||
		Loading…
	
		Reference in New Issue