5 #ifndef __pinocchio_check_hpp__ 6 #define __pinocchio_check_hpp__ 8 #include "pinocchio/multibody/model.hpp" 9 #include "pinocchio/multibody/data.hpp" 10 #include <boost/fusion/container/list.hpp> 11 #include <boost/fusion/container/generation/make_list.hpp> 13 #ifndef PINOCCHIO_ALGO_CHECKER_LIST_MAX_LIST_SIZE 14 #define PINOCCHIO_ALGO_CHECKER_LIST_MAX_LIST_SIZE 5 21 template<
typename AlgorithmCheckerDerived>
24 inline AlgorithmCheckerDerived& derived()
25 {
return *
static_cast< AlgorithmCheckerDerived*
>(
this); }
27 inline const AlgorithmCheckerDerived& derived()
const 28 {
return *
static_cast<const AlgorithmCheckerDerived*
>(
this); }
30 template<
typename Scalar,
int Options,
template<
typename,
int>
class JointCollectionTpl>
32 {
return derived().checkModel_impl(model); }
35 #define PINOCCHIO_DEFINE_ALGO_CHECKER(NAME) \ 36 struct NAME##Checker : public AlgorithmCheckerBase<NAME##Checker> \ 38 template<typename Scalar, int Options, template<typename,int> class JointCollectionTpl> \ 39 inline bool checkModel_impl(const ModelTpl<Scalar,Options,JointCollectionTpl> &) const; \ 43 PINOCCHIO_DEFINE_ALGO_CHECKER(Parent);
45 #if !defined(BOOST_FUSION_HAS_VARIADIC_LIST) 46 template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(PINOCCHIO_ALGO_CHECKER_LIST_MAX_LIST_SIZE,
class D,boost::fusion::
void_)>
50 typedef typename boost::fusion::list<BOOST_PP_ENUM_PARAMS(PINOCCHIO_ALGO_CHECKER_LIST_MAX_LIST_SIZE,D)> ArgType;
53 : checkerList(checkerList) {}
57 template<
typename Scalar,
int Options,
template<
typename,
int>
class JointCollectionTpl>
60 const ArgType & checkerList;
63 #define MAKE_ALGO_CHECKER_LIST(z,n,_) \ 65 template<BOOST_PP_ENUM_PARAMS(BOOST_PP_INC(n),class D)> \ 66 AlgorithmCheckerList<BOOST_PP_ENUM_PARAMS(BOOST_PP_INC(n),D)> makeAlgoCheckerList(BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_INC(n) , D, const & arg)) \ 67 { return AlgorithmCheckerList<BOOST_PP_ENUM_PARAMS(BOOST_PP_INC(n),D)>(boost::fusion::make_list(BOOST_PP_ENUM_PARAMS(BOOST_PP_INC(n),arg))); } \ 69 BOOST_PP_REPEAT(PINOCCHIO_ALGO_CHECKER_LIST_MAX_LIST_SIZE, MAKE_ALGO_CHECKER_LIST, BOOST_PP_EMPTY)
74 typedef typename boost::fusion::list<D...> ArgType;
77 : checkerList(checkerList) {}
81 template<
typename Scalar,
int Options,
template<
typename,
int>
class JointCollectionTpl>
84 const ArgType & checkerList;
101 template<
typename Scalar,
int Options,
template<
typename,
int>
class JointCollectionTpl>
109 #include "pinocchio/algorithm/check.hxx" 111 #endif // ifndef __pinocchio_check_hpp__
Checker having a list of Checker as input argument.
CRTP class describing the API of the checkers.
Main pinocchio namespace.
bool checkData(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, const DataTpl< Scalar, Options, JointCollectionTpl > &data)