19#include "absl/log/check.h"
21#include "ortools/sat/cp_model.pb.h"
24#include "ortools/sat/sat_parameters.pb.h"
31CpSolverResponse solveWithParameters(std::atomic<bool>*
const limit_reached,
32 const CpModelProto& proto,
33 const SatParameters& params) {
36 model.GetOrCreate<TimeLimit>()->RegisterExternalBooleanAsLimit(limit_reached);
45 const void* cparams,
int cparams_len,
46 void** cres,
int* cres_len) {
54 delete static_cast<std::atomic<bool>*
>(atomic_bool);
58 *
static_cast<std::atomic<bool>*
>(atomic_bool) =
true;
62 int creq_len,
const void* cparams,
int cparams_len,
63 void** cres,
int* cres_len) {
65 CHECK(req.ParseFromArray(creq, creq_len));
68 CHECK(params.ParseFromArray(cparams, cparams_len));
70 CpSolverResponse res = solveWithParameters(
71 static_cast<std::atomic<bool>*
>(limit_reached), req, params);
74 CHECK(res.SerializeToString(&res_str));
76 *cres_len =
static_cast<int>(res_str.size());
78 CHECK(*cres !=
nullptr);
std::function< SatParameters(Model *)> NewSatParameters(const std::string ¶ms)
void SolveCpInterruptible(void *const limit_reached, const void *creq, int creq_len, const void *cparams, int cparams_len, void **cres, int *cres_len)
void SolveCpModelWithParameters(const void *creq, int creq_len, const void *cparams, int cparams_len, void **cres, int *cres_len)
void SolveCpStopSolve(void *const atomic_bool)
CpSolverResponse SolveCpModel(const CpModelProto &model_proto, Model *model)
void * SolveCpNewAtomicBool()
void SolveCpDestroyAtomicBool(void *const atomic_bool)
char * memdup(const char *s, size_t slen)