group concept operator usage with tags

release/4.3a0
Mike Bosse 2014-12-04 13:11:45 +01:00
parent b6576d7e27
commit 978c17ceb6
1 changed files with 15 additions and 1 deletions

View File

@ -25,6 +25,9 @@ struct Manifold {
typedef Chart::value_type type;
};
struct additive_group_tag {};
struct multiplicative_group_tag {};
} // namespace traits
template<class T>
@ -77,16 +80,27 @@ class GroupConcept {
Group pq = compose(p, q);
Group d = between(p, q);
bool test = equal(p, q);
operator_usage(p, q, traits::group_flavor<Group>::tag);
}
bool check_invariants(const Group& a, const Group& b) {
return (equal(compose(a, inverse(a)), identity))
&& (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>::tag)
}
private:
Group p,q;
bool operator_usage(const Group& a, const Group& b, traits::multiplicative_group_tag) {
return equals(compose(a, b), a*b);
}
bool operator_usage(const Group& a, const Group& b, traits::additive_group_tag) {
return equals(compose(a, b), a+b);
}
};
} // namespace gtsam