wbc
QPSolver.hpp
Go to the documentation of this file.
1#ifndef WBC_CORE_QPSOLVER_HPP
2#define WBC_CORE_QPSOLVER_HPP
3
4#include <Eigen/Core>
5#include <vector>
6#include <memory>
7#include <map>
8
9namespace wbc{
10
11class HierarchicalQP;
12
17protected:
19public:
20 QPSolver();
21 virtual ~QPSolver();
27 virtual void solve(const HierarchicalQP& hierarchical_qp, Eigen::VectorXd &solver_output, bool allow_warm_start = true) = 0;
28
30 void reset(){configured=false;}
31};
32
33typedef std::shared_ptr<QPSolver> QPSolverPtr;
34
35template<typename T> QPSolver* createT(){return new T;}
36
38 typedef std::map<std::string, QPSolver*(*)()> QPSolverMap;
39
40 static QPSolver *createInstance(const std::string& name) {
41 QPSolverMap::iterator it = getQPSolverMap()->find(name);
42 if(it == getQPSolverMap()->end())
43 return 0;
44 return it->second();
45 }
46
47 template<typename T>
48 static T* createInstance(const std::string& name){
49 QPSolver* tmp = createInstance(name);
50 T* ret = dynamic_cast<T*>(tmp);
51 return ret;
52 }
53
55 if(!qp_solver_map)
56 qp_solver_map = new QPSolverMap;
57 return qp_solver_map;
58 }
59
60 static void clear(){
61 qp_solver_map->clear();
62 }
63
64private:
65 static QPSolverMap *qp_solver_map;
66};
67
68template<typename T>
70 QPSolverRegistry(const std::string& name) {
71 QPSolverMap::iterator it = getQPSolverMap()->find(name);
72 if(it != getQPSolverMap()->end())
73 throw std::runtime_error("Failed to register plugin with name " + name + ". A plugin with the same name is already registered");
74 getQPSolverMap()->insert(std::make_pair(name, &createT<T>));
75 }
76};
77}
78
79#endif // WBC_CORE_QPSOLVER_HPP
Base class for all QP solvers.
Definition QPSolver.hpp:16
virtual ~QPSolver()
Definition QPSolver.cpp:8
bool configured
Definition QPSolver.hpp:18
virtual void solve(const HierarchicalQP &hierarchical_qp, Eigen::VectorXd &solver_output, bool allow_warm_start=true)=0
solve Solve the given quadratic program
void reset()
reset Enforces reconfiguration at next call to solve()
Definition QPSolver.hpp:30
QPSolver()
Definition QPSolver.cpp:5
Definition ContactsAccelerationConstraint.cpp:3
QPSolver * createT()
Definition QPSolver.hpp:35
std::shared_ptr< QPSolver > QPSolverPtr
Definition QPSolver.hpp:33
Describes a hierarchy of quadratic programs.
Definition QuadraticProgram.hpp:53
Definition QPSolver.hpp:37
std::map< std::string, QPSolver *(*)()> QPSolverMap
Definition QPSolver.hpp:38
static T * createInstance(const std::string &name)
Definition QPSolver.hpp:48
static QPSolverMap * getQPSolverMap()
Definition QPSolver.hpp:54
static void clear()
Definition QPSolver.hpp:60
static QPSolver * createInstance(const std::string &name)
Definition QPSolver.hpp:40
QPSolverRegistry(const std::string &name)
Definition QPSolver.hpp:70