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


///!
#include "a_Header_constants.h"
#include "a_Position.h"




/// Не знаю насколько правильно я реализовал delta pruning.
/// Идея такая, что если оценка меньше альфы на полторы пешки, то взятием пешки 
/// ситуацию не исправить и такие взятия можно исключить.  То же и для других фигур.


class n_Delta_pruning
{

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

	/// используем для delta pruning
	/// запоминаем фигуры до резки
	unsigned __int64 all_black_or_white_piece;


/// доступ к полям класса
//////////////////////////////////////////////////////////////////////////////////////
public:

	/// используем для delta pruning
	inline unsigned __int64 get_all_black_or_white_piece()
	{
		return all_black_or_white_piece;
	};


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

	///---------------------------------------------------------------------------
	///
	void delta_pruning_remember_piese_white
	(
		struct Position & position/// представление доски
	);

	///---------------------------------------------------------------------------
	///
	void delta_pruning_white
	(
		struct Position & position,/// представление доски
		const __int32 alpha,///
		__int32 & value_stat /// статическая оценка
	);

	//---------------------------------------------------------------------------
	//
	void delta_pruning_return_piese_white
	(
		struct Position & position/// представление доски
	);


	//---------------------------------------------------------------------------
	//
	void delta_pruning_remember_piese_black
	(
		struct Position & position/// представление доски
	);


	//---------------------------------------------------------------------------
	//
	void delta_pruning_black
	(
		struct Position & position,/// представление доски
		const __int32 beta,///
		__int32 & value_stat /// статическая оценка
	);

	//---------------------------------------------------------------------------
	//
	void delta_pruning_return_piese_black
	(
		struct Position & position/// представление доски
	);
};