enum Value {
+ VALUE_ZERO = 0,
VALUE_DRAW = 0,
VALUE_KNOWN_WIN = 15000,
VALUE_MATE = 30000,
VALUE_ENSURE_SIGNED = -1
};
+ENABLE_OPERATORS_ON(Value);
+
enum ScaleFactor {
SCALE_FACTOR_ZERO = 0,
// Compiler is free to choose the enum type as long as can keep
// its data, so ensure Score to be an integer type.
-enum Score { ENSURE_32_BITS_SIZE_P = (1 << 16), ENSURE_32_BITS_SIZE_N = -(1 << 16)};
+enum Score {
+ SCORE_ZERO = 0,
+ SCORE_ENSURE_32_BITS_SIZE_P = (1 << 16),
+ SCORE_ENSURE_32_BITS_SIZE_N = -(1 << 16)
+};
+
+ENABLE_OPERATORS_ON(Score);
+
// Extracting the _signed_ lower and upper 16 bits it not so trivial
// because according to the standard a simple cast to short is
const Value QueenValueEndgame = Value(0x9FE);
const Value PieceValueMidgame[17] = {
- Value(0),
+ VALUE_ZERO,
PawnValueMidgame, KnightValueMidgame, BishopValueMidgame,
RookValueMidgame, QueenValueMidgame,
- Value(0), Value(0), Value(0),
+ VALUE_ZERO, VALUE_ZERO, VALUE_ZERO,
PawnValueMidgame, KnightValueMidgame, BishopValueMidgame,
RookValueMidgame, QueenValueMidgame,
- Value(0), Value(0), Value(0)
+ VALUE_ZERO, VALUE_ZERO, VALUE_ZERO
};
const Value PieceValueEndgame[17] = {
- Value(0),
+ VALUE_ZERO,
PawnValueEndgame, KnightValueEndgame, BishopValueEndgame,
RookValueEndgame, QueenValueEndgame,
- Value(0), Value(0), Value(0),
+ VALUE_ZERO, VALUE_ZERO, VALUE_ZERO,
PawnValueEndgame, KnightValueEndgame, BishopValueEndgame,
RookValueEndgame, QueenValueEndgame,
- Value(0), Value(0), Value(0)
+ VALUE_ZERO, VALUE_ZERO, VALUE_ZERO
};
/// Bonus for having the side to move (modified by Joona Kiiski)
return -VALUE_MATE + ply;
}
-inline bool is_upper_bound(ValueType vt) {
- return (int(vt) & int(VALUE_TYPE_UPPER)) != 0;
-}
-
-inline bool is_lower_bound(ValueType vt) {
- return (int(vt) & int(VALUE_TYPE_LOWER)) != 0;
-}
-
-inline Value piece_value_midgame(PieceType pt) {
- return PieceValueMidgame[pt];
-}
-
-inline Value piece_value_endgame(PieceType pt) {
- return PieceValueEndgame[pt];
-}
-
-inline Value piece_value_midgame(Piece p) {
- return PieceValueMidgame[p];
-}
-
-inline Value piece_value_endgame(Piece p) {
- return PieceValueEndgame[p];
-}
-
#endif // !defined(VALUE_H_INCLUDED)