#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)); } }