Program Listing for File liegroup-generic.hpp
↰ Return to documentation for file (include/pinocchio/multibody/liegroup/liegroup-generic.hpp
)
//
// Copyright (c) 2018 CNRS
//
#ifndef __pinocchio_lie_group_generic_hpp__
#define __pinocchio_lie_group_generic_hpp__
#include "pinocchio/multibody/liegroup/liegroup-base.hpp"
#include "pinocchio/multibody/liegroup/liegroup-variant-visitors.hpp"
namespace pinocchio
{
template<typename LieGroupCollection> struct LieGroupGenericTpl;
template<typename LieGroupCollection>
struct traits< LieGroupGenericTpl<LieGroupCollection> >
{
typedef typename LieGroupCollection::Scalar Scalar;
enum {
Options = LieGroupCollection::Options,
NQ = Eigen::Dynamic,
NV = Eigen::Dynamic
};
};
template<typename LieGroupCollection>
struct LieGroupGenericTpl
: LieGroupBase< LieGroupGenericTpl<LieGroupCollection> >, LieGroupCollection::LieGroupVariant
{
typedef typename LieGroupCollection::LieGroupVariant Base;
typedef typename LieGroupCollection::LieGroupVariant LieGroupVariant;
typedef typename LieGroupCollection::Scalar Scalar;
enum { Options = LieGroupCollection::Options };
template<typename LieGroupDerived>
LieGroupGenericTpl(const LieGroupBase<LieGroupDerived> & lg_base)
: Base(lg_base.derived())
{}
template<typename LieGroup>
LieGroupGenericTpl(const LieGroupVariant & lg_variant)
: Base(lg_variant)
{}
LieGroupGenericTpl(const LieGroupGenericTpl & lg_generic) = default;
LieGroupGenericTpl & operator=(const LieGroupGenericTpl & other) = default;
const LieGroupVariant & toVariant() const
{ return static_cast<const LieGroupVariant &>(*this); }
LieGroupVariant & toVariant()
{ return static_cast<LieGroupVariant &>(*this); }
bool isEqual_impl (const LieGroupGenericTpl& other) const
{
return boost::apply_visitor(visitor::LieGroupEqual<Scalar, Options>(), toVariant(), other.toVariant());
}
int nq() const { return ::pinocchio::nq(*this); }
int nv() const { return ::pinocchio::nv(*this); }
bool operator== (const LieGroupGenericTpl& other) const
{
return isEqual_impl(other);
}
bool operator!= (const LieGroupGenericTpl& other) const
{
return this->isDifferent_impl(other);
}
std::string name() const
{
return LieGroupNameVisitor::run(*this);
}
};
}
#endif // ifndef __pinocchio_lie_group_generic_hpp__