
/// АВТОР Бренкман Андрей (Brenkman Andrey)
/// ПОСЛЕДНЕЕ ИЗМЕНЕНИЕ 27.02.2009
/// УРОВЕНЬ МОЕГО ДОВЕРИЯ 70%


///!
#include "Header_constants.h"
#include "List.h"
#include "PV_line.h"

/// линия главного варианта

namespace PV_save
{

/// поля класса
//////////////////////////////////////////////////////////////////////////////////////
//private:

//////////////////////////////////////////////////////////////////////////////////////
//public:

	///---------------------------------------------------------------------------
	/// возвращаем лучший вариант
	struct PV_line & get_pv_best();

	///---------------------------------------------------------------------------
	/// возвращаем текущий вариант
	struct PV_line & get_pv_current();

	///---------------------------------------------------------------------------
	/// обновляем линию лучшего варианта в узле
	void update_PV_best_point
	(
		struct PV_line & PV_best_point/// лучший вариант найденный в узле
	);

	///---------------------------------------------------------------------------
	/// обновляем линию лучшего варианта
	void update_PV_best
	(
		const struct PV_line & PV_best_point/// лучший вариант найденный в узле
	);

	///---------------------------------------------------------------------------
	/// обновляем линию лучшего варианта на максимальной глубине
	void update_PV_best_max_depth
	(
		const __int32 & score,/// оценка позиции в конце варианта
		const unsigned __int8 & depth/// текущая глубина
	);

	///---------------------------------------------------------------------------
	/// записываем ход в текущий вариант
	void update_PV_current
	(
		const unsigned __int8 & i,/// номер хода в списке ходов
		const unsigned __int8 & depth,/// текущая глубина
		const struct List & list_surplus_moves///список возможных ходов
	);

	///---------------------------------------------------------------------------
	/// выводим ход который обдумываем
	void print_currmove
	(
		const struct List & list_surplus_moves,///список возможных ходов
		const unsigned __int8 nodes_0,/// количество ходов на нулевой глубине
		const unsigned __int8 i,/// номер хода по списку
		const unsigned __int8 Depth_Max/// максимальная глубина
	);

	///---------------------------------------------------------------------------
	/// выводим текущий вариант в оболочку
	void print_pv_line
	(
		const bool colour_move,/// цвет печатающей стороны
		const struct List & list_surplus_moves,///список возможных ходов
		const struct PV_line & PV_best_point,/// лучший вариант
		const __int64 print_nodes,/// количество узлов
		const unsigned __int8 i,/// номер хода в списке
		const unsigned __int8 Depth_Max,/// максимальная глубина
		const __int32 value,/// оценка позиции
		const bool all_line/// вывод всех линий
		//,const double time_nodes// время расчета варианта
	);


//////////////////////////////////////////////////////////////////////////////////////
//public:

	///-----------------------------------------------------------------
	/// функция встречалось в коде Анд чесс от 9.01.06 
	/// сохраню как историческую ценность :)) 
	/// конвертируем число фигуры в букву
	/// 0-нет фигуры, 1-пешка, 2-конь, 3-слон, 4-ладья, 5-ферзь, 6-король	
	__int8 int_to_char_board
	(
		const int i,/// код фигуры
		const int z/// цвет фигуры
	);

	///---------------------------------------------------------------------------
	///	по координате х доски выдаем букву нотации например 0 - 'а', 1 - 'b', ..., 7 - 'h'	
	__int8 x_to_notation
	(
		const int x/// горизонтальная координата доски (0-7)
	);

};
