Subversion Repositories Games.Chess Giants

Rev

Rev 169 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
96 pmbaty 1
/*
2
  Stockfish, a UCI chess playing engine derived from Glaurung 2.1
3
  Copyright (C) 2004-2008 Tord Romstad (Glaurung author)
4
  Copyright (C) 2008-2015 Marco Costalba, Joona Kiiski, Tord Romstad
185 pmbaty 5
  Copyright (C) 2015-2019 Marco Costalba, Joona Kiiski, Gary Linscott, Tord Romstad
96 pmbaty 6
 
7
  Stockfish is free software: you can redistribute it and/or modify
8
  it under the terms of the GNU General Public License as published by
9
  the Free Software Foundation, either version 3 of the License, or
10
  (at your option) any later version.
11
 
12
  Stockfish is distributed in the hope that it will be useful,
13
  but WITHOUT ANY WARRANTY; without even the implied warranty of
14
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
  GNU General Public License for more details.
16
 
17
  You should have received a copy of the GNU General Public License
18
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
*/
20
 
21
#ifndef MOVEGEN_H_INCLUDED
22
#define MOVEGEN_H_INCLUDED
23
 
169 pmbaty 24
#include <algorithm>
25
 
96 pmbaty 26
#include "types.h"
27
 
28
class Position;
29
 
30
enum GenType {
31
  CAPTURES,
32
  QUIETS,
33
  QUIET_CHECKS,
34
  EVASIONS,
35
  NON_EVASIONS,
36
  LEGAL
37
};
38
 
39
struct ExtMove {
40
  Move move;
169 pmbaty 41
  int value;
96 pmbaty 42
 
43
  operator Move() const { return move; }
44
  void operator=(Move m) { move = m; }
169 pmbaty 45
 
46
  // Inhibit unwanted implicit conversions to Move
47
  // with an ambiguity that yields to a compile error.
48
  operator float() const = delete;
96 pmbaty 49
};
50
 
51
inline bool operator<(const ExtMove& f, const ExtMove& s) {
52
  return f.value < s.value;
53
}
54
 
55
template<GenType>
56
ExtMove* generate(const Position& pos, ExtMove* moveList);
57
 
58
/// The MoveList struct is a simple wrapper around generate(). It sometimes comes
59
/// in handy to use this class instead of the low level generate() function.
60
template<GenType T>
61
struct MoveList {
62
 
63
  explicit MoveList(const Position& pos) : last(generate<T>(pos, moveList)) {}
64
  const ExtMove* begin() const { return moveList; }
65
  const ExtMove* end() const { return last; }
66
  size_t size() const { return last - moveList; }
67
  bool contains(Move move) const {
169 pmbaty 68
    return std::find(begin(), end(), move) != end();
96 pmbaty 69
  }
70
 
71
private:
72
  ExtMove moveList[MAX_MOVES], *last;
73
};
74
 
75
#endif // #ifndef MOVEGEN_H_INCLUDED