#ifndef SCIQLOP_FUZZINGOPERATIONS_H #define SCIQLOP_FUZZINGOPERATIONS_H #include "FuzzingDefs.h" #include #include #include #include Q_DECLARE_LOGGING_CATEGORY(LOG_FuzzingOperations) class Variable; class VariableController; /** * Enumeration of types of existing fuzzing operations */ enum class FuzzingOperationType { CREATE }; /// Interface that represents an operation that can be executed during a fuzzing test struct IFuzzingOperation { virtual ~IFuzzingOperation() noexcept = default; /// Checks if the operation can be executed according to the current state of the variable passed in parameter virtual bool canExecute(std::shared_ptr variable) const = 0; /// Executes the operation on the variable passed in parameter /// @param variable the variable on which to execute the operation /// @param variableController the controller associated to the operation /// @param properties properties that can be used to configure the operation /// @remarks variable is passed as a reference because, according to the operation, it can be modified (in/out parameter) virtual void execute(std::shared_ptr &variable, VariableController& variableController, const Properties& properties = {}) const = 0; }; /// Factory of @sa IFuzzingOperation struct FuzzingOperationFactory { /// Creates a fuzzing operation from a type static std::unique_ptr create(FuzzingOperationType type); }; using OperationsTypes = std::set; Q_DECLARE_METATYPE(OperationsTypes) #endif // SCIQLOP_FUZZINGOPERATIONS_H