23#include "absl/container/flat_hash_map.h"
24#include "absl/status/status.h"
25#include "absl/status/statusor.h"
26#include "absl/strings/str_cat.h"
27#include "absl/strings/str_join.h"
28#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 SolverType solver_type,
const ModelProto&
model,
56 const SolverInitializerProto& initializer)
const {
59 const absl::MutexLock lock(&mutex_);
62 if (factory ==
nullptr) {
63 return absl::InvalidArgumentError(
65 " is not registered."));
67 return (*factory)(
model, initializer);
71 const absl::MutexLock lock(&mutex_);
72 return registered_solvers_.contains(solver_type);
76 std::vector<SolverType> 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,
","),
"]");
std::string RegisteredSolversToString() const
std::vector< SolverType > RegisteredSolvers() const
static AllSolversRegistry * Instance()
bool IsRegistered(SolverType solver_type) const
void Register(SolverType solver_type, SolverInterface::Factory factory)
absl::StatusOr< std::unique_ptr< SolverInterface > > Create(SolverType solver_type, const ModelProto &model, const SolverInitializerProto &initializer) const
std::function< absl::StatusOr< std::unique_ptr< SolverInterface > >(const ModelProto &model, const SolverInitializerProto &initializer)> 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)