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,
","),
"]");
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::string ProtoEnumToString(ProtoEnumType enum_value)
std::string RegisteredSolversToString() const
Collection of objects used to extend the Constraint Solver library.
std::function< absl::StatusOr< std::unique_ptr< SolverInterface > >(const ModelProto &model, const SolverInitializerProto &initializer)> Factory
static AllSolversRegistry * Instance()
const Collection::value_type::second_type * FindOrNull(const Collection &collection, const typename Collection::value_type::first_type &key)
std::vector< SolverType > RegisteredSolvers() const