#ifndef CHOOSEGENERATORS_H #define CHOOSEGENERATORS_H #include "ui_choosegenerators.h" #include #include #include "Bitmap.h" #include #include #include #include #include #include #include #include #include class Almond; namespace Ui { class ChooseGenerators; } class Benchmarker : public QObject, public QRunnable { Q_OBJECT private: mnd::MandelContext& mndContext; mnd::MandelGenerator& generator; int row; float percentage; static const std::vector benches; public: inline Benchmarker(mnd::MandelContext& mndContext, mnd::MandelGenerator& generator, int row, float percentage) : mndContext{ mndContext }, generator{ generator }, row{ row }, percentage{ percentage } { } virtual ~Benchmarker(void) override; static mnd::MandelViewport benchViewport(void); std::pair measureMips(const std::function*()>& bench) const; double benchmarkResult(mnd::MandelGenerator& mg) const; void run(void) override; signals: void finished(int row, float percentage, double mips); }; class ChooseGenerators : public QDialog { Q_OBJECT private: Almond& owner; Ui::ChooseGenerators* sadfgsdfg; std::unique_ptr ui; mnd::MandelContext& mndCtxt; std::map generators; std::vector> tableContent; mnd::MandelGenerator* chosenGenerator; std::vector actualGenerators; mnd::AdaptiveGenerator& generator; std::vector allGenerators; std::unique_ptr floatValidator; QThreadPool benchmarker; public: ChooseGenerators(mnd::MandelContext& mndCtxt, mnd::AdaptiveGenerator& generator, std::vector allGenerators, Almond& owner); ~ChooseGenerators(); inline mnd::MandelGenerator* getChosenGenerator(void) { return chosenGenerator; } private: QComboBox* createComboBox(void); QLineEdit* createFloatText(void); public slots: private slots: void setBenchmarkResult(int row, float percentage, double mips); void on_buttonBox_accepted(); void on_run_clicked(); void on_generatorTable_cellDoubleClicked(int row, int column); void on_compile_clicked(); void on_benchmark_clicked(); }; #endif // CHOOSEGENERATORS_H