From 8d3fc9f5f9c0593fcae9c451efe6c89c64dcbe84 Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Tue, 29 Apr 2025 10:08:04 +0200 Subject: Added stop / pause / resume solve to API --- cpp/examples/solve_h48h3k2.cpp | 2 +- cpp/nissy.cpp | 13 ++++++++++--- cpp/nissy.h | 12 +++++++++++- 3 files changed, 22 insertions(+), 5 deletions(-) (limited to 'cpp') diff --git a/cpp/examples/solve_h48h3k2.cpp b/cpp/examples/solve_h48h3k2.cpp index f7ba235..f0d6f2f 100644 --- a/cpp/examples/solve_h48h3k2.cpp +++ b/cpp/examples/solve_h48h3k2.cpp @@ -68,7 +68,7 @@ int main() { // Solve auto solve_result = h48h3k2.solve(c, nissy::nissflag::NORMAL, - 0, maxmoves, 1, 20, 8); + 0, maxmoves, 1, 20, 8, NULL, NULL); // Write the result if (!solve_result.err.ok()) { diff --git a/cpp/nissy.cpp b/cpp/nissy.cpp index 118a072..2faea6f 100644 --- a/cpp/nissy.cpp +++ b/cpp/nissy.cpp @@ -20,7 +20,8 @@ extern "C" { long long nissy_checkdata(unsigned long long, const unsigned char *); long long nissy_solve(const char *, const char *, unsigned, unsigned, unsigned, unsigned, unsigned, unsigned, unsigned long long, - const unsigned char *, unsigned, char *, long long *); + const unsigned char *, unsigned, char *, long long *, + int (*)(void *), void *); long long nissy_countmoves(const char *); long long nissy_setlogger(void (*)(const char *, void *), void *); } @@ -47,6 +48,10 @@ namespace nissy { const error error::OPTIONS{-80}; const error error::UNKNOWN{-999}; + const status status::run{0}; + const status status::stop{1}; + const status status::pause{2}; + namespace size { constexpr size_t CUBE = 22; constexpr size_t TRANSFORMATION = 12; @@ -154,7 +159,8 @@ namespace nissy { solver::solve_result solver::solve(const cube& cube, nissflag niss, unsigned minmoves, unsigned maxmoves, unsigned maxsols, unsigned optimal, - unsigned threads) + unsigned threads, int (*poll_status)(void *), + void *poll_status_data) { solver::solve_result result; @@ -171,7 +177,8 @@ namespace nissy { name.c_str(), niss.value, minmoves, maxmoves, maxsols, optimal, threads, data.size(), reinterpret_cast(data.data()), len, - csols.data(), result.stats.data()); + csols.data(), result.stats.data(), poll_status, + poll_status_data); result.err = error{err}; if (err < 0) diff --git a/cpp/nissy.h b/cpp/nissy.h index 4fa98ad..41d3876 100644 --- a/cpp/nissy.h +++ b/cpp/nissy.h @@ -46,6 +46,15 @@ namespace nissy { static const error UNKNOWN; }; + class status { + public: + int value; + + static const status run; + static const status stop; + static const status pause; + }; + class cube { public: cube(); @@ -86,7 +95,8 @@ namespace nissy { void unload_data(); solve_result solve(const cube&, nissflag, unsigned minmoves, unsigned maxmoves, unsigned maxsols, unsigned optimal, - unsigned threads); + unsigned threads, int (*poll_status)(void *), + void *poll_status_data); static std::variant get(const std::string&); private: -- cgit v1.3