figureing out concept checks (not done yet!!)

release/4.3a0
Mike Bosse 2014-12-04 11:27:25 +01:00
parent 8b20175b49
commit c225ee223c
1 changed files with 71 additions and 0 deletions

71
gtsam/base/concepts.h Normal file
View File

@ -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_ */