#ifndef CHOOSEGENERATORS_H #define CHOOSEGENERATORS_H #include "ui_choosegenerators.h" #include #include "Bitmap.h" #include #include #include #include #include #include #include #include #include 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: Ui::ChooseGenerators* sadfgsdfg; std::unique_ptr ui; mnd::MandelContext& mndCtxt; std::map generators; std::vector> tableContent; std::unique_ptr floatValidator; std::unique_ptr createdGenerator; std::vector actualGenerators; QThreadPool benchmarker; public: ChooseGenerators(mnd::MandelContext& mndCtxt, QWidget* parent = nullptr); ~ChooseGenerators(); inline mnd::AdaptiveGenerator* getChosenGenerator(void) { return createdGenerator.get(); } 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); }; #endif // CHOOSEGENERATORS_H