Macros. Too ugly?
							parent
							
								
									19c38b91ee
								
							
						
					
					
						commit
						38a0842090
					
				| 
						 | 
				
			
			@ -149,6 +149,17 @@ check_invariants(const T& a, const T& b, double tol = 1e-9) {
 | 
			
		|||
}
 | 
			
		||||
} // \ namespace group
 | 
			
		||||
 | 
			
		||||
#define GTSAM_MULTIPLICATIVE_GROUP2(T1,A1,T2,A2,GROUP) \
 | 
			
		||||
namespace group { \
 | 
			
		||||
template<T1 A1, T2 A2> GROUP<A1,A2> compose(const GROUP<A1,A2> &g, const GROUP<A1,A2> & h) { return g * h;} \
 | 
			
		||||
template<T1 A1, T2 A2> GROUP<A1,A2> between(const GROUP<A1,A2> &g, const GROUP<A1,A2> & h) { return g.inverse() * h;} \
 | 
			
		||||
template<T1 A1, T2 A2> GROUP<A1,A2> inverse(const GROUP<A1,A2> &g) { return g.inverse();} \
 | 
			
		||||
namespace traits { \
 | 
			
		||||
template<T1 A1, T2 A2> struct identity<GROUP<A1,A2> > { static const GROUP<A1,A2> value; typedef GROUP<A1,A2> value_type;};\
 | 
			
		||||
template<T1 A1, T2 A2> const GROUP<A1,A2> identity<GROUP<A1,A2> >::value = GROUP<A1,A2>::Identity();\
 | 
			
		||||
template<T1 A1, T2 A2> struct flavor<GROUP<A1,A2> > { typedef multiplicative_tag type;};\
 | 
			
		||||
}}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Group Concept
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -111,47 +111,8 @@ struct DefaultChart<Eigen::Quaternion<S, O> > {
 | 
			
		|||
} // \namespace gtsam::manifold::traits
 | 
			
		||||
} // \namespace gtsam::manifold
 | 
			
		||||
 | 
			
		||||
namespace group {
 | 
			
		||||
GTSAM_MULTIPLICATIVE_GROUP2(typename,_Scalar, int,_Options ,Eigen::Quaternion)
 | 
			
		||||
 | 
			
		||||
template<typename S, int O>
 | 
			
		||||
Eigen::Quaternion<S, O> compose(const Eigen::Quaternion<S, O> &g,
 | 
			
		||||
    const Eigen::Quaternion<S, O> & h) {
 | 
			
		||||
  return g * h;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<typename S, int O>
 | 
			
		||||
Eigen::Quaternion<S, O> between(const Eigen::Quaternion<S, O> &g,
 | 
			
		||||
    const Eigen::Quaternion<S, O> & h) {
 | 
			
		||||
  return g.inverse() * h;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<typename S, int O>
 | 
			
		||||
Eigen::Quaternion<S, O> inverse(const Eigen::Quaternion<S, O> &g) {
 | 
			
		||||
  return g.inverse();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
namespace traits {
 | 
			
		||||
 | 
			
		||||
/// Declare the trait that specifies a quaternion's identity element
 | 
			
		||||
template<typename S, int O>
 | 
			
		||||
struct identity<Eigen::Quaternion<S, O> > {
 | 
			
		||||
  static const Eigen::Quaternion<S, O> value;
 | 
			
		||||
  typedef Eigen::Quaternion<S, O> value_type;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/// Out of line definition of identity
 | 
			
		||||
template<typename S, int O>
 | 
			
		||||
const Eigen::Quaternion<S, O> identity<Eigen::Quaternion<S, O> >::value =
 | 
			
		||||
    Eigen::Quaternion<S, O>::Identity();
 | 
			
		||||
 | 
			
		||||
/// Define the trait that asserts quaternions are a multiplicative group
 | 
			
		||||
template<typename S, int O>
 | 
			
		||||
struct flavor<Eigen::Quaternion<S, O> > {
 | 
			
		||||
  typedef multiplicative_tag type;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} // \namespace gtsam::group::traits
 | 
			
		||||
} // \namespace gtsam::group
 | 
			
		||||
} // \namespace gtsam
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue