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> castle
;
35 unsigned char halfmove_counter
;
43 null_move_right(true),
50 Hash
& material_hash() {
51 return material_zobrist_hash
;
53 Color
get_turn_color() const {
57 side_to_move
= !side_to_move
;
59 unsigned char get_halfmove() const {
60 return halfmove_counter
;
62 void set_halfmove(unsigned char i
) {
68 void reset_halfmove() {
71 Square
get_en_passant() const {
74 void set_en_passant(Square ep
) {
77 Piece
get_capture() const {
80 void set_capture(Piece p
) {
83 bool can_castle(Color c
, PieceType t
) const {
84 return castle_rights
[2 * c
+ t
- QUEEN
];
86 void set_castle_right(Color c
, PieceType t
, bool b
= true) {
87 castle_rights
.set(2 * c
+ t
- QUEEN
, b
);
89 bool has_castle(Color c
) const {
92 void set_has_castle(Color c
, bool b
= true) {
95 bool get_null_move_right() const {
96 return null_move_right
;
98 void set_null_move_right(bool b
) {