version 1.4.63b
[polyglot.git] / board.h
1
2 // board.h
3
4 #ifndef BOARD_H
5 #define BOARD_H
6
7 // includes
8
9 #include "colour.h"
10 #include "square.h"
11 #include "util.h"
12
13 // defines
14
15 #define Empty  0
16 #define SideH  0
17 #define SideA  1
18 #define SideNb 2
19
20 // types
21
22 typedef struct {
23
24    uint8 square[SquareNb];
25    sint8 pos[SquareNb];
26
27    uint8 list[ColourNb][32];
28    sint8 list_size[ColourNb];
29
30    sint8 number[12];
31
32    sint8 turn;
33    uint8 castle[ColourNb][SideNb];
34    uint8 ep_square;
35
36    sint16 ply_nb;
37    sint16 move_nb;
38
39    uint64 key;
40 } board_t;
41
42 // functions
43
44 extern bool board_is_ok        (const board_t * board);
45
46 extern void board_clear        (board_t * board);
47 extern void board_start        (board_t * board);
48
49 extern void board_copy         (board_t * dst, const board_t * src);
50 extern bool board_equal        (const board_t * board_1, const board_t * board_2);
51
52 extern void board_init_list    (board_t * board);
53
54 extern int  board_flags        (const board_t * board);
55
56 extern bool board_can_play     (const board_t * board);
57 extern int  board_mobility     (const board_t * board);
58
59 extern bool board_is_check     (const board_t * board);
60 extern bool board_is_mate      (const board_t * board);
61 extern bool board_is_stalemate (const board_t * board);
62
63 extern int  king_pos           (const board_t * board, int colour);
64
65 extern void board_disp         (const board_t * board);
66
67 #endif // !defined BOARD_H
68
69 // end of board.h
70