From 97b5778172572504c8dfbe173b18281e786270c0 Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Fri, 25 Apr 2025 16:18:26 +0200 Subject: Initial commit --- qt-widgets/adapter.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 qt-widgets/adapter.cpp (limited to 'qt-widgets/adapter.cpp') diff --git a/qt-widgets/adapter.cpp b/qt-widgets/adapter.cpp new file mode 100644 index 0000000..c15181c --- /dev/null +++ b/qt-widgets/adapter.cpp @@ -0,0 +1,46 @@ +#include "adapter.h" + +#include +#include +#include +#include +#include + +NissyAdapter::NissyAdapter() +{ + auto sid = nissy::solverinfo(defaultOptimalSolver); + auto [sz, dataid] = std::get>(sid); + const std::string path = "../nissy-core/tables/" + dataid; + + std::filesystem::path filePath(path); + if (std::filesystem::file_size(filePath) != static_cast(sz)) + qDebug("Error in file size!"); // TODO: better handle error, gentable + + optimalSolverData.value.resize(sz); + std::ifstream ifs(path, std::ios::binary); + ifs.read(reinterpret_cast(optimalSolverData.value.data()), sz); + ifs.close(); +} + +NissyAdapter::~NissyAdapter() {} + +void NissyAdapter::solve(SolverConfiguration cfg) +{ + auto se = nissy::solve(cfg.cube, defaultOptimalSolver, + nissy::nissflag::NORMAL, cfg.minmoves, cfg.maxmoves, + cfg.maxsolutions, cfg.optimal, cfg.threads, optimalSolverData); + if (std::holds_alternative(se)) { + auto code = std::get(se).value; + emit solveDone(QString("Error " + code)); + return; + } + + auto [sols, stats] = std::get(se); + if (sols.size() == 0) { + emit solveDone(QString("No solution found")); + } else { + auto solstr = std::accumulate( + sols.begin(), sols.end(), std::string{}); + emit solveDone(QString::fromStdString(solstr)); + } +} -- cgit v1.3