Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
official-stockfish
GitHub Repository: official-stockfish/Stockfish
Path: blob/master/src/movegen.h
376 views
1
/*
2
Stockfish, a UCI chess playing engine derived from Glaurung 2.1
3
Copyright (C) 2004-2025 The Stockfish developers (see AUTHORS file)
4
5
Stockfish is free software: you can redistribute it and/or modify
6
it under the terms of the GNU General Public License as published by
7
the Free Software Foundation, either version 3 of the License, or
8
(at your option) any later version.
9
10
Stockfish is distributed in the hope that it will be useful,
11
but WITHOUT ANY WARRANTY; without even the implied warranty of
12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
GNU General Public License for more details.
14
15
You should have received a copy of the GNU General Public License
16
along with this program. If not, see <http://www.gnu.org/licenses/>.
17
*/
18
19
#ifndef MOVEGEN_H_INCLUDED
20
#define MOVEGEN_H_INCLUDED
21
22
#include <algorithm> // IWYU pragma: keep
23
#include <cstddef>
24
25
#include "types.h"
26
27
namespace Stockfish {
28
29
class Position;
30
31
enum GenType {
32
CAPTURES,
33
QUIETS,
34
EVASIONS,
35
NON_EVASIONS,
36
LEGAL
37
};
38
39
struct ExtMove: public Move {
40
int value;
41
42
void operator=(Move m) { data = m.raw(); }
43
44
// Inhibit unwanted implicit conversions to Move
45
// with an ambiguity that yields to a compile error.
46
operator float() const = delete;
47
};
48
49
inline bool operator<(const ExtMove& f, const ExtMove& s) { return f.value < s.value; }
50
51
template<GenType>
52
Move* generate(const Position& pos, Move* moveList);
53
54
// The MoveList struct wraps the generate() function and returns a convenient
55
// list of moves. Using MoveList is sometimes preferable to directly calling
56
// the lower level generate() function.
57
template<GenType T>
58
struct MoveList {
59
60
explicit MoveList(const Position& pos) :
61
last(generate<T>(pos, moveList)) {}
62
const Move* begin() const { return moveList; }
63
const Move* end() const { return last; }
64
size_t size() const { return last - moveList; }
65
bool contains(Move move) const { return std::find(begin(), end(), move) != end(); }
66
67
private:
68
Move moveList[MAX_MOVES], *last;
69
};
70
71
} // namespace Stockfish
72
73
#endif // #ifndef MOVEGEN_H_INCLUDED
74
75