/**
* @author Michael Krebs (AMVALOR)
* @date 25.01.2017
* @version 1
*/
#ifndef LVOX3_GENERICCOMPUTE_H
#define LVOX3_GENERICCOMPUTE_H
#include "tools/worker/lvox3_worker.h"
#include "tools/3dgrid/abstract/lvox3_abstractgrid3d.h"
#include "tools/lvox3_genericconfiguration.h"
#include "muParser.h"
/**
* @brief Use a parser, a formula and multiple input grids to compute the output grid
*/
class LVOX3_GenericCompute : public LVOX3_Worker
{
Q_OBJECT
public:
struct Input {
char gridLetterInFormula;
LVOX3_AbstractGrid3D* grid;
};
/**
* @brief Create a worker that will use the formula to compute the output grid
* @param inputs : list of input grid
* @param formula : formula to use
* @param output : output grid
*/
LVOX3_GenericCompute(const QList& inputs,
const QList& checksFormula,
const std::string& finalFormula,
LVOX3_AbstractGrid3D* output);
~LVOX3_GenericCompute();
protected:
/**
* @brief Do the job
*/
void doTheJob();
private:
struct InternalInput {
int indexInVariables;
LVOX3_AbstractGrid3D* grid;
};
QVector m_inputs;
QVector m_checksErrorParsers;
std::string m_finalFormula;
LVOX3_AbstractGrid3D* m_output;
QVector m_checksParsers;
mu::Parser m_finalParser;
QVector m_variables;
double m_outputVariable;
void initParser(mu::Parser& parser, const std::string &formula);
};
#endif // LVOX3_GENERICCOMPUTE_H