26 auto builder = []<
class Direction>(
tag_t<Direction>) {
30 std::shared_ptr<collector_t> collector;
32 bool extra_stats =
false;
35 collector = std::make_shared<collector_t>();
36 inner_solver.set_progress_callback(
37 [collector](
const auto &progress_info) {
38 collector->update_iter(progress_info);
44 auto run = [solver{std::move(solver)},
50 return std::make_shared<AlpaqaSolverWrapperStats<config_t>>(
51 std::move(run), std::move(collector));
54 std::map<std::string_view, solver_builder_func> builders{
64 if (direction.empty())
66 auto builder_it = builders.find(direction);
67 if (builder_it != builders.end())
68 return builder_it->second(direction, opts);
70 throw std::invalid_argument(
"Unknown direction '" +
71 std::string(direction) +
"'\n" +
72 " Available directions: " +
73 guanaqo::join(std::views::keys(builders)));