| 208 | } |
| 209 | |
| 210 | int tiny_set_linear_constraints(TinySolver* solver, |
| 211 | tinyMatrix Alin_x, tinyVector blin_x, |
| 212 | tinyMatrix Alin_u, tinyVector blin_u) { |
| 213 | if (!solver) { |
| 214 | std::cout << "Error in tiny_set_linear_constraints: solver is nullptr" << std::endl; |
| 215 | return 1; |
| 216 | } |
| 217 | |
| 218 | // Make sure all linear constraint matrix sizes are self-consistent |
| 219 | int num_state_linear = Alin_x.rows(); |
| 220 | int num_input_linear = Alin_u.rows(); |
| 221 | int status = 0; |
| 222 | |
| 223 | // Check state constraint dimensions |
| 224 | if (num_state_linear > 0) { |
| 225 | status |= check_dimension("State linear constraint matrix (Alin_x)", "rows", Alin_x.rows(), num_state_linear); |
| 226 | status |= check_dimension("State linear constraint matrix (Alin_x)", "columns", Alin_x.cols(), solver->work->nx); |
| 227 | status |= check_dimension("State linear constraint vector (blin_x)", "rows", blin_x.rows(), num_state_linear); |
| 228 | status |= check_dimension("State linear constraint vector (blin_x)", "columns", blin_x.cols(), 1); |
| 229 | } |
| 230 | |
| 231 | // Check input constraint dimensions |
| 232 | if (num_input_linear > 0) { |
| 233 | status |= check_dimension("Input linear constraint matrix (Alin_u)", "rows", Alin_u.rows(), num_input_linear); |
| 234 | status |= check_dimension("Input linear constraint matrix (Alin_u)", "columns", Alin_u.cols(), solver->work->nu); |
| 235 | status |= check_dimension("Input linear constraint vector (blin_u)", "rows", blin_u.rows(), num_input_linear); |
| 236 | status |= check_dimension("Input linear constraint vector (blin_u)", "columns", blin_u.cols(), 1); |
| 237 | } |
| 238 | |
| 239 | if (status) { |
| 240 | return status; |
| 241 | } |
| 242 | |
| 243 | solver->work->numStateLinear = num_state_linear; |
| 244 | solver->work->numInputLinear = num_input_linear; |
| 245 | |
| 246 | solver->work->Alin_x = Alin_x; |
| 247 | solver->work->blin_x = blin_x; |
| 248 | solver->work->Alin_u = Alin_u; |
| 249 | solver->work->blin_u = blin_u; |
| 250 | |
| 251 | return 0; |
| 252 | } |
| 253 | |
| 254 | int tiny_set_tv_linear_constraints(TinySolver* solver, |
| 255 | tinyMatrix tv_Alin_x, tinyMatrix tv_blin_x, |
no test coverage detected