typedef uint64_t Key;
typedef uint64_t Bitboard;
-const int MAX_MOVES = 256;
-const int MAX_PLY = 120;
-const int MAX_PLY_PLUS_6 = MAX_PLY + 6;
+const int MAX_MOVES = 256;
+const int MAX_PLY = 128;
/// A move needs 16 bits to be stored
///
enum Depth {
- ONE_PLY = 2,
+ ONE_PLY = 1,
- DEPTH_ZERO = 0 * ONE_PLY,
- DEPTH_QS_CHECKS = 0 * ONE_PLY,
- DEPTH_QS_NO_CHECKS = -1 * ONE_PLY,
- DEPTH_QS_RECAPTURES = -5 * ONE_PLY,
+ DEPTH_ZERO = 0,
+ DEPTH_QS_CHECKS = 0,
+ DEPTH_QS_NO_CHECKS = -1,
+ DEPTH_QS_RECAPTURES = -5,
- DEPTH_NONE = -127 * ONE_PLY
+ DEPTH_NONE = -6
};
enum Square {
SCORE_ENSURE_INTEGER_SIZE_N = INT_MIN
};
-typedef union {
- uint32_t full;
- struct { int16_t eg, mg; } half;
-} ScoreView;
-
-inline Score make_score(int mg, int eg) {
- ScoreView v;
- v.half.mg = (int16_t)(mg - (uint16_t(eg) >> 15));
- v.half.eg = (int16_t)eg;
- return Score(v.full);
-}
+inline Score make_score(int mg, int eg) { return Score((mg << 16) + eg); }
+/// Extracting the signed lower and upper 16 bits is not so trivial because
+/// according to the standard a simple cast to short is implementation defined
+/// and so is a right shift of a signed integer.
inline Value mg_value(Score s) {
- ScoreView v;
- v.full = s;
- return Value(v.half.mg + (uint16_t(v.half.eg) >> 15));
+ return Value(((s + 0x8000) & ~0xffff) / 0x10000);
}
inline Value eg_value(Score s) {
- ScoreView v;
- v.full = s;
- return Value(v.half.eg);
+ return Value((int)(unsigned(s) & 0x7FFFU) - (int)(unsigned(s) & 0x8000U));
}
#define ENABLE_BASE_OPERATORS_ON(T) \
return ((s >> 3) ^ s) & 1;
}
-inline char to_char(File f, bool tolower = true) {
- return char(f - FILE_A + (tolower ? 'a' : 'A'));
-}
-
-inline char to_char(Rank r) {
- return char(r - RANK_1 + '1');
-}
-
inline Square pawn_push(Color c) {
return c == WHITE ? DELTA_N : DELTA_S;
}
return from_sq(m) != to_sq(m); // Catches also MOVE_NULL and MOVE_NONE
}
-#include <string>
-
-inline const std::string to_string(Square s) {
- char ch[] = { to_char(file_of(s)), to_char(rank_of(s)), 0 };
- return ch;
-}
-
#endif // #ifndef TYPES_H_INCLUDED