FuzzingOperations.h
48 lines
| 1.7 KiB
| text/x-c
|
CLexer
Alexandre Leroux
|
r1171 | #ifndef SCIQLOP_FUZZINGOPERATIONS_H | ||
#define SCIQLOP_FUZZINGOPERATIONS_H | ||||
#include "FuzzingDefs.h" | ||||
#include <memory> | ||||
#include <set> | ||||
#include <QLoggingCategory> | ||||
#include <QMetaType> | ||||
Q_DECLARE_LOGGING_CATEGORY(LOG_FuzzingOperations) | ||||
class VariableController; | ||||
/** | ||||
* Enumeration of types of existing fuzzing operations | ||||
*/ | ||||
Alexandre Leroux
|
r1192 | enum class FuzzingOperationType { CREATE, DELETE, PAN_LEFT, PAN_RIGHT, ZOOM_IN, ZOOM_OUT }; | ||
Alexandre Leroux
|
r1171 | |||
/// Interface that represents an operation that can be executed during a fuzzing test | ||||
struct IFuzzingOperation { | ||||
virtual ~IFuzzingOperation() noexcept = default; | ||||
Alexandre Leroux
|
r1188 | /// Checks if the operation can be executed according to the current variable state passed in | ||
/// parameter | ||||
virtual bool canExecute(const VariableState &variableState) const = 0; | ||||
/// Executes the operation on the variable state passed in parameter | ||||
/// @param variableState the variable state on which to execute the operation | ||||
Alexandre Leroux
|
r1171 | /// @param variableController the controller associated to the operation | ||
/// @param properties properties that can be used to configure the operation | ||||
Alexandre Leroux
|
r1188 | /// @remarks variableState is passed as a reference because, according to the operation, it can | ||
/// be | ||||
Alexandre Leroux
|
r1180 | /// modified (in/out parameter) | ||
Alexandre Leroux
|
r1188 | virtual void execute(VariableState &variableState, VariableController &variableController, | ||
Alexandre Leroux
|
r1180 | const Properties &properties = {}) const = 0; | ||
Alexandre Leroux
|
r1171 | }; | ||
/// Factory of @sa IFuzzingOperation | ||||
struct FuzzingOperationFactory { | ||||
/// Creates a fuzzing operation from a type | ||||
static std::unique_ptr<IFuzzingOperation> create(FuzzingOperationType type); | ||||
}; | ||||
Alexandre Leroux
|
r1183 | using WeightedOperationsTypes = std::map<FuzzingOperationType, double>; | ||
Q_DECLARE_METATYPE(WeightedOperationsTypes) | ||||
Alexandre Leroux
|
r1171 | |||
#endif // SCIQLOP_FUZZINGOPERATIONS_H | ||||