addressed review comments

release/4.3a0
Mike Bosse 2014-12-04 15:26:01 +01:00
parent eda6bf5ffe
commit 56787e1a88
1 changed files with 17 additions and 12 deletions

View File

@ -17,14 +17,23 @@ namespace traits {
template <class Manifold> template <class Manifold>
struct TangentVector { struct TangentVector {
typedef Eigen::VectorXd type; //typedef XXX type;
}; };
// used to identify the manifold associated with a chart
template <class Chart> template <class Chart>
struct Manifold { struct Manifold {
typedef Chart::value_type type; //typedef XXX type;
}; };
template <class Manifold>
struct DefaultChart {
//typedef XXX type;
};
template <class Group>
struct group_flavor {};
struct additive_group_tag {}; struct additive_group_tag {};
struct multiplicative_group_tag {}; struct multiplicative_group_tag {};
@ -35,20 +44,16 @@ class ManifoldConcept {
public: public:
typedef T Manifold; typedef T Manifold;
typedef traits::TangentVector<T>::type TangentVector; typedef traits::TangentVector<T>::type TangentVector;
typedef traits::DefaultChart<T> DefaultChart; typedef traits::DefaultChart<T>::type DefaultChart;
static const size_t dim = traits::dimension<T>::value; static const size_t dim = traits::dimension<T>::value;
BOOST_CONCEPT_USAGE(ManifoldConcept) { BOOST_CONCEPT_USAGE(ManifoldConcept) {
// assignable
T t2 = t;
TangentVector v;
BOOST_STATIC_ASSERT(TangentVector::SizeAtCompileTime == dim); BOOST_STATIC_ASSERT(TangentVector::SizeAtCompileTime == dim);
// no direct usage for manifold since most usage is through a chart
} }
private: private:
Manifold p; Manifold p;
TangentVector v;
}; };
template<class C> template<class C>
@ -87,18 +92,18 @@ class GroupConcept {
return (equal(compose(a, inverse(a)), identity)) return (equal(compose(a, inverse(a)), identity))
&& (equal(between(a, b), compose(inverse(a), b))) && (equal(between(a, b), compose(inverse(a), b)))
&& (equal(compose(a, between(a, b)), b)) && (equal(compose(a, between(a, b)), b))
&& operator_usage(a, b, traits::group_flavor<Group>) && operator_usage(a, b, traits::group_flavor<Group>);
} }
private: private:
Group p,q; Group p,q;
bool operator_usage(const Group& a, const Group& b, const traits::multiplicative_group_tag&) { bool operator_usage(const Group& a, const Group& b, const traits::multiplicative_group_tag&) {
return equals(compose(a, b), a*b); return equal(compose(a, b), a*b);
} }
bool operator_usage(const Group& a, const Group& b, const traits::additive_group_tag&) { bool operator_usage(const Group& a, const Group& b, const traits::additive_group_tag&) {
return equals(compose(a, b), a+b); return equal(compose(a, b), a+b);
} }
}; };