14
const int WhitePawnFlag = 1 << 2;
15
const int BlackPawnFlag = 1 << 3;
16
const int KnightFlag = 1 << 4;
17
const int BishopFlag = 1 << 5;
18
const int RookFlag = 1 << 6;
19
const int KingFlag = 1 << 7;
21
const int PawnFlags = WhitePawnFlag | BlackPawnFlag;
22
const int QueenFlags = BishopFlag | RookFlag;
24
const int PieceNone64 = 0;
25
const int WhitePawn64 = WhitePawnFlag;
26
const int BlackPawn64 = BlackPawnFlag;
27
const int Knight64 = KnightFlag;
28
const int Bishop64 = BishopFlag;
29
const int Rook64 = RookFlag;
30
const int Queen64 = QueenFlags;
31
const int King64 = KingFlag;
33
const int PieceNone256 = 0;
34
const int WhitePawn256 = WhitePawn64 | WhiteFlag;
35
const int BlackPawn256 = BlackPawn64 | BlackFlag;
36
const int WhiteKnight256 = Knight64 | WhiteFlag;
37
const int BlackKnight256 = Knight64 | BlackFlag;
38
const int WhiteBishop256 = Bishop64 | WhiteFlag;
39
const int BlackBishop256 = Bishop64 | BlackFlag;
40
const int WhiteRook256 = Rook64 | WhiteFlag;
41
const int BlackRook256 = Rook64 | BlackFlag;
42
const int WhiteQueen256 = Queen64 | WhiteFlag;
43
const int BlackQueen256 = Queen64 | BlackFlag;
44
const int WhiteKing256 = King64 | WhiteFlag;
45
const int BlackKing256 = King64 | BlackFlag;
46
const int PieceNb = 256;
48
const int WhitePawn12 = 0;
49
const int BlackPawn12 = 1;
50
const int WhiteKnight12 = 2;
51
const int BlackKnight12 = 3;
52
const int WhiteBishop12 = 4;
53
const int BlackBishop12 = 5;
54
const int WhiteRook12 = 6;
55
const int BlackRook12 = 7;
56
const int WhiteQueen12 = 8;
57
const int BlackQueen12 = 9;
58
const int WhiteKing12 = 10;
59
const int BlackKing12 = 11;
63
#define PAWN_MAKE(colour) (PawnMake[colour])
64
#define PAWN_OPP(pawn) ((pawn)^(WhitePawn256^BlackPawn256))
66
#define PIECE_COLOUR(piece) (((piece)&3)-1)
67
#define PIECE_TYPE(piece) ((piece)&~3)
69
#define PIECE_IS_PAWN(piece) (((piece)&PawnFlags)!=0)
70
#define PIECE_IS_KNIGHT(piece) (((piece)&KnightFlag)!=0)
71
#define PIECE_IS_BISHOP(piece) (((piece)&QueenFlags)==BishopFlag)
72
#define PIECE_IS_ROOK(piece) (((piece)&QueenFlags)==RookFlag)
73
#define PIECE_IS_QUEEN(piece) (((piece)&QueenFlags)==QueenFlags)
74
#define PIECE_IS_KING(piece) (((piece)&KingFlag)!=0)
75
#define PIECE_IS_SLIDER(piece) (((piece)&QueenFlags)!=0)
77
#define PIECE_TO_12(piece) (PieceTo12[piece])
79
#define PIECE_ORDER(piece) (PieceOrder[piece])
81
#define PAWN_MOVE_INC(colour) (PawnMoveInc[colour])
82
#define PIECE_INC(piece) (PieceInc[piece])
90
extern const int PawnMake[ColourNb];
91
extern const int PieceFrom12[12];
93
extern const inc_t PawnMoveInc[ColourNb];
95
extern const inc_t KnightInc[8+1];
96
extern const inc_t BishopInc[4+1];
97
extern const inc_t RookInc[4+1];
98
extern const inc_t QueenInc[8+1];
99
extern const inc_t KingInc[8+1];
103
extern int PieceTo12[PieceNb];
104
extern int PieceOrder[PieceNb];
106
extern const inc_t * PieceInc[PieceNb];
110
extern void piece_init ();
112
extern bool piece_is_ok (int piece);
114
extern int piece_from_12 (int piece_12);
116
extern int piece_to_char (int piece);
117
extern int piece_from_char (int c);
119
#endif // !defined PIECE_H