Convert MaterialInfo and PawnInfo to use Score
authorMarco Costalba <mcostalba@gmail.com>
Sat, 7 Nov 2009 13:05:55 +0000 (14:05 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Sat, 7 Nov 2009 13:17:10 +0000 (14:17 +0100)
No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/evaluate.cpp
src/material.h
src/pawns.h
src/position.cpp

index 0b4ffd5..e84cf44 100644 (file)
@@ -320,6 +320,7 @@ namespace {
   void evaluate_trapped_bishop_a7h7(const Position& pos, Square s, Color us, EvalInfo& ei);
   void evaluate_trapped_bishop_a1h1(const Position& pos, Square s, Color us, EvalInfo& ei);
   inline Value apply_weight(Value v, int w);
+  inline Score apply_weight(Score v, int wmg, int weg);
   Value scale_by_game_phase(const Score& v, Phase ph, const ScaleFactor sf[]);
   int weight_option(const std::string& opt, int weight);
   void init_safety();
@@ -356,7 +357,7 @@ Value do_evaluate(const Position& pos, EvalInfo& ei, int threadID) {
 
   // Probe the material hash table
   ei.mi = MaterialTable[threadID]->get_material_info(pos);
-  ei.value += Score(ei.mi->material_value(), ei.mi->material_value());
+  ei.value += ei.mi->material_value();
 
   // If we have a specialized evaluation function for the current material
   // configuration, call it and return
@@ -370,8 +371,7 @@ Value do_evaluate(const Position& pos, EvalInfo& ei, int threadID) {
 
   // Probe the pawn hash table
   ei.pi = PawnTable[threadID]->get_pawn_info(pos);
-  ei.value += Score(apply_weight(ei.pi->mg_value(), WeightPawnStructureMidgame),
-                    apply_weight(ei.pi->eg_value(), WeightPawnStructureEndgame));
+  ei.value += apply_weight(ei.pi->value(), WeightPawnStructureMidgame, WeightPawnStructureEndgame);
 
   // Initialize king attack bitboards and king attack zones for both sides
   ei.attackedBy[WHITE][KING] = pos.attacks_from<KING>(pos.king_square(WHITE));
@@ -436,8 +436,7 @@ Value do_evaluate(const Position& pos, EvalInfo& ei, int threadID) {
   }
 
   // Mobility
-  ei.value += Score(apply_weight(ei.mgMobility, WeightMobilityMidgame),
-                    apply_weight(ei.egMobility, WeightMobilityEndgame));
+  ei.value += apply_weight(Score(ei.mgMobility, ei.egMobility), WeightMobilityMidgame, WeightMobilityEndgame);
 
   // If we don't already have an unusual scale factor, check for opposite
   // colored bishop endgames, and use a lower scale for those
@@ -789,7 +788,7 @@ namespace {
     if (relative_rank(Us, s) <= RANK_4)
     {
         shelter = ei.pi->get_king_shelter(pos, Us, s);
-        ei.value += Score(Sign[Us] * Value(shelter), 0);
+        ei.value += Sign[Us] * Score(shelter, 0);
     }
 
     // King safety. This is quite complicated, and is almost certainly far
@@ -938,7 +937,7 @@ namespace {
       // change far bigger than the value of the captured piece.
       Value v = apply_weight(SafetyTable[attackUnits], WeightKingSafety[Us]);
 
-      ei.value -= Score(Sign[Us] * v, 0);
+      ei.value -= Sign[Us] * Score(v, 0);
 
       if (Us == pos.side_to_move())
           ei.futilityMargin += v;
@@ -1240,6 +1239,10 @@ namespace {
     return (v*w) / 0x100;
   }
 
+  inline Score apply_weight(Score v, int wmg, int weg) {
+      return Score(v.mg()*wmg, v.eg()*weg) / 0x100;
+  }
+
 
   // scale_by_game_phase() interpolates between a middle game and an endgame
   // score, based on game phase.  It also scales the return value by a
index 8f9f375..0c58296 100644 (file)
@@ -51,7 +51,7 @@ class MaterialInfo {
 public:
   MaterialInfo() : key(0) { clear(); }
 
-  Value material_value() const;
+  Score material_value() const;
   ScaleFactor scale_factor(const Position& pos, Color c) const;
   int space_weight() const;
   bool specialized_eval_exists() const;
@@ -95,9 +95,9 @@ private:
 /// MaterialInfo::material_value simply returns the material balance
 /// evaluation that is independent from game phase.
 
-inline Value MaterialInfo::material_value() const {
+inline Score MaterialInfo::material_value() const {
 
-  return Value(value);
+  return Score(value, value);
 }
 
 
index afb456c..557580e 100644 (file)
@@ -47,8 +47,7 @@ class PawnInfo {
 public:
   PawnInfo() { clear(); }
 
-  Value mg_value() const;
-  Value eg_value() const;
+  Score value() const;
   Value kingside_storm_value(Color c) const;
   Value queenside_storm_value(Color c) const;
   Bitboard pawn_attacks(Color c) const;
@@ -99,12 +98,8 @@ private:
 //// Inline functions
 ////
 
-inline Value PawnInfo::mg_value() const {
-  return Value(mgValue);
-}
-
-inline Value PawnInfo::eg_value() const {
-  return Value(egValue);
+inline Score PawnInfo::value() const {
+  return Score(mgValue, egValue);
 }
 
 inline Bitboard PawnInfo::passed_pawns() const {
index c43cde7..b6c0a52 100644 (file)
@@ -721,7 +721,7 @@ void Position::do_move(Move m, StateInfo& newSt, Bitboard dcCandidates) {
     Key key, pawnKey, materialKey;
     int castleRights, rule50, pliesFromNull;
     Square epSquare;
-    Value mgValue, egValue;
+    Value value;
     Value npMaterial[2];
   };