/* See COPYING.txt for the full license governing this code. */
/**
 * \file SDL_visualtest_exhaustive_variator.h
 *
 * Header for the exhaustive variator.
 */

#include "SDL_visualtest_harness_argparser.h"
#include "SDL_visualtest_variator_common.h"

#ifndef _SDL_visualtest_exhaustive_variator_h
#define _SDL_visualtest_exhaustive_variator_h

/* Set up for C function definitions, even when using C++ */
#ifdef __cplusplus
extern "C" {
#endif

/**
 * Struct for the variator that exhaustively iterates through all variations of
 * command line arguments to the SUT.
 */
typedef struct SDLVisualTest_ExhaustiveVariator
{
    /*! The current variation. */
    SDLVisualTest_Variation variation;
    /*! Configuration object for the SUT that the variator is running for. */
    SDLVisualTest_SUTConfig config;
    /*! Buffer to store the arguments string built from the variation */
    char buffer[MAX_SUT_ARGS_LEN];
} SDLVisualTest_ExhaustiveVariator;

/**
 * Initializes the variator.
 *
 * \return 1 on success, 0 on failure
 */
int SDLVisualTest_InitExhaustiveVariator(SDLVisualTest_ExhaustiveVariator* variator,
                                         SDLVisualTest_SUTConfig* config);

/**
 * Gets the arguments string for the next variation using the variator and updates
 * the variator's current variation object to the next variation.
 *
 * \return The arguments string representing the next variation on success, and
 *         NULL on failure or if we have iterated through all possible variations.
 *         In the latter case subsequent calls will start the variations again from
 *         the very beginning. The pointer returned should not be freed.
 */
char* SDLVisualTest_GetNextExhaustiveVariation(SDLVisualTest_ExhaustiveVariator* variator);

/**
 * Frees any resources associated with the variator.
 */
void SDLVisualTest_FreeExhaustiveVariator(SDLVisualTest_ExhaustiveVariator* variator);

/* Ends C function definitions when using C++ */
#ifdef __cplusplus
}
#endif

#endif /* _SDL_visualtest_exhaustive_variator_h */