22#include "absl/container/flat_hash_map.h"
23#include "absl/status/status.h"
24#include "absl/status/statusor.h"
25#include "absl/strings/str_cat.h"
26#include "absl/strings/str_join.h"
27#include "absl/synchronization/mutex.h"
30#include "ortools/math_opt/model.pb.h"
31#include "ortools/math_opt/parameters.pb.h"
46 const absl::MutexLock lock(&mutex_);
48 registered_solvers_.emplace(solver_type, std::move(factory)).second;
51 <<
" already registered.";
55 SolverTypeProto solver_type,
const ModelProto&
model,
59 const absl::MutexLock lock(&mutex_);
62 if (factory ==
nullptr) {
63 return absl::InvalidArgumentError(
65 " is not registered."));
67 return (*factory)(
model, init_args);
71 const absl::MutexLock lock(&mutex_);
72 return registered_solvers_.contains(solver_type);
76 std::vector<SolverTypeProto> result;
78 const absl::MutexLock lock(&mutex_);
79 for (
const auto& kv_pair : registered_solvers_) {
80 result.push_back(kv_pair.first);
83 std::sort(result.begin(), result.end());
88 std::vector<std::string> solver_names;
90 const absl::MutexLock lock(&mutex_);
91 for (
const auto& kv_pair : registered_solvers_) {
95 std::sort(solver_names.begin(), solver_names.end());
96 return absl::StrCat(
"[", absl::StrJoin(solver_names,
","),
"]");
void Register(SolverTypeProto solver_type, SolverInterface::Factory factory)
absl::StatusOr< std::unique_ptr< SolverInterface > > Create(SolverTypeProto solver_type, const ModelProto &model, const SolverInterface::InitArgs &init_args) const
bool IsRegistered(SolverTypeProto solver_type) const
std::string RegisteredSolversToString() const
static AllSolversRegistry * Instance()
std::vector< SolverTypeProto > RegisteredSolvers() const
std::function< absl::StatusOr< std::unique_ptr< SolverInterface > >(const ModelProto &model, const InitArgs &init_args)> Factory
const Collection::value_type::second_type * FindOrNull(const Collection &collection, const typename Collection::value_type::first_type &key)
Collection of objects used to extend the Constraint Solver library.
std::string ProtoEnumToString(ProtoEnumType enum_value)