1 /* Copyright (C) 2007-2011 Vincent Ollivier
3 * Purple Haze is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * (at your option) any later version.
8 * Purple Haze is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
30 Hash material_zobrist_hash
;
32 std::bitset
<4> castle_rights
;
33 std::bitset
<2> castled
;
34 Square en_passant_square
;
35 unsigned char halfmove_counter
;
41 en_passant_square(OUT
),
43 null_move_right(true),
50 Hash
& material_hash() {
51 return material_zobrist_hash
;
57 side_to_move
= !side_to_move
;
59 unsigned char halfmove() const {
60 return halfmove_counter
;
62 void set_halfmove(unsigned char i
) {
68 void reset_halfmove() {
71 Square
en_passant() const {
72 return en_passant_square
;
74 void set_en_passant(Square ep
) {
75 en_passant_square
= ep
;
77 Piece
capture() const {
78 return captured_piece
;
80 void set_capture(Piece p
) {
83 bool can_null_move() const {
84 return null_move_right
;
86 void set_null_move_right(bool b
) {
89 bool can_castle(Color c
, PieceType t
) const {
90 return castle_rights
[2 * c
+ t
- QUEEN
];
92 void set_castle_right(Color c
, PieceType t
, bool b
= true) {
93 castle_rights
[2 * c
+ t
- QUEEN
] = b
;
95 bool has_castled(Color c
) const {
98 void set_has_castled(Color c
, bool b
= true) {