X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fvalue.h;h=4f19cdaa554b64f29a2d9c820dd1e2c77012f632;hp=03ae24b7832770fa19128c5dc8e609bd230ec2d9;hb=12aeac5e148ff842ed80a62db6c7a6c6c99a92ed;hpb=ef6fca98a0b70b82ba701e6969a80cd9daf78705 diff --git a/src/value.h b/src/value.h index 03ae24b7..4f19cdaa 100644 --- a/src/value.h +++ b/src/value.h @@ -55,7 +55,7 @@ enum Value { /// Score struct keeps a midgame and an endgame value in a single /// ScoreValue 64 bit union. -enum Score; +enum Score {}; inline Value eg_value(Score s) { return Value(int16_t(s & 0xffff)); } inline Value mg_value(Score s) { return Value((int(s) + 32768) >> 16); } @@ -68,20 +68,14 @@ inline Score operator-(Score s1, Score s2) { return Score(int(s1) - int(s2)); } inline void operator+=(Score& s1, Score s2) { s1 = Score(int(s1) + int(s2)); } inline void operator-=(Score& s1, Score s2) { s1 = Score(int(s1) - int(s2)); } inline Score operator*(int i, Score s) { return Score(i * int(s)); } -inline Score operator/(Score s, int i) { return Score(int(s) / i); } + +// Division must be handled separately for each term +inline Score operator/(Score s, int i) { return make_score(mg_value(s) / i, eg_value(s) / i); } // Only declared but not defined. We don't want to multiply two scores due to // a very high risk of overflow. So user should explicitly convert to integer. inline Score operator*(Score s1, Score s2); -// Following are only declared to prevent erroneus instantations -inline Score operator*(Score s, int i); -inline Score operator/(Score s1, Score s2); -inline Score operator+(Score s, int i); -inline Score operator+(int i, Score s); -inline Score operator-(Score s, int i); -inline Score operator-(int i, Score s); - //// //// Constants and variables