/*!
 * \file
 * \brief   Build configuration file.
 *
 * \author
 *    Christos Choutouridis AEM:8997
 *    <cchoutou@ece.auth.gr>
 */

#ifndef CONFIG_H_
#define CONFIG_H_

#include <cstdint>

/*
 * Defines for different version of the exercise
 */
#define  BITONIC        (1)
#define  BUBBLETONIC    (2)


// Fail-safe version selection
#if !defined CODE_VERSION
#define CODE_VERSION   BITONIC
#endif

// Default Data size (in case -q <N> is not present)
#define DEFAULT_DATA_SIZE (1 << 16)

/*!
 * Value type selection
 *
 * We support the following compiler types or the <cstdint> that translate to them:
 *  char       -  unsigned char
 *  short      -  unsigned short
 *  int        -  unsigned int
 *  long       -  unsigned long
 *  long long  -  unsigned long long
 *  float
 *  double
 */
using   distValue_t = uint32_t;

/*!
 * Session option for each invocation of the executable
 */
struct config_t {
    size_t  arraySize{DEFAULT_DATA_SIZE};   //!< The array size of the local data to sort.
    bool    validation{false};              //!< Request a full validation at the end, performed by process rank 0.
    bool    ndebug{false};                  //!< Skips debug trap on DEBUG builds.
    bool    perf{false};                    //!< Enable performance timing measurements and prints.
    bool    verbose{false};                 //!< Flag to enable verbose output to stdout.
};

/*
 * Exported data types
 */
extern config_t config;


#endif /* CONFIG_H_ */
