5 #ifndef __pinocchio_multibody_liegroup_liegroup_operation_base_hpp__ 
    6 #define __pinocchio_multibody_liegroup_liegroup_operation_base_hpp__ 
   16 #define PINOCCHIO_LIE_GROUP_PUBLIC_INTERFACE_GENERIC(Derived, TYPENAME)                            \ 
   17   typedef LieGroupBase<Derived> Base;                                                              \ 
   18   typedef TYPENAME Base::Index Index;                                                              \ 
   19   typedef TYPENAME traits<Derived>::Scalar Scalar;                                                 \ 
   22     Options = traits<Derived>::Options,                                                            \ 
   26   typedef TYPENAME Base::ConfigVector_t ConfigVector_t;                                            \ 
   27   typedef TYPENAME Base::TangentVector_t TangentVector_t;                                          \ 
   28   typedef TYPENAME Base::JacobianMatrix_t JacobianMatrix_t 
   30 #define PINOCCHIO_LIE_GROUP_PUBLIC_INTERFACE(Derived)                                              \ 
   31   PINOCCHIO_LIE_GROUP_PUBLIC_INTERFACE_GENERIC(Derived, PINOCCHIO_MACRO_EMPTY_ARG) 
   33 #define PINOCCHIO_LIE_GROUP_TPL_PUBLIC_INTERFACE(Derived)                                          \ 
   34   PINOCCHIO_LIE_GROUP_PUBLIC_INTERFACE_GENERIC(Derived, typename) 
   36   template<
typename Derived>
 
   65     template<
class ConfigIn_t, 
class Tangent_t, 
class ConfigOut_t>
 
   67       const Eigen::MatrixBase<ConfigIn_t> & 
q,
 
   68       const Eigen::MatrixBase<Tangent_t> & 
v,
 
   69       const Eigen::MatrixBase<ConfigOut_t> & 
qout) 
const;
 
   85     template<
class Config_t, 
class Jacobian_t>
 
   87       const Eigen::MatrixBase<Config_t> & 
q, 
const Eigen::MatrixBase<Jacobian_t> & 
J) 
const;
 
  104     template<ArgumentPosition arg, 
class Config_t, 
class Tangent_t, 
class JacobianOut_t>
 
  106       const Eigen::MatrixBase<Config_t> & 
q,
 
  107       const Eigen::MatrixBase<Tangent_t> & 
v,
 
  108       const Eigen::MatrixBase<JacobianOut_t> & 
J,
 
  131     template<
class Config_t, 
class Tangent_t, 
class JacobianOut_t>
 
  133       const Eigen::MatrixBase<Config_t> & 
q,
 
  134       const Eigen::MatrixBase<Tangent_t> & 
v,
 
  135       const Eigen::MatrixBase<JacobianOut_t> & 
J,
 
  152     template<
class Config_t, 
class Tangent_t, 
class JacobianOut_t>
 
  154       const Eigen::MatrixBase<Config_t> & 
q,
 
  155       const Eigen::MatrixBase<Tangent_t> & 
v,
 
  156       const Eigen::MatrixBase<JacobianOut_t> & 
J,
 
  159     template<
class Config_t, 
class Tangent_t, 
class JacobianIn_t, 
class JacobianOut_t>
 
  161       const Eigen::MatrixBase<Config_t> & 
q,
 
  162       const Eigen::MatrixBase<Tangent_t> & 
v,
 
  163       const Eigen::MatrixBase<JacobianIn_t> & Jin,
 
  165       const Eigen::MatrixBase<JacobianOut_t> & Jout,
 
  168     template<
class Config_t, 
class Tangent_t, 
class JacobianIn_t, 
class JacobianOut_t>
 
  170       const Eigen::MatrixBase<Config_t> & 
q,
 
  171       const Eigen::MatrixBase<Tangent_t> & 
v,
 
  173       const Eigen::MatrixBase<JacobianIn_t> & Jin,
 
  174       const Eigen::MatrixBase<JacobianOut_t> & Jout,
 
  190     template<
class Config_t, 
class Tangent_t, 
class JacobianOut_t>
 
  192       const Eigen::MatrixBase<Config_t> & 
q,
 
  193       const Eigen::MatrixBase<Tangent_t> & 
v,
 
  194       const Eigen::MatrixBase<JacobianOut_t> & 
J,
 
  197     template<
class Config_t, 
class Tangent_t, 
class JacobianIn_t, 
class JacobianOut_t>
 
  199       const Eigen::MatrixBase<Config_t> & 
q,
 
  200       const Eigen::MatrixBase<Tangent_t> & 
v,
 
  202       const Eigen::MatrixBase<JacobianIn_t> & Jin,
 
  203       const Eigen::MatrixBase<JacobianOut_t> & Jout,
 
  206     template<
class Config_t, 
class Tangent_t, 
class JacobianIn_t, 
class JacobianOut_t>
 
  208       const Eigen::MatrixBase<Config_t> & 
q,
 
  209       const Eigen::MatrixBase<Tangent_t> & 
v,
 
  210       const Eigen::MatrixBase<JacobianIn_t> & Jin,
 
  212       const Eigen::MatrixBase<JacobianOut_t> & Jout,
 
  240     template<
class Config_t, 
class Tangent_t, 
class JacobianIn_t, 
class JacobianOut_t>
 
  242       const Eigen::MatrixBase<Config_t> & 
q,
 
  243       const Eigen::MatrixBase<Tangent_t> & 
v,
 
  244       const Eigen::MatrixBase<JacobianIn_t> & Jin,
 
  245       const Eigen::MatrixBase<JacobianOut_t> & Jout,
 
  270     template<
class Config_t, 
class Tangent_t, 
class JacobianIn_t, 
class JacobianOut_t>
 
  272       const Eigen::MatrixBase<Config_t> & 
q,
 
  273       const Eigen::MatrixBase<Tangent_t> & 
v,
 
  274       const Eigen::MatrixBase<JacobianIn_t> & Jin,
 
  275       const Eigen::MatrixBase<JacobianOut_t> & Jout) 
const;
 
  298     template<
class Config_t, 
class Tangent_t, 
class JacobianIn_t, 
class JacobianOut_t>
 
  300       const Eigen::MatrixBase<Config_t> & 
q,
 
  301       const Eigen::MatrixBase<Tangent_t> & 
v,
 
  302       const Eigen::MatrixBase<JacobianIn_t> & Jin,
 
  303       const Eigen::MatrixBase<JacobianOut_t> & Jout) 
const;
 
  327     template<
class Config_t, 
class Tangent_t, 
class Jacobian_t>
 
  329       const Eigen::MatrixBase<Config_t> & 
q,
 
  330       const Eigen::MatrixBase<Tangent_t> & 
v,
 
  331       const Eigen::MatrixBase<Jacobian_t> & 
J,
 
  355     template<
class Config_t, 
class Tangent_t, 
class Jacobian_t>
 
  357       const Eigen::MatrixBase<Config_t> & 
q,
 
  358       const Eigen::MatrixBase<Tangent_t> & 
v,
 
  359       const Eigen::MatrixBase<Jacobian_t> & 
J) 
const;
 
  381     template<
class Config_t, 
class Tangent_t, 
class Jacobian_t>
 
  383       const Eigen::MatrixBase<Config_t> & 
q,
 
  384       const Eigen::MatrixBase<Tangent_t> & 
v,
 
  385       const Eigen::MatrixBase<Jacobian_t> & 
J) 
const;
 
  396     template<
class ConfigL_t, 
class ConfigR_t, 
class ConfigOut_t>
 
  398       const Eigen::MatrixBase<ConfigL_t> & 
q0,
 
  399       const Eigen::MatrixBase<ConfigR_t> & 
q1,
 
  401       const Eigen::MatrixBase<ConfigOut_t> & 
qout) 
const;
 
  413     template<
class Config_t>
 
  414     void normalize(
const Eigen::MatrixBase<Config_t> & 
qout) 
const;
 
  424     template<
class Config_t>
 
  426       const Eigen::MatrixBase<Config_t> & 
qin,
 
  427       const Scalar & prec = Eigen::NumTraits<Scalar>::dummy_precision()) 
const;
 
  437     template<
class Config_t>
 
  438     void random(
const Eigen::MatrixBase<Config_t> & 
qout) 
const;
 
  449     template<
class ConfigL_t, 
class ConfigR_t, 
class ConfigOut_t>
 
  451       const Eigen::MatrixBase<ConfigL_t> & lower_pos_limit,
 
  452       const Eigen::MatrixBase<ConfigR_t> & upper_pos_limit,
 
  453       const Eigen::MatrixBase<ConfigOut_t> & 
qout) 
const;
 
  470     template<
class ConfigL_t, 
class ConfigR_t, 
class Tangent_t>
 
  472       const Eigen::MatrixBase<ConfigL_t> & 
q0,
 
  473       const Eigen::MatrixBase<ConfigR_t> & 
q1,
 
  474       const Eigen::MatrixBase<Tangent_t> & 
v) 
const;
 
  497     template<ArgumentPosition arg, 
class ConfigL_t, 
class ConfigR_t, 
class JacobianOut_t>
 
  499       const Eigen::MatrixBase<ConfigL_t> & 
q0,
 
  500       const Eigen::MatrixBase<ConfigR_t> & 
q1,
 
  501       const Eigen::MatrixBase<JacobianOut_t> & 
J) 
const;
 
  514     template<
class ConfigL_t, 
class ConfigR_t, 
class JacobianOut_t>
 
  516       const Eigen::MatrixBase<ConfigL_t> & 
q0,
 
  517       const Eigen::MatrixBase<ConfigR_t> & 
q1,
 
  518       const Eigen::MatrixBase<JacobianOut_t> & 
J,
 
  528       const Eigen::MatrixBase<ConfigL_t> & 
q0,
 
  529       const Eigen::MatrixBase<ConfigR_t> & 
q1,
 
  530       const Eigen::MatrixBase<JacobianIn_t> & Jin,
 
  532       const Eigen::MatrixBase<JacobianOut_t> & Jout,
 
  542       const Eigen::MatrixBase<ConfigL_t> & 
q0,
 
  543       const Eigen::MatrixBase<ConfigR_t> & 
q1,
 
  545       const Eigen::MatrixBase<JacobianIn_t> & Jin,
 
  546       const Eigen::MatrixBase<JacobianOut_t> & Jout,
 
  557     template<
class ConfigL_t, 
class ConfigR_t>
 
  559       const Eigen::MatrixBase<ConfigL_t> & 
q0, 
const Eigen::MatrixBase<ConfigR_t> & 
q1) 
const;
 
  569     template<
class ConfigL_t, 
class ConfigR_t>
 
  571       const Eigen::MatrixBase<ConfigL_t> & 
q0, 
const Eigen::MatrixBase<ConfigR_t> & 
q1) 
const;
 
  582     template<
class ConfigL_t, 
class ConfigR_t>
 
  584       const Eigen::MatrixBase<ConfigL_t> & 
q0,
 
  585       const Eigen::MatrixBase<ConfigR_t> & 
q1,
 
  586       const Scalar & prec = Eigen::NumTraits<Scalar>::dummy_precision()) 
const;
 
  602     template<
class Config_t, 
class Tangent_t>
 
  604     integrate(
const Eigen::MatrixBase<Config_t> & 
q, 
const Eigen::MatrixBase<Tangent_t> & 
v) 
const;
 
  606     template<
class ConfigL_t, 
class ConfigR_t>
 
  608       const Eigen::MatrixBase<ConfigL_t> & 
q0,
 
  609       const Eigen::MatrixBase<ConfigR_t> & 
q1,
 
  614     template<
class ConfigL_t, 
class ConfigR_t>
 
  616       const Eigen::MatrixBase<ConfigL_t> & lower_pos_limit,
 
  617       const Eigen::MatrixBase<ConfigR_t> & upper_pos_limit) 
const;
 
  619     template<
class ConfigL_t, 
class ConfigR_t>
 
  621       const Eigen::MatrixBase<ConfigL_t> & 
q0, 
const Eigen::MatrixBase<ConfigR_t> & 
q1) 
const;
 
  627     template<
class Config_t, 
class Tangent_t, 
class JacobianIn_t, 
class JacobianOut_t>
 
  631       const JacobianIn_t & Jin,
 
  632       JacobianOut_t & Jout,
 
  633       bool dIntegrateOnTheLeft,
 
  644       const ConfigL_t & 
q0,
 
  645       const ConfigR_t & 
q1,
 
  646       const JacobianIn_t & Jin,
 
  647       JacobianOut_t & Jout,
 
  648       bool dDifferenceOnTheLeft,
 
  651     template<
class ConfigL_t, 
class ConfigR_t, 
class ConfigOut_t>
 
  653       const Eigen::MatrixBase<ConfigL_t> & 
q0,
 
  654       const Eigen::MatrixBase<ConfigR_t> & 
q1,
 
  656       const Eigen::MatrixBase<ConfigOut_t> & 
qout) 
const;
 
  658     template<
class Config_t>
 
  661     template<
class Config_t>
 
  663       const Eigen::MatrixBase<Config_t> & 
qin,
 
  664       const Scalar & prec = Eigen::NumTraits<Scalar>::dummy_precision()) 
const;
 
  666     template<
class ConfigL_t, 
class ConfigR_t>
 
  668       const Eigen::MatrixBase<ConfigL_t> & 
q0, 
const Eigen::MatrixBase<ConfigR_t> & 
q1) 
const;
 
  670     template<
class ConfigL_t, 
class ConfigR_t>
 
  672       const Eigen::MatrixBase<ConfigL_t> & 
q0,
 
  673       const Eigen::MatrixBase<ConfigR_t> & 
q1,
 
  674       const Scalar & prec) 
const;
 
  698     std::string 
name() 
const;
 
  702       return static_cast<Derived &
>(*this);
 
  707       return static_cast<const Derived &
>(*this);
 
  741 #include "pinocchio/multibody/liegroup/liegroup-base.hxx" 
  743 #endif // ifndef __pinocchio_multibody_liegroup_liegroup_operation_base_hpp__