summaryrefslogtreecommitdiff
path: root/quacker/macondobackend.h
diff options
context:
space:
mode:
Diffstat (limited to 'quacker/macondobackend.h')
-rw-r--r--quacker/macondobackend.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/quacker/macondobackend.h b/quacker/macondobackend.h
new file mode 100644
index 0000000..dfda0c5
--- /dev/null
+++ b/quacker/macondobackend.h
@@ -0,0 +1,48 @@
+#ifndef MACONDO_BACKEND_H_
+#define MACONDO_BACKEND_H_
+
+#include <QObject>
+#include <QProcess>
+
+namespace Quackle {
+ class Game;
+}
+
+enum class MacondoCommand {
+ None,
+ Simulate,
+ Solve,
+};
+
+class MacondoBackend: public QObject {
+Q_OBJECT
+public:
+ struct InitOptions {
+ inline InitOptions(std::string execPath) {
+ this->execPath = execPath;
+ }
+ std::string execPath;
+ };
+ MacondoBackend(Quackle::Game *game, const InitOptions &);
+ struct SimulateOptions {
+ inline SimulateOptions() {}
+ };
+ void simulate(const SimulateOptions &);
+ ~MacondoBackend();
+ std::string getSimResults();
+ inline MacondoCommand command() const { return m_command; }
+protected slots:
+ void processStarted();
+ void processFinished(int, QProcess::ExitStatus);
+private:
+ void loadGCG();
+ void killProcess();
+ std::string m_execPath;
+ std::string m_tempGCG;
+ QProcess *m_process = nullptr;
+ bool m_runningSimulation = false;
+ Quackle::Game *m_game;
+ MacondoCommand m_command = MacondoCommand::None;
+};
+
+#endif