#include "a_structure.h"
//-----------------------------------------------------------------------------------
/* +
 * задаем функции по работе с fen протоколом
 *
 * АВТОР ChessTerminator75
 * ПОСЛЕДНЕЕ ИЗМЕНЕНИЕ 22.02.2009   11.11.2009
*/
//-----------------------------------------------------------------------------------

/*******************************************
класс FEN

разбираем фен - строку и инициализируем внутреннюю доску 

инициализирующая позицию строка может быть трех видов 
"position startpos" просто начальная позиция
"position startpos moves b1c3 b8c6 g1f3 g8f6" начальная позиция + ходы ведущие к текущей 
"position fen 1k1r4/8/8/8/8/8/8/3R2K1 w - - 0 1 " задание позиции через фен представление

доска реализована в структуре T_Bitboard которая находится в файле a_structure.h

в результате работы класса мы получаем внутреннюю позицию соответствующую позиции
закодированной в фен - представлении

********************************************/

class FEN {

// с помощью этой маски пишем и стираем фигуры из битового массива
static const unsigned __int64 move_masks_f[];

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

//---------------------------------------------------------------------------
// разбираем входящую фен - позицию
void parse_position(struct T_Bitboard * p_bitboard,// доска
					char string_in[]//входящая строка(65536)
                    );

//---------------------------------------------------------------------------
//	по букве выдает индекс клетки	
// a-0 b-1 c-2 d-3 e-4 f-5 g-6 h-7 иначе 777 :)
 int Koordinata_To_Indeks(char ch);

//---------------------------------------------------------------------------
//	по символу цифры выдает цифру
// откровенно говоря сегодня я знаю как можно обойтись без этой функции :)
// '1'-0 '2'-1 '3'-2 '4'-3 '5'-4 '6'-5 '7'-6 '8'-7 иначе 777 :)
 int Ch_Koordinata_To_Indeks(int ch);


//////////////////////////////////////////////////////////////////////////////////////////
private:

//---------------------------------------------------------------------------
// разбираем строку фен и инициализируем доску
void fen_to_board(struct T_Bitboard * p_bitboard,// доска
				  const char fen[]//строка содержащая фен позицию(длинна переменная)
                  );

//---------------------------------------------------------------------------
// загоняем в движок мувики т.е. ходы приводящие к текущей позиции из начальной
void move_to_board(struct T_Bitboard * p_bitboard,// доска
				   char move_string[]// строка содержащая ходы(7)
                   );

};//class FEN

