From b5e3c8816dde8fea530906157ce3dcef05e5b026 Mon Sep 17 00:00:00 2001 From: Mike Bosse Date: Thu, 4 Dec 2014 22:15:20 +0100 Subject: [PATCH] added vector space concept check, but not sure it will work... --- gtsam/base/concepts.h | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/gtsam/base/concepts.h b/gtsam/base/concepts.h index b231dfe0d..cc86d98ac 100644 --- a/gtsam/base/concepts.h +++ b/gtsam/base/concepts.h @@ -50,7 +50,6 @@ template class ManifoldConcept { public: typedef T Manifold; - typedef traits::manifold_tag manifold_tag; typedef traits::TangentVector::type TangentVector; typedef traits::DefaultChart::type DefaultChart; static const size_t dim = traits::dimension::value; @@ -126,7 +125,29 @@ class LieGroupConcept : public GroupConcept, public ManifoldConcept { } }; +template +class VectorSpaceConcept : public LieGroupConcept { + typedef traits::DefaultChart::type Chart; + typedef GroupConcept::identity identity; + BOOST_CONCEPT_USAGE(VectorSpaceConcept) { + BOOST_STATIC_ASSERT(boost::is_base_of >); + r = p+q; + r = -p; + r = p-q; + } + + bool check_invariants(const V& a, const V& b) { + return equal(compose(a, b), a+b) + && equal(inverse(a), -a) + && equal(between(a, b), b-a) + && equal(Chart::retract(a, b), a+b) + && equal(Chart::local(a, b), b-a); + } + + private: + V p,q,r; +}; } // namespace gtsam