Esempio n. 1
0
U64 hash_key(const board_t *board) {

	ASSERT(board != nullptr);

	// init
	U64 key = 0;

	// pieces
	for (S8 colour = 0; colour < ColourNb; ++colour) {
		for (auto sq = board->piece[colour].begin(); sq != board->piece[colour].end(); ++sq) {
			const S32 piece = board->square[*sq];
			key ^= hash_piece_key(piece, *sq);
		}

		for (auto sq = board->pawn[colour].begin(); sq != board->pawn[colour].end(); ++sq) {
			const S32 piece = board->square[*sq];
			key ^= hash_piece_key(piece, *sq);
		}
	}

	// castle flags
	key ^= hash_castle_key(board->flags);

	// en-passant square
	const S32 sq = board->ep_square;
	if (sq != SquareNone) key ^= hash_ep_key(sq);

	// turn
	key ^= hash_turn_key(board->turn);

	return key;
}
Esempio n. 2
0
uint64 hash_key( board_t *board )
{

	uint64 key;
    int sq, piece;
	int index;

	ASSERT(board != NULL);

	// init

	key = 0;

	// pieces
	for (index = 1; index <= 32; ++index)
	{		
		sq = board->piece[index];
		if (sq != SquareNone)
		{
            piece= INDEX_TO_PIECE(index);
			key ^= hash_piece_key(piece, SQUARE_TO_90(sq));
		}
		
	}

	// turn
	key ^= hash_turn_key(board->turn);

	return key;
}
Esempio n. 3
0
uint64 hash_key(const board_t * board) {

   uint64 key;
   int colour;
   const sq_t * ptr;
   int sq, piece;

   ASSERT(board!=NULL);

   // init

   key = 0;

   // pieces

   for (colour = 0; colour < ColourNb; colour++) {

      for (ptr = &board->piece[colour][0]; (sq=*ptr) != SquareNone; ptr++) {
         piece = board->square[sq];
         key ^= hash_piece_key(piece,sq);
      }

      for (ptr = &board->pawn[colour][0]; (sq=*ptr) != SquareNone; ptr++) {
         piece = board->square[sq];
         key ^= hash_piece_key(piece,sq);
      }
   }

   // castle flags

   key ^= hash_castle_key(board->flags);

   // en-passant square

   sq = board->ep_square;
   if (sq != SquareNone) key ^= hash_ep_key(sq);

   // turn

   key ^= hash_turn_key(board->turn);

   return key;
}
Esempio n. 4
0
U64 hash_pawn_key(const board_t *board) {

	ASSERT(board != nullptr);

	// init
	U64 key = 0;

	// pawns
	for (S8 colour = 0; colour < ColourNb; ++colour) {
		for (auto sq = board->pawn[colour].begin(); sq != board->pawn[colour].end(); ++sq) {
			const S32 piece = board->square[*sq];
			key ^= hash_piece_key(piece, *sq);
		}
	}

	return key;
}
Esempio n. 5
0
uint64 hash_pawn_key(const board_t * board) {

   uint64 key;
   int colour;
   const sq_t * ptr;
   int sq, piece;

   ASSERT(board!=NULL);

   // init

   key = 0;

   // pawns

   for (colour = 0; colour < ColourNb; colour++) {
      for (ptr = &board->pawn[colour][0]; (sq=*ptr) != SquareNone; ptr++) {
         piece = board->square[sq];
         key ^= hash_piece_key(piece,sq);
      }
   }

   return key;
}