qt-experiments

Experiments with QT framework and nissy
git clone https://git.tronto.net/qt-experiments
Download | Log | Files | Refs | Submodules | README

adapter.cpp (1394B)


      1 #include "adapter.h"
      2 
      3 #include <array>
      4 #include <filesystem>
      5 #include <fstream>
      6 #include <sstream>
      7 #include <QDebug>
      8 
      9 NissyAdapter::NissyAdapter()
     10 {
     11 	auto sid = nissy::solverinfo(defaultOptimalSolver);
     12 	auto [sz, dataid] = std::get<std::pair<size_t, std::string>>(sid);
     13 	const std::string path = "../nissy-core/tables/" + dataid;
     14 
     15 	std::filesystem::path filePath(path);
     16 	if (std::filesystem::file_size(filePath) != static_cast<uintmax_t>(sz))
     17 		qDebug("Error in file size!"); // TODO: better handle error, gentable
     18 
     19 	optimalSolverData.value.resize(sz);
     20 	std::ifstream ifs(path, std::ios::binary);
     21 	ifs.read(reinterpret_cast<char *>(optimalSolverData.value.data()), sz);
     22 	ifs.close();
     23 }
     24 
     25 NissyAdapter::~NissyAdapter() {}
     26 
     27 void NissyAdapter::solve(SolverConfiguration cfg)
     28 {
     29 	auto se = nissy::solve(cfg.cube, defaultOptimalSolver,
     30 	    nissy::nissflag::NORMAL, cfg.minmoves, cfg.maxmoves,
     31 	    cfg.maxsolutions, cfg.optimal, cfg.threads, optimalSolverData);
     32 	if (std::holds_alternative<nissy::error_t>(se)) {
     33 		auto code = std::get<nissy::error_t>(se).value;
     34 		emit solveDone(QString("Error " + code));
     35 		return;
     36 	} 
     37 
     38 	auto [sols, stats] = std::get<nissy::solve_result_t>(se);
     39 	if (sols.size() == 0) {
     40 		emit solveDone(QString("No solution found"));
     41 	} else {
     42 		auto solstr = std::accumulate(
     43 		    sols.begin(), sols.end(), std::string{});
     44 		emit solveDone(QString::fromStdString(solstr));
     45 	}
     46 }