#ifndef GENETIC_OPERATORS_H
#define GENETIC_OPERATORS_H

#include "../rand/randomc.h"
#include "individual.h"
#include "population_block.h"

#define DEFAULT_MUT_POINT -1
#define DEFAULT_CO_POINT -1
#define CO_TYPE_SINGLE_POINT 0
#define CO_TYPE_DOUBLE_POINT 1
#define CO_TYPE_UNIFORM 2

class genetic_operators {
  static int get_block_boundary(int, int, int);
public:
  static individual *mutate(individual *, RANDOM_GENERATOR *,
      int p_point = DEFAULT_MUT_POINT);

  static population_block *cross_over(char, individual *,
      individual *, RANDOM_GENERATOR *,
      int p_first = DEFAULT_CO_POINT,
      int p_second = DEFAULT_CO_POINT);
};

#endif /* GENETIC_OPERATORS_H */

