Added TupleConfig1 wrapper
							parent
							
								
									6aff189008
								
							
						
					
					
						commit
						3fd36bca53
					
				|  | @ -11,6 +11,9 @@ | |||
| #include "TupleConfig.h" | ||||
| 
 | ||||
| // TupleConfig instantiations for N = 1-6
 | ||||
| #define INSTANTIATE_TUPLE_CONFIG1(Config1) \ | ||||
| 		template class TupleConfig1<Config1>; | ||||
| 
 | ||||
| #define INSTANTIATE_TUPLE_CONFIG2(Config1, Config2) \ | ||||
| 		template class TupleConfig2<Config1, Config2>; | ||||
| 
 | ||||
|  | @ -33,6 +36,20 @@ namespace gtsam { | |||
| /** TupleConfigN Implementations */ | ||||
| /* ************************************************************************* */ | ||||
| 
 | ||||
| /* ************************************************************************* */ | ||||
| /** TupleConfig 1 */ | ||||
| template<class Config1> | ||||
| TupleConfig1<Config1>::TupleConfig1(const TupleConfig1<Config1>& config) : | ||||
| 		  TupleConfigEnd<Config1> (config) {} | ||||
| 
 | ||||
| template<class Config1> | ||||
| TupleConfig1<Config1>::TupleConfig1(const Config1& cfg1) : | ||||
| 			  TupleConfigEnd<Config1> (cfg1) {} | ||||
| 
 | ||||
| template<class Config1> | ||||
| TupleConfig1<Config1>::TupleConfig1(const TupleConfigEnd<Config1>& config) : | ||||
| 	TupleConfigEnd<Config1>(config) {} | ||||
| 
 | ||||
| /* ************************************************************************* */ | ||||
| /** TupleConfig 2 */ | ||||
| template<class Config1, class Config2> | ||||
|  |  | |||
|  | @ -302,6 +302,35 @@ namespace gtsam { | |||
|    * | ||||
|    * The interface is designed to mimic PairConfig, but for 2-6 config types. | ||||
|    */ | ||||
| 
 | ||||
|   template<class C1> | ||||
|   class TupleConfig1 : public TupleConfigEnd<C1> { | ||||
|   public: | ||||
|  	  // typedefs
 | ||||
|  	  typedef C1 Config1; | ||||
| 
 | ||||
|  	  typedef TupleConfigEnd<C1> Base; | ||||
|  	  typedef TupleConfig1<C1> This; | ||||
| 
 | ||||
|  	  TupleConfig1() {} | ||||
|  	  TupleConfig1(const This& config); | ||||
|  	  TupleConfig1(const Base& config); | ||||
|  	  TupleConfig1(const Config1& cfg1); | ||||
| 
 | ||||
|  	  // access functions
 | ||||
|  	  inline const Config1& first() const { return this->config(); } | ||||
|   }; | ||||
| 
 | ||||
|   template<class C1> | ||||
|   TupleConfig1<C1> expmap(const TupleConfig1<C1>& c, const VectorConfig& delta) { | ||||
|  	  return c.expmap(delta); | ||||
|   } | ||||
| 
 | ||||
|   template<class C1> | ||||
|   VectorConfig logmap(const TupleConfig1<C1>& c1, const TupleConfig1<C1>& c2) { | ||||
|  	  return c1.logmap(c2); | ||||
|   } | ||||
| 
 | ||||
|   template<class C1, class C2> | ||||
|   class TupleConfig2 : public TupleConfig<C1, TupleConfigEnd<C2> > { | ||||
|   public: | ||||
|  |  | |||
|  | @ -1,8 +1,7 @@ | |||
| /*
 | ||||
|  * testTupleConfig.cpp | ||||
|  * | ||||
|  *  Created on: Jan 13, 2010 | ||||
|  *      Author: richard | ||||
| /**
 | ||||
|  * @file testTupleConfig.cpp | ||||
|  * @author Richard Roberts | ||||
|  * @author Alex Cunningham | ||||
|  */ | ||||
| 
 | ||||
| #include <CppUnitLite/TestHarness.h> | ||||
|  | @ -23,6 +22,8 @@ | |||
| using namespace gtsam; | ||||
| using namespace std; | ||||
| 
 | ||||
| static const double tol = 1e-5; | ||||
| 
 | ||||
| typedef TypedSymbol<Pose2, 'x'> PoseKey; | ||||
| typedef TypedSymbol<Point2, 'l'> PointKey; | ||||
| typedef LieConfig<PoseKey, Pose2> PoseConfig; | ||||
|  | @ -211,6 +212,43 @@ typedef LieConfig<Point3Key2, Point3> Point3Config2; | |||
| typedef TupleConfig<PoseConfig, TupleConfigEnd<PointConfig> > ConfigA; | ||||
| typedef TupleConfig<PoseConfig, TupleConfig<PointConfig, TupleConfigEnd<LamConfig> > > ConfigB; | ||||
| 
 | ||||
| typedef TupleConfig1<PoseConfig> TuplePoseConfig; | ||||
| typedef TupleConfig1<PointConfig> TuplePointConfig; | ||||
| typedef TupleConfig2<PoseConfig, PointConfig> SimpleConfig; | ||||
| 
 | ||||
| /* ************************************************************************* */ | ||||
| TEST(TupleConfig, slicing) { | ||||
| 	PointKey l1(1), l2(2); | ||||
| 	Point2 l1_val(1.0, 2.0), l2_val(3.0, 4.0); | ||||
| 	PoseKey x1(1), x2(2); | ||||
| 	Pose2 x1_val(1.0, 2.0, 0.3), x2_val(3.0, 4.0, 0.4); | ||||
| 
 | ||||
| 	PoseConfig liePoseConfig; | ||||
| 	liePoseConfig.insert(x1, x1_val); | ||||
| 	liePoseConfig.insert(x2, x2_val); | ||||
| 
 | ||||
| 	PointConfig liePointConfig; | ||||
| 	liePointConfig.insert(l1, l1_val); | ||||
| 	liePointConfig.insert(l2, l2_val); | ||||
| 
 | ||||
| 	// construct TupleConfig1 from the base config
 | ||||
| 	TuplePoseConfig tupPoseConfig1(liePoseConfig); | ||||
| 	EXPECT(assert_equal(liePoseConfig, tupPoseConfig1.first(), tol)); | ||||
| 
 | ||||
| 	TuplePointConfig tupPointConfig1(liePointConfig); | ||||
| 	EXPECT(assert_equal(liePointConfig, tupPointConfig1.first(), tol)); | ||||
| 
 | ||||
| //	// construct a TupleConfig2 from a TupleConfig1
 | ||||
| //	SimpleConfig pairConfig1(tupPoseConfig1);
 | ||||
| //	EXPECT(assert_equal(liePoseConfig, pairConfig1.first(), tol));
 | ||||
| //	EXPECT(pairConfig1.second().empty());
 | ||||
| //
 | ||||
| //	SimpleConfig pairConfig2(tupPointConfig1);
 | ||||
| //	EXPECT(assert_equal(liePointConfig, pairConfig2.second(), tol));
 | ||||
| //	EXPECT(pairConfig1.first().empty());
 | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| /* ************************************************************************* */ | ||||
| TEST(TupleConfig, basic_functions) { | ||||
| 	// create some tuple configs
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue