Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef USE_PCH
00025 #include "sys.h"
00026 #include "debug.h"
00027 #endif
00028
00029 #include "CastleFlags.h"
00030
00031 namespace cwchess {
00032
00033 void CastleFlags::piece_moved_from(Piece const& piece, Index const& from)
00034 {
00035 switch (piece.code()())
00036 {
00037 case (black_bits|rook_bits):
00038 if (from == ia8)
00039 M_bits |= black_rook_queen_side_moved;
00040 else if (from == ih8)
00041 M_bits |= black_rook_king_side_moved;
00042 break;
00043 case (black_bits|king_bits):
00044 M_bits |= black_king_moved;
00045 break;
00046 case (white_bits|rook_bits):
00047 if (from == ia1)
00048 M_bits |= white_rook_queen_side_moved;
00049 else if (from == ih1)
00050 M_bits |= white_rook_king_side_moved;
00051 break;
00052 case (white_bits|king_bits):
00053 M_bits |= white_king_moved;
00054 break;
00055 default:
00056 return;
00057 }
00058 }
00059
00060 bool CastleFlags::has_moved(Code const& code, Index const& index)
00061 {
00062 if (index == ia1 && code == white_rook)
00063 return M_bits & white_rook_queen_side_moved;
00064 else if (index == ie1 && code == white_king)
00065 return M_bits & white_king_moved;
00066 else if (index == ih1 && code == white_rook)
00067 return M_bits & white_rook_king_side_moved;
00068 else if (index == ia8 && code == black_rook)
00069 return M_bits & black_rook_queen_side_moved;
00070 else if (index == ie8 && code == black_king)
00071 return M_bits & black_king_moved;
00072 else if (index == ih8 && code == black_rook)
00073 return M_bits & black_rook_king_side_moved;
00074
00075 return false;
00076 }
00077
00078 }