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/>.
31 Hash material_zobrist_hash
;
34 std::bitset
<4> castle_rights
;
35 std::bitset
<2> castle
;
37 unsigned char halfmove_counter
;
46 null_move_right(true),
53 Hash
& material_hash() {
54 return material_zobrist_hash
;
56 Color
get_turn_color() const {
60 side_to_move
= !side_to_move
;
62 unsigned short get_ply() const {
65 void set_ply(unsigned short i
) {
74 unsigned char get_halfmove() const {
75 return halfmove_counter
;
77 void set_halfmove(unsigned char i
) {
83 void reset_halfmove() {
86 Square
get_en_passant() const {
89 void set_en_passant(Square ep
) {
92 Piece
get_capture() const {
95 void set_capture(Piece p
) {
98 bool can_castle(Color c
, PieceType t
) const {
99 return castle_rights
[2 * c
+ t
- QUEEN
];
101 void set_castle_right(Color c
, PieceType t
, bool b
= true) {
102 castle_rights
.set(2 * c
+ t
- QUEEN
, b
);
104 bool has_castle(Color c
) const {
107 void set_has_castle(Color c
, bool b
= true) {
110 bool get_null_move_right() const {
111 return null_move_right
;
113 void set_null_move_right(bool b
) {