-// Remaining Score operators are standard
-inline Score operator+ (const Score d1, const Score d2) { return Score(int(d1) + int(d2)); }
-inline Score operator- (const Score d1, const Score d2) { return Score(int(d1) - int(d2)); }
-inline Score operator* (int i, const Score d) { return Score(i * int(d)); }
-inline Score operator* (const Score d, int i) { return Score(int(d) * i); }
-inline Score operator- (const Score d) { return Score(-int(d)); }
-inline void operator+= (Score& d1, const Score d2) { d1 = d1 + d2; }
-inline void operator-= (Score& d1, const Score d2) { d1 = d1 - d2; }
-inline void operator*= (Score& d, int i) { d = Score(int(d) * i); }
-inline void operator/= (Score& d, int i) { d = Score(int(d) / i); }
-
-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);
-
-extern const Value PieceValueMidgame[17];
-extern const Value PieceValueEndgame[17];
-extern int SquareDistance[64][64];
+inline bool operator<(const MoveStack& f, const MoveStack& s) {
+ return f.score < s.score;
+}
+
+inline Color operator~(Color c) {
+ return Color(c ^ 1);
+}
+
+inline Square operator~(Square s) {
+ return Square(s ^ 56); // Vertical flip SQ_A1 -> SQ_A8
+}
+
+inline Square operator|(File f, Rank r) {
+ return Square((r << 3) | f);
+}