From 80bee85d5f48cc1e06f16236a73c86a14c1d0756 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Wed, 18 Aug 2010 15:58:22 +0100 Subject: [PATCH] Use templetize enum operations for Depth Instead of hardcoded ones. No functional change. Signed-off-by: Marco Costalba --- src/depth.h | 14 -------------- src/evaluate.cpp | 4 ++-- src/types.h | 25 +++++++++++++++++++++++++ 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/depth.h b/src/depth.h index 35430bc5..ab88f652 100644 --- a/src/depth.h +++ b/src/depth.h @@ -34,18 +34,4 @@ enum Depth { }; -//// -//// Inline functions -//// - -inline void operator+= (Depth &d1, Depth d2) { d1 = Depth(int(d1) + int(d2)); } -inline void operator*= (Depth &d, int i) { d = Depth(int(d) * i); } -inline void operator/= (Depth &d, int i) { d = Depth(int(d) / i); } - -inline Depth operator+ (Depth d1, Depth d2) { return Depth(int(d1) + int(d2)); } -inline Depth operator- (Depth d1, Depth d2) { return Depth(int(d1) - int(d2)); } -inline Depth operator* (int i, Depth d) { return Depth(int(d) * i); } -inline Depth operator/ (Depth d, int i) { return Depth(int(d) / i); } - - #endif // !defined(DEPTH_H_INCLUDED) diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 74e70fa2..f6a2ed0d 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -1075,9 +1075,9 @@ namespace { Value eg = eg_value(v); ScaleFactor f = sf[eg > Value(0) ? WHITE : BLACK]; - Value ev = Value((eg * f) / SCALE_FACTOR_NORMAL); + Value ev = Value((eg * int(f)) / SCALE_FACTOR_NORMAL); - int result = (mg_value(v) * ph + ev * (128 - ph)) / 128; + int result = (mg_value(v) * int(ph) + ev * int(128 - ph)) / 128; return Value(result & ~(GrainSize - 1)); } diff --git a/src/types.h b/src/types.h index 0c12d930..4931531b 100644 --- a/src/types.h +++ b/src/types.h @@ -109,4 +109,29 @@ inline void __cpuid(int CPUInfo[4], int) } #endif + +// Templetized enum operations, we avoid to repeat the same inlines for each +// different enum. + +template +inline T operator+ (const T d1, const T d2) { return T(int(d1) + int(d2)); } + +template +inline T operator- (const T d1, const T d2) { return T(int(d1) - int(d2)); } + +template +inline T operator* (int i, const T d) { return T(int(d) * i); } + +template +inline T operator/ (const T d, int i) { return T(int(d) / i); } + +template +inline void operator+= (T& d1, const T d2) { d1 = d1 + d2; } + +template +inline void operator*= (T& d, int i) { d = T(int(d) * i); } + +template +inline void operator/= (T &d, int i) { d = T(int(d) / i); } + #endif // !defined(TYPES_H_INCLUDED) -- 2.39.2