206 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			206 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			C++
		
	
	
| /*
 | |
|  * TupleConfig-inl.h
 | |
|  *
 | |
|  *  Created on: Jan 14, 2010
 | |
|  *      Author: richard
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <iostream>
 | |
| #include "LieConfig-inl.h"
 | |
| #include "TupleConfig.h"
 | |
| 
 | |
| #define INSTANTIATE_PAIR_CONFIG(J1,X1,J2,X2) \
 | |
|   /*INSTANTIATE_LIE_CONFIG(J1,X1);*/ \
 | |
|   /*INSTANTIATE_LIE_CONFIG(J2,X2);*/ \
 | |
|   template class PairConfig<J1,X1,J2,X2>; \
 | |
|   /*template void PairConfig<J1,X1,J2,X2>::print(const std::string&) const;*/ \
 | |
|   template PairConfig<J1,X1,J2,X2> expmap(PairConfig<J1,X1,J2,X2>, const VectorConfig&);
 | |
| 
 | |
| // TupleConfig instantiations for N = 1-6
 | |
| #define INSTANTIATE_TUPLE_CONFIG2(Config1, Config2) \
 | |
| 		template class TupleConfig2<Config1, Config2>;
 | |
| 
 | |
| #define INSTANTIATE_TUPLE_CONFIG3(Config1, Config2, Config3) \
 | |
| 		template class TupleConfig3<Config1, Config2, Config3>;
 | |
| 
 | |
| #define INSTANTIATE_TUPLE_CONFIG4(Config1, Config2, Config3, Config4) \
 | |
| 		template class TupleConfig4<Config1, Config2, Config3, Config4>;
 | |
| 
 | |
| #define INSTANTIATE_TUPLE_CONFIG5(Config1, Config2, Config3, Config4, Config5) \
 | |
| 		template class TupleConfig5<Config1, Config2, Config3, Config4, Config5>;
 | |
| 
 | |
| #define INSTANTIATE_TUPLE_CONFIG6(Config1, Config2, Config3, Config4, Config5, Config6) \
 | |
| 		template class TupleConfig6<Config1, Config2, Config3, Config4, Config5, Config6>;
 | |
| 
 | |
| 
 | |
| namespace gtsam {
 | |
| 
 | |
| /* ************************************************************************* */
 | |
| /** PairConfig implementations */
 | |
| /* ************************************************************************* */
 | |
| template<class J1, class X1, class J2, class X2>
 | |
| void PairConfig<J1,X1,J2,X2>::print(const std::string& s) const {
 | |
| 	std::cout << "TupleConfig " << s << ", size " << size() << "\n";
 | |
| 	first().print(s + "Config1: ");
 | |
| 	second().print(s + "Config2: ");
 | |
| }
 | |
| 
 | |
| /* ************************************************************************* */
 | |
| template<class J1, class X1, class J2, class X2>
 | |
| void PairConfig<J1,X1,J2,X2>::insert(const PairConfig& config) {
 | |
| 	for (typename Config1::const_iterator it = config.first().begin(); it!=config.first().end(); it++) {
 | |
| 		insert(it->first, it->second);
 | |
| 	}
 | |
| 	for (typename Config2::const_iterator it = config.second().begin(); it!=config.second().end(); it++) {
 | |
| 		insert(it->first, it->second);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /* ************************************************************************* */
 | |
| /** TupleConfig Implementations */
 | |
| /* ************************************************************************* */
 | |
| 
 | |
| template<class Config1, class Config2>
 | |
| void TupleConfig<Config1, Config2>::print(const std::string& s) const {
 | |
| 	std::cout << s << " : " << std::endl;
 | |
| 	first_.print();
 | |
| 	second_.print();
 | |
| }
 | |
| 
 | |
| template<class Config1>
 | |
| void TupleConfigEnd<Config1>::print(const std::string& s ) const {
 | |
| 	first_.print();
 | |
| }
 | |
| 
 | |
| /* ************************************************************************* */
 | |
| /** TupleConfigN Implementations */
 | |
| /* ************************************************************************* */
 | |
| 
 | |
| /* ************************************************************************* */
 | |
| /** TupleConfig 2 */
 | |
| template<class Config1, class Config2>
 | |
| TupleConfig2<Config1, Config2>::TupleConfig2(const TupleConfig2<Config1, Config2>& config) :
 | |
| 		  TupleConfig<Config1, TupleConfigEnd<Config2> >(config) {}
 | |
| 
 | |
| template<class Config1, class Config2>
 | |
| TupleConfig2<Config1, Config2>::TupleConfig2(const Config1& cfg1, const Config2& cfg2) :
 | |
| 			  TupleConfig<Config1, TupleConfigEnd<Config2> >(
 | |
| 					  cfg1, TupleConfigEnd<Config2>(cfg2)) {}
 | |
| 
 | |
| template<class Config1, class Config2>
 | |
| TupleConfig2<Config1, Config2>::TupleConfig2(const TupleConfig<Config1, TupleConfigEnd<Config2> >& config) :
 | |
| 	TupleConfig<Config1, TupleConfigEnd<Config2> >(config) {}
 | |
| 
 | |
| /* ************************************************************************* */
 | |
| /** TupleConfig 3 */
 | |
| template<class Config1, class Config2, class Config3>
 | |
| TupleConfig3<Config1, Config2, Config3>::TupleConfig3(
 | |
| 		const TupleConfig3<Config1, Config2, Config3>& config) :
 | |
| 		  TupleConfig<Config1, TupleConfig<Config2, TupleConfigEnd<Config3> > >(config) {}
 | |
| 
 | |
| template<class Config1, class Config2, class Config3>
 | |
| TupleConfig3<Config1, Config2, Config3>::TupleConfig3(
 | |
| 		const Config1& cfg1, const Config2& cfg2, const Config3& cfg3) :
 | |
| 			  TupleConfig<Config1, TupleConfig<Config2, TupleConfigEnd<Config3> > >(
 | |
| 					  cfg1, TupleConfig<Config2, TupleConfigEnd<Config3> >(
 | |
| 							  cfg2, TupleConfigEnd<Config3>(cfg3))) {}
 | |
| 
 | |
| template<class Config1, class Config2, class Config3>
 | |
| TupleConfig3<Config1, Config2, Config3>::TupleConfig3(
 | |
| 		const TupleConfig<Config1, TupleConfig<Config2, TupleConfigEnd<Config3> > >& config) :
 | |
| 		  TupleConfig<Config1, TupleConfig<Config2, TupleConfigEnd<Config3> > >(config) {}
 | |
| 
 | |
| /* ************************************************************************* */
 | |
| /** TupleConfig 4 */
 | |
| template<class Config1, class Config2, class Config3, class Config4>
 | |
| TupleConfig4<Config1, Config2, Config3, Config4>::TupleConfig4(
 | |
| 		const TupleConfig4<Config1, Config2, Config3, Config4>& config) :
 | |
| 	TupleConfig<Config1, TupleConfig<Config2,
 | |
| 		TupleConfig<Config3, TupleConfigEnd<Config4> > > >(config) {}
 | |
| 
 | |
| template<class Config1, class Config2, class Config3, class Config4>
 | |
| TupleConfig4<Config1, Config2, Config3, Config4>::TupleConfig4(
 | |
| 		const Config1& cfg1, const Config2& cfg2,
 | |
| 		const Config3& cfg3,const Config4& cfg4) :
 | |
| 		  TupleConfig<Config1, TupleConfig<Config2,
 | |
| 			  TupleConfig<Config3, TupleConfigEnd<Config4> > > >(
 | |
| 				  cfg1, TupleConfig<Config2, TupleConfig<Config3, TupleConfigEnd<Config4> > >(
 | |
| 						  cfg2, TupleConfig<Config3, TupleConfigEnd<Config4> >(
 | |
| 								  cfg3, TupleConfigEnd<Config4>(cfg4)))) {}
 | |
| 
 | |
| template<class Config1, class Config2, class Config3, class Config4>
 | |
| TupleConfig4<Config1, Config2, Config3, Config4>::TupleConfig4(
 | |
| 		const TupleConfig<Config1, TupleConfig<Config2,
 | |
| 				TupleConfig<Config3, TupleConfigEnd<Config4> > > >& config) :
 | |
| 	TupleConfig<Config1, TupleConfig<Config2,TupleConfig<Config3,
 | |
| 		TupleConfigEnd<Config4> > > >(config) {}
 | |
| 
 | |
| /* ************************************************************************* */
 | |
| /** TupleConfig 5 */
 | |
| template<class Config1, class Config2, class Config3, class Config4, class Config5>
 | |
| TupleConfig5<Config1, Config2, Config3, Config4, Config5>::TupleConfig5(
 | |
| 		const TupleConfig5<Config1, Config2, Config3, Config4, Config5>& config) :
 | |
| 		  TupleConfig<Config1, TupleConfig<Config2, TupleConfig<Config3,
 | |
| 			  TupleConfig<Config4, TupleConfigEnd<Config5> > > > >(config) {}
 | |
| 
 | |
| template<class Config1, class Config2, class Config3, class Config4, class Config5>
 | |
| TupleConfig5<Config1, Config2, Config3, Config4, Config5>::TupleConfig5(
 | |
| 		const Config1& cfg1, const Config2& cfg2, const Config3& cfg3,
 | |
| 				   const Config4& cfg4, const Config5& cfg5) :
 | |
| 						   TupleConfig<Config1, TupleConfig<Config2,
 | |
| 						   TupleConfig<Config3, TupleConfig<Config4,
 | |
| 						   TupleConfigEnd<Config5> > > > >(
 | |
| 								   cfg1, TupleConfig<Config2, TupleConfig<Config3,
 | |
| 										 TupleConfig<Config4, TupleConfigEnd<Config5> > > >(
 | |
| 										   cfg2, TupleConfig<Config3, TupleConfig<Config4, TupleConfigEnd<Config5> > >(
 | |
| 												   cfg3, TupleConfig<Config4, TupleConfigEnd<Config5> >(
 | |
| 														   cfg4, TupleConfigEnd<Config5>(cfg5))))) {}
 | |
| 
 | |
| template<class Config1, class Config2, class Config3, class Config4, class Config5>
 | |
| TupleConfig5<Config1, Config2, Config3, Config4, Config5>::TupleConfig5(
 | |
| 		const TupleConfig<Config1, TupleConfig<Config2, TupleConfig<Config3,
 | |
| 			  TupleConfig<Config4, TupleConfigEnd<Config5> > > > >& config) :
 | |
| 	TupleConfig<Config1, TupleConfig<Config2, TupleConfig<Config3,
 | |
| 	TupleConfig<Config4, TupleConfigEnd<Config5> > > > >(config) {}
 | |
| 
 | |
| /* ************************************************************************* */
 | |
| /** TupleConfig 6 */
 | |
| template<class Config1, class Config2, class Config3,
 | |
| 		 class Config4, class Config5, class Config6>
 | |
| TupleConfig6<Config1, Config2, Config3, Config4, Config5, Config6>::TupleConfig6(
 | |
| 		const TupleConfig6<Config1, Config2, Config3,
 | |
| 						   Config4, Config5, Config6>& config) :
 | |
| 			  TupleConfig<Config1, TupleConfig<Config2, TupleConfig<Config3,
 | |
| 			  TupleConfig<Config4, TupleConfig<Config5,
 | |
| 			  TupleConfigEnd<Config6> > > > > >(config) {}
 | |
| 
 | |
| template<class Config1, class Config2, class Config3,
 | |
| 		 class Config4, class Config5, class Config6>
 | |
| TupleConfig6<Config1, Config2, Config3, Config4, Config5, Config6>::TupleConfig6(
 | |
| 		const Config1& cfg1, const Config2& cfg2, const Config3& cfg3,
 | |
| 		const Config4& cfg4, const Config5& cfg5, const Config6& cfg6) :
 | |
| 		TupleConfig<Config1, TupleConfig<Config2, TupleConfig<Config3,
 | |
| 		TupleConfig<Config4, TupleConfig<Config5, TupleConfigEnd<Config6> > > > > >(
 | |
| 				cfg1, TupleConfig<Config2, TupleConfig<Config3, TupleConfig<Config4,
 | |
| 				      TupleConfig<Config5, TupleConfigEnd<Config6> > > > >(
 | |
| 						cfg2, TupleConfig<Config3, TupleConfig<Config4, TupleConfig<Config5,
 | |
| 							  TupleConfigEnd<Config6> > > >(
 | |
| 								cfg3, TupleConfig<Config4, TupleConfig<Config5,
 | |
| 								      TupleConfigEnd<Config6> > >(
 | |
| 										cfg4, TupleConfig<Config5, TupleConfigEnd<Config6> >(
 | |
| 												cfg5, TupleConfigEnd<Config6>(cfg6)))))) {}
 | |
| 
 | |
| template<class Config1, class Config2, class Config3,
 | |
| 	     class Config4, class Config5, class Config6>
 | |
| TupleConfig6<Config1, Config2, Config3, Config4, Config5, Config6>::TupleConfig6(
 | |
| 		const TupleConfig<Config1, TupleConfig<Config2, TupleConfig<Config3,
 | |
| 		      TupleConfig<Config4, TupleConfig<Config5,
 | |
| 		      TupleConfigEnd<Config6> > > > > >& config) :
 | |
| 	TupleConfig<Config1, TupleConfig<Config2, TupleConfig<Config3,
 | |
| 	TupleConfig<Config4, TupleConfig<Config5,
 | |
| 	TupleConfigEnd<Config6> > > > > >(config) {}
 | |
| 
 | |
| }
 |