Subversion Repositories Games.Chess Giants

Rev

Rev 169 | Go to most recent revision | Details | 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
5
  Copyright (C) 2015-2016 Marco Costalba, Joona Kiiski, Gary Linscott, Tord Romstad
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
 
24
#include "types.h"
25
 
26
class Position;
27
 
28
enum GenType {
29
  CAPTURES,
30
  QUIETS,
31
  QUIET_CHECKS,
32
  EVASIONS,
33
  NON_EVASIONS,
34
  LEGAL
35
};
36
 
37
struct ExtMove {
38
  Move move;
39
  Value value;
40
 
41
  operator Move() const { return move; }
42
  void operator=(Move m) { move = m; }
43
};
44
 
45
inline bool operator<(const ExtMove& f, const ExtMove& s) {
46
  return f.value < s.value;
47
}
48
 
49
template<GenType>
50
ExtMove* generate(const Position& pos, ExtMove* moveList);
51
 
52
/// The MoveList struct is a simple wrapper around generate(). It sometimes comes
53
/// in handy to use this class instead of the low level generate() function.
54
template<GenType T>
55
struct MoveList {
56
 
57
  explicit MoveList(const Position& pos) : last(generate<T>(pos, moveList)) {}
58
  const ExtMove* begin() const { return moveList; }
59
  const ExtMove* end() const { return last; }
60
  size_t size() const { return last - moveList; }
61
  bool contains(Move move) const {
62
    for (const auto& m : *this) if (m == move) return true;
63
    return false;
64
  }
65
 
66
private:
67
  ExtMove moveList[MAX_MOVES], *last;
68
};
69
 
70
#endif // #ifndef MOVEGEN_H_INCLUDED