#include <vector>

/**
  This function calculates arithmetic mean, geometric mean and harmonic mean of an integer vector.
  Uses openMP parallelization.
  @param[in]    numbers      vector containing integers
  @param[out]   am           arithmetic mean
  @param[out]   gm           geometric mean
  @param[out]   hm           harmonic mean
*/
void means_omp(const std::vector<size_t> numbers, double &am, double &gm, double &hm);


/**
  This function calculates the minimum and maximum of a vector.
  Uses openMP parallelization.
  @param[in]    numbers         vector containing integers
  @param[out]   global_min      minimum
  @param[out]   global_max      maximum
*/
void minmax_omp(const std::vector<size_t> numbers, size_t &global_min, size_t &global_max);


/**
  This function calculates arithmetic mean, geometric mean and harmonic mean of an integer vector.
  Uses C++ parallelization.
  @param[in]    numbers      vector containing integers
  @param[out]   am           arithmetic mean
  @param[out]   gm           geometric mean
  @param[out]   hm           harmonic mean
*/
void means_cpp(const std::vector<size_t> numbers, double &am, double &gm, double &hm);


/**
  This function calculates the minimum and maximum of a vector.
  Uses C++ parallelization.
  @param[in]    numbers         vector containing integers
  @param[out]   global_min      minimum
  @param[out]   global_max      maximum
*/
void minmax_cpp(const std::vector<size_t> numbers, size_t &global_min, size_t &global_max);