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/>.
29 const Score BEST_SCORE
= 127;
30 const Score KILLERS_SCORE
= 0;
32 const int MOVES_STATE_SIZE
= 5;
33 enum MovesState
: unsigned char {
34 BEST
, GOOD_CAPTURES
, KILLERS
, BAD_CAPTURES
, QUIET_MOVES
, UNDEF_MOVES
40 ExtendedMove list
[MAX_PLY
][MAX_BF
];
47 for (int i
= 0; i
< MAX_PLY
; ++i
) {
48 for (int j
= 0; j
< MAX_BF
; ++j
) {
49 list
[i
][j
] = ExtendedMove();
62 ExtendedMove
& operator[] (unsigned char i
) {
70 static Score mvv_lva_scores
[NB_PIECE_TYPES
][NB_PIECE_TYPES
];
73 const Position
& current_position
;
77 unsigned char size
[MOVES_STATE_SIZE
]; // Moves types counters
79 MovesState generation_state
;
80 bool use_lazy_generation
;
83 Moves(const Board
& b
, const Pieces
& ps
, const Position
& cn
,
84 MoveList
& ml
, bool lg
= true) :
85 moves(ml
), current_position(cn
), board(b
), pieces(ps
),
87 generation_state(BEST
),
88 use_lazy_generation(lg
)
90 moves
.inc_ply(); // Increment move list internal counter
91 for (int j
= 0; j
< MOVES_STATE_SIZE
; ++j
) size
[j
] = 0;
95 moves
.dec_ply(); // Decrement move list internal counter
98 void generate(MoveType mt
= NULL_MOVE
); // here NULL_MOVE => ALL_MOVE
99 void generate_pieces(Color c
, PieceType t
, MoveType mt
);
100 void add(Move m
, MovesState mt
= UNDEF_MOVES
);
102 MovesState
state() const {
103 return generation_state
;
106 static void init_mvv_lva_scores();
107 Score
get_mvv_lva_score(Move m
);
115 #endif /* !MOVES_H */