X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Ftypes.h;h=40a2baa0099e2da6ac006cc6bc6b86c225169374;hp=4c8c813408993a33706d4eab4aaf1b0c1d3f8587;hb=764d3f44b68c01eeb9e7759e75aebe18488322c1;hpb=3dccdf5b835b9856bcf869fbad90ae4914a2813c diff --git a/src/types.h b/src/types.h index 4c8c8134..40a2baa0 100644 --- a/src/types.h +++ b/src/types.h @@ -35,44 +35,11 @@ /// | only in 64-bit mode. For compiling requires hardware with /// | popcnt support. +#include #include #include -#if defined(_MSC_VER) - -// Disable some silly and noisy warning from MSVC compiler -#pragma warning(disable: 4127) // Conditional expression is constant -#pragma warning(disable: 4146) // Unary minus operator applied to unsigned type -#pragma warning(disable: 4800) // Forcing value to bool 'true' or 'false' -#pragma warning(disable: 4996) // Function _ftime() may be unsafe - -// MSVC does not support -typedef signed __int8 int8_t; -typedef unsigned __int8 uint8_t; -typedef signed __int16 int16_t; -typedef unsigned __int16 uint16_t; -typedef signed __int32 int32_t; -typedef unsigned __int32 uint32_t; -typedef signed __int64 int64_t; -typedef unsigned __int64 uint64_t; - -#else -# include -#endif - -#if defined(_WIN32) || defined(_WIN64) -# include -typedef _timeb sys_time_t; - -inline void system_time(sys_time_t* t) { _ftime(t); } -inline uint64_t time_to_msec(const sys_time_t& t) { return t.time * 1000LL + t.millitm; } -#else -# include -typedef timeval sys_time_t; - -inline void system_time(sys_time_t* t) { gettimeofday(t, NULL); } -inline uint64_t time_to_msec(const sys_time_t& t) { return t.tv_sec * 1000LL + t.tv_usec / 1000; } -#endif +#include "platform.h" #if defined(_WIN64) # include // MSVC popcnt and bsfq instrinsics @@ -113,8 +80,8 @@ const bool Is64Bit = false; typedef uint64_t Key; typedef uint64_t Bitboard; -const int MAX_MOVES = 256; -const int MAX_PLY = 256; +const int MAX_MOVES = 192; +const int MAX_PLY = 100; const int MAX_PLY_PLUS_2 = MAX_PLY + 2; const Bitboard FileABB = 0x0101010101010101ULL; @@ -161,15 +128,20 @@ inline bool operator<(const MoveStack& f, const MoveStack& s) { return f.score < s.score; } -enum CastleRight { +enum CastleRight { // Defined as in PolyGlot book hash key CASTLES_NONE = 0, WHITE_OO = 1, - BLACK_OO = 2, - WHITE_OOO = 4, + WHITE_OOO = 2, + BLACK_OO = 4, BLACK_OOO = 8, ALL_CASTLES = 15 }; +enum CastlingSide { + KING_SIDE, + QUEEN_SIDE +}; + enum ScaleFactor { SCALE_FACTOR_DRAW = 0, SCALE_FACTOR_NORMAL = 64, @@ -200,7 +172,7 @@ enum Value { }; enum PieceType { - NO_PIECE_TYPE = 0, + NO_PIECE_TYPE = 0, ALL_PIECES = 0, PAWN = 1, KNIGHT = 2, BISHOP = 3, ROOK = 4, QUEEN = 5, KING = 6 }; @@ -331,31 +303,36 @@ inline Score operator/(Score s, int i) { return make_score(mg_value(s) / i, eg_value(s) / i); } +/// Weight score v by score w trying to prevent overflow +inline Score apply_weight(Score v, Score w) { + return make_score((int(mg_value(v)) * mg_value(w)) / 0x100, + (int(eg_value(v)) * eg_value(w)) / 0x100); +} + #undef ENABLE_OPERATORS_ON #undef ENABLE_SAFE_OPERATORS_ON -const Value PawnValueMidgame = Value(0x0C6); -const Value PawnValueEndgame = Value(0x102); -const Value KnightValueMidgame = Value(0x331); -const Value KnightValueEndgame = Value(0x34E); -const Value BishopValueMidgame = Value(0x344); -const Value BishopValueEndgame = Value(0x359); -const Value RookValueMidgame = Value(0x4F6); -const Value RookValueEndgame = Value(0x4FE); -const Value QueenValueMidgame = Value(0x9D9); -const Value QueenValueEndgame = Value(0x9FE); +const Value PawnValueMidgame = Value(198); +const Value PawnValueEndgame = Value(258); +const Value KnightValueMidgame = Value(817); +const Value KnightValueEndgame = Value(846); +const Value BishopValueMidgame = Value(836); +const Value BishopValueEndgame = Value(857); +const Value RookValueMidgame = Value(1270); +const Value RookValueEndgame = Value(1278); +const Value QueenValueMidgame = Value(2521); +const Value QueenValueEndgame = Value(2558); extern const Value PieceValueMidgame[17]; // Indexed by Piece or PieceType extern const Value PieceValueEndgame[17]; extern int SquareDistance[64][64]; -extern uint8_t BitCount8Bit[256]; inline Color operator~(Color c) { return Color(c ^ 1); } inline Square operator~(Square s) { - return Square(s ^ 56); + return Square(s ^ 56); // Vertical flip SQ_A1 -> SQ_A8 } inline Value mate_in(int ply) { @@ -370,6 +347,10 @@ inline Piece make_piece(Color c, PieceType pt) { return Piece((c << 3) | pt); } +inline CastleRight make_castle_right(Color c, CastlingSide s) { + return CastleRight(WHITE_OO << ((s == QUEEN_SIDE) + 2 * c)); +} + inline PieceType type_of(Piece p) { return PieceType(p & 7); } @@ -382,7 +363,7 @@ inline Square make_square(File f, Rank r) { return Square((r << 3) | f); } -inline bool square_is_ok(Square s) { +inline bool is_ok(Square s) { return s >= SQ_A1 && s <= SQ_H8; } @@ -395,7 +376,7 @@ inline Rank rank_of(Square s) { } inline Square mirror(Square s) { - return Square(s ^ 7); + return Square(s ^ 7); // Horizontal flip SQ_A1 -> SQ_H1 } inline Square relative_square(Color c, Square s) { @@ -411,7 +392,7 @@ inline Rank relative_rank(Color c, Square s) { } inline bool opposite_colors(Square s1, Square s2) { - int s = s1 ^ s2; + int s = int(s1) ^ int(s2); return ((s >> 3) ^ s) & 1; }