| 285 | } |
| 286 | |
| 287 | std::unique_ptr<Program> Program::CreateReducedProgram( |
| 288 | std::vector<double*>* removed_parameter_blocks, |
| 289 | double* fixed_cost, |
| 290 | std::string* error) const { |
| 291 | CHECK(removed_parameter_blocks != nullptr); |
| 292 | CHECK(fixed_cost != nullptr); |
| 293 | CHECK(error != nullptr); |
| 294 | |
| 295 | std::unique_ptr<Program> reduced_program = std::make_unique<Program>(*this); |
| 296 | if (!reduced_program->RemoveFixedBlocks( |
| 297 | removed_parameter_blocks, fixed_cost, error)) { |
| 298 | return nullptr; |
| 299 | } |
| 300 | |
| 301 | reduced_program->SetParameterOffsetsAndIndex(); |
| 302 | return reduced_program; |
| 303 | } |
| 304 | |
| 305 | bool Program::RemoveFixedBlocks(std::vector<double*>* removed_parameter_blocks, |
| 306 | double* fixed_cost, |