Constraint.h
Go to the documentation of this file.
1 /*
2  * Copyright 2015-2022 CNRS-UM LIRMM, CNRS-AIST JRL
3  */
4 
5 #pragma once
6 
8 
9 namespace mc_solver
10 {
11 
12 namespace utils
13 {
14 
27 template<typename ConstraintT, typename UpdateT>
28 struct Constraint : public tasks::qp::ConstraintFunction<ConstraintT>, UpdateT
29 {
30  static_assert(std::is_same<ConstraintT, tasks::qp::Equality>::value
31  || std::is_same<ConstraintT, tasks::qp::Inequality>::value
32  || std::is_same<ConstraintT, tasks::qp::GenInequality>::value,
33  "This must be instanciated with a known ConstraintT");
34  static_assert(utils::IsUpdate<UpdateT>::value, "This must be instanciated with a correct UpdateT parameter");
35 
36 protected:
37  // XXX The following is a hack to work-around the absence of constructor inheritance in GCC 4.7
38  // We enable different constructor based on the UpdateT class
39 
40  template<typename U = UpdateT, typename = typename std::enable_if<std::is_same<U, utils::UpdateRobot>::value>::type>
41  explicit Constraint(unsigned int rIndex) : UpdateT(rIndex)
42  {
43  }
44 
45  template<typename U = UpdateT, typename = typename std::enable_if<std::is_same<U, utils::UpdateLambda>::value>::type>
46  explicit Constraint(const tasks::qp::ContactId & cid) : UpdateT(cid)
47  {
48  }
49 
50  template<typename U = UpdateT, typename = typename std::enable_if<std::is_same<U, utils::UpdateForce>::value>::type>
51  Constraint(const mc_solver::QPSolver & solver, const tasks::qp::ContactId & cid) : UpdateT(solver, cid)
52  {
53  }
54 
56  virtual ~Constraint() {}
57 
58  void updateNrVars(const std::vector<rbd::MultiBody> & mbs, const tasks::qp::SolverData & data) override
59  {
60  UpdateT::updateNrVarsImpl(mbs, data);
61  }
62 
63  void update(const std::vector<rbd::MultiBody> & mbs,
64  const std::vector<rbd::MultiBodyConfig> & mbcs,
65  const tasks::qp::SolverData & data) override
66  {
67  UpdateT::updateImpl(mbs, mbcs, data);
68  }
69 };
70 
71 } // namespace utils
72 
73 } // namespace mc_solver
mc_solver::utils::Constraint::Constraint
Constraint(unsigned int rIndex)
Definition: Constraint.h:41
mc_solver::QPSolver
Definition: QPSolver.h:85
Update.h
mc_solver::utils::Constraint::~Constraint
virtual ~Constraint()
Definition: Constraint.h:56
mc_solver::utils::IsUpdate
Definition: Update.h:67
mc_solver::utils::Constraint::Constraint
Constraint(const mc_solver::QPSolver &solver, const tasks::qp::ContactId &cid)
Definition: Constraint.h:51
mc_solver::utils::Constraint::Constraint
Constraint(const tasks::qp::ContactId &cid)
Definition: Constraint.h:46
mc_solver::utils::Constraint::updateNrVars
void updateNrVars(const std::vector< rbd::MultiBody > &mbs, const tasks::qp::SolverData &data) override
Definition: Constraint.h:58
mc_solver::utils::Constraint::update
void update(const std::vector< rbd::MultiBody > &mbs, const std::vector< rbd::MultiBodyConfig > &mbcs, const tasks::qp::SolverData &data) override
Definition: Constraint.h:63
mc_solver::utils::Constraint
Definition: Constraint.h:28
mc_solver
Definition: Contact.h:17