27 #include <Qontrol/Constraints/GenericConstraint.hpp>
28 #include <Qontrol/Model/GenericModel.hpp>
29 #include <Qontrol/Problem/ControlOutput.hpp>
36 namespace Constraint {
45 : model_ptr_{model_ptr} {
55 template <
template <Qontrol::ControlOutput output2>
class ControlInput>
56 std::shared_ptr<ControlInput<output>>
add(std::string constraint_name) {
57 if (!
exist(constraint_name)) {
58 auto constraint_ptr = std::shared_ptr<ControlInput<output>>(
59 new ControlInput<output>(constraint_name, model_ptr_));
61 constraints_ptrs_.push_back(constraint_ptr);
62 constraints_names_.push_back(constraint_name);
63 return constraint_ptr;
65 throw std::logic_error(
"Constraint with name " + constraint_name +
77 std::shared_ptr<Constraint::GenericConstraint>
add(std::string constraint_name,
int constraint_size) {
78 if (!
exist(constraint_name)) {
79 auto base_constraint_ptr = std::make_shared<Constraint::GenericConstraint>(
80 constraint_name,constraint_size, model_ptr_->getNrOfDegreesOfFreedom());
81 constraints_ptrs_.push_back(base_constraint_ptr);
82 constraints_names_.push_back(constraint_name);
83 return base_constraint_ptr;
85 throw std::logic_error(
"Constraint with name " + constraint_name +
96 std::vector<std::string>::iterator
98 return std::find(constraints_names_.begin(), constraints_names_.end(),
107 void remove(std::shared_ptr<Constraint::GenericConstraint> constraint_ptr) {
108 remove(constraint_ptr->getName());
116 void remove(std::string constraint_name) {
117 if (
exist(constraint_name)) {
119 constraints_ptrs_.erase(constraints_ptrs_.begin() + index);
120 constraints_names_.erase(constraints_names_.begin() + index);
129 bool exist(std::string constraint_name) {
140 if (
exist(constraint_name)) {
142 return std::distance(constraints_names_.begin(), itr);
144 PLOGI <<
"Constraint " << constraint_name
145 <<
" doesn't exist. Cannot get it's index.";
156 for (
auto constraint : constraints_ptrs_) {
157 constraint->update(dt);
162 if (
exist(constraint_name)) {
164 return *constraints_ptrs_[index];
166 throw std::logic_error(
"Constraint with name " + constraint_name +
177 return constraints_ptrs_;
181 std::shared_ptr<Model::GenericModel> model_ptr_;
182 std::vector<std::string> constraints_names_;
183 std::vector<std::shared_ptr<Constraint::GenericConstraint>> constraints_ptrs_;