figureing out concept checks (not done yet!!)
parent
8b20175b49
commit
c225ee223c
|
@ -0,0 +1,71 @@
|
||||||
|
/*
|
||||||
|
* concepts.h
|
||||||
|
*
|
||||||
|
* Created on: Dec 4, 2014
|
||||||
|
* Author: mike bosse
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CONCEPTS_H_
|
||||||
|
#define CONCEPTS_H_
|
||||||
|
|
||||||
|
#include "manifold.h"
|
||||||
|
#include "chart.h"
|
||||||
|
|
||||||
|
namespace gtsam {
|
||||||
|
|
||||||
|
namespace traits {
|
||||||
|
|
||||||
|
template <class Manifold>
|
||||||
|
struct TangentVector {
|
||||||
|
typedef Eigen::VectorXd type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class Chart>
|
||||||
|
struct Manifold {
|
||||||
|
typedef Chart::value_type type;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace traits
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
class ManifoldConcept {
|
||||||
|
public:
|
||||||
|
typedef T Manifold;
|
||||||
|
typedef traits::TangentVector<T>::type TangentVector;
|
||||||
|
typedef traits::DefaultChart<T> DefaultChart;
|
||||||
|
static const size_t dim = traits::dimension<T>::value;
|
||||||
|
|
||||||
|
BOOST_CONCEPT_USAGE(ManifoldConcept) {
|
||||||
|
|
||||||
|
// assignable
|
||||||
|
T t2 = t;
|
||||||
|
|
||||||
|
TangentVector v;
|
||||||
|
BOOST_STATIC_ASSERT(TangentVector::SizeAtCompileTime == dim);
|
||||||
|
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
Manifold p;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class C>
|
||||||
|
class ChartConcept {
|
||||||
|
public:
|
||||||
|
typedef C Chart;
|
||||||
|
typedef typename traits::Manifold<Chart>::type Manifold;
|
||||||
|
typedef typename traits::TangentVector<Manifold>::type TangentVector;
|
||||||
|
|
||||||
|
BOOST_CONCEPT_USAGE(ChartConcept) {
|
||||||
|
v = Chart::local(p,q); // returns local coordinates of q w.r.t. origin p
|
||||||
|
q = Chart::retract(p,v); // returns retracted update of p with v
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
Manifold p,q;
|
||||||
|
TangentVector v;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace gtsam
|
||||||
|
|
||||||
|
#endif /* CONCEPTS_H_ */
|
Loading…
Reference in New Issue