/*****************************************************************//**
 * \file   ColGenIterationInfo.h
 * \brief  Stores the information about what happens in an iteration of cutting in node solving
 *
 * \author talmefta
 * \date   November 2022
 *********************************************************************/
#ifndef COLGENITERATIONINFO_H
#define COLGENITERATIONINFO_H

#include "Header.h"

 /**
  * \class ColGenIterationInfo.
  */
class ColGenIterationInfo {

protected:

	string name_psp_algorithm;
	int col_gen_iteration;
	double dual_bound;
	double rmp_value;
	double total_time;
	double solving_rmp_time;
	double solving_psp_time;
	bool is_solution_integer_before;
	bool is_solution_integer_after;
	int number_columns_before;
	int number_columns_added;

public:
	ColGenIterationInfo() : col_gen_iteration(), dual_bound(), rmp_value(),
		total_time(), is_solution_integer_after(false), number_columns_before(), number_columns_added(),
		name_psp_algorithm(), solving_rmp_time(), solving_psp_time(), is_solution_integer_before(false) {
	}

	~ColGenIterationInfo() {
	}

	string& get_name_psp_algorithm() {
		return this->name_psp_algorithm;
	}

	int& get_col_gen_iteration() {
		return this->col_gen_iteration;
	}

	double& get_dual_bound() {
		return this->dual_bound;
	}

	double& get_rmp_value() {
		return this->rmp_value;
	}

	double& get_total_time() {
		return this->total_time;
	}

	double& get_solving_rmp_time() {
		return this->solving_rmp_time;
	}
	
	double& get_solving_psp_time() {
		return this->solving_psp_time;
	}

	bool& get_is_solution_integer_after() {
		return this->is_solution_integer_after;
	}

	bool& get_is_solution_integer_before() {
		return this->is_solution_integer_before;
	}

	int& get_number_columns_before() {
		return this->number_columns_before;
	}

	int& get_number_columns_added() {
		return this->number_columns_added;
	}


	void set_name_psp_algorithm(const string& new_value) {
		this->name_psp_algorithm = new_value;
	}

	void set_col_gen_iteration(const int& new_value) {
		this->col_gen_iteration = new_value;
	}


	void set_dual_bound(const double& new_value) {
		this->dual_bound = new_value;
	}

	void set_rmp_value(const double& new_value) {
		this->rmp_value = new_value;
	}

	void set_total_time(const double& new_value) {
		this->total_time = new_value;
	}

	void set_solving_rmp_time(const double& new_value) {
		this->solving_rmp_time = new_value;
	}

	void set_solving_psp_time(const double& new_value) {
		this->solving_psp_time = new_value;
	}

	void set_is_solution_integer_after(const bool& new_value) {
		this->is_solution_integer_after = new_value;
	}

	void set_is_solution_integer_before(const bool& new_value) {
		this->is_solution_integer_before = new_value;
	}

	void set_number_columns_before(const int& new_value) { 
		this->number_columns_before = new_value;
	}

	void set_number_columns_added(const int& new_value) {
		this->number_columns_added = new_value;
	}

};

#endif //COLGENITERATIONINFO_H