X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmaterial.cpp;h=7ad5dc47e891b57a4d9717ee1a793dba3bb8d3a2;hb=25b4d0c127af9fe564f7a797460bed4c2837bcc2;hp=f5001c99baef8743d9efa777af7268a9be936e5a;hpb=b5d5646c840d63710552fdaf2521a054dd3b8a18;p=stockfish diff --git a/src/material.cpp b/src/material.cpp index f5001c99..7ad5dc47 100644 --- a/src/material.cpp +++ b/src/material.cpp @@ -31,7 +31,7 @@ namespace { const Value EndgameLimit = Value(3998); // Scale factors used when one side has no more pawns - const uint8_t NoPawnsSF[4] = { 6, 12, 32 }; + const int NoPawnsSF[4] = { 6, 12, 32 }; // Polynomial material balance parameters const Value RedundantQueenPenalty = Value(320); @@ -49,13 +49,13 @@ namespace { // Endgame evaluation and scaling functions accessed direcly and not through // the function maps because correspond to more then one material hash key. - Endgame EvaluateKmmKm[] = { Endgame(WHITE), Endgame(BLACK) }; - Endgame EvaluateKXK[] = { Endgame(WHITE), Endgame(BLACK) }; + Endgame EvaluateKmmKm[] = { Endgame(WHITE), Endgame(BLACK) }; + Endgame EvaluateKXK[] = { Endgame(WHITE), Endgame(BLACK) }; - Endgame ScaleKBPsK[] = { Endgame(WHITE), Endgame(BLACK) }; - Endgame ScaleKQKRPs[] = { Endgame(WHITE), Endgame(BLACK) }; - Endgame ScaleKPsK[] = { Endgame(WHITE), Endgame(BLACK) }; - Endgame ScaleKPKP[] = { Endgame(WHITE), Endgame(BLACK) }; + Endgame ScaleKBPsK[] = { Endgame(WHITE), Endgame(BLACK) }; + Endgame ScaleKQKRPs[] = { Endgame(WHITE), Endgame(BLACK) }; + Endgame ScaleKPsK[] = { Endgame(WHITE), Endgame(BLACK) }; + Endgame ScaleKPKP[] = { Endgame(WHITE), Endgame(BLACK) }; // Helper templates used to detect a given material distribution template bool is_KXK(const Position& pos) { @@ -85,7 +85,7 @@ namespace { /// MaterialInfoTable c'tor and d'tor allocate and free the space for Endgames -MaterialInfoTable::MaterialInfoTable() { funcs = new Endgames(); } +void MaterialInfoTable::init() { Base::init(); if (!funcs) funcs = new Endgames(); } MaterialInfoTable::~MaterialInfoTable() { delete funcs; } @@ -98,7 +98,7 @@ MaterialInfoTable::~MaterialInfoTable() { delete funcs; } MaterialInfo* MaterialInfoTable::get_material_info(const Position& pos) const { Key key = pos.get_material_key(); - MaterialInfo* mi = find(key); + MaterialInfo* mi = probe(key); // If mi->key matches the position's material hash key, it means that we // have analysed this material configuration before, and we can simply @@ -117,7 +117,7 @@ MaterialInfo* MaterialInfoTable::get_material_info(const Position& pos) const { // Let's look if we have a specialized evaluation function for this // particular material configuration. First we look for a fixed // configuration one, then a generic one if previous search failed. - if ((mi->evaluationFunction = funcs->get >(key)) != NULL) + if ((mi->evaluationFunction = funcs->get(key)) != NULL) return mi; if (is_KXK(pos)) @@ -154,7 +154,7 @@ MaterialInfo* MaterialInfoTable::get_material_info(const Position& pos) const { // scaling functions and we need to decide which one to use. EndgameBase* sf; - if ((sf = funcs->get >(key)) != NULL) + if ((sf = funcs->get(key)) != NULL) { mi->scalingFunction[sf->color()] = sf; return mi; @@ -202,13 +202,13 @@ MaterialInfo* MaterialInfoTable::get_material_info(const Position& pos) const { // No pawns makes it difficult to win, even with a material advantage if (pos.piece_count(WHITE, PAWN) == 0 && npm_w - npm_b <= BishopValueMidgame) { - mi->factor[WHITE] = + mi->factor[WHITE] = uint8_t (npm_w == npm_b || npm_w < RookValueMidgame ? 0 : NoPawnsSF[Min(pos.piece_count(WHITE, BISHOP), 2)]); } if (pos.piece_count(BLACK, PAWN) == 0 && npm_b - npm_w <= BishopValueMidgame) { - mi->factor[BLACK] = + mi->factor[BLACK] = uint8_t (npm_w == npm_b || npm_b < RookValueMidgame ? 0 : NoPawnsSF[Min(pos.piece_count(BLACK, BISHOP), 2)]); } @@ -230,7 +230,7 @@ MaterialInfo* MaterialInfoTable::get_material_info(const Position& pos) const { { pos.piece_count(BLACK, BISHOP) > 1, pos.piece_count(BLACK, PAWN), pos.piece_count(BLACK, KNIGHT), pos.piece_count(BLACK, BISHOP) , pos.piece_count(BLACK, ROOK), pos.piece_count(BLACK, QUEEN) } }; - mi->value = (int16_t)(imbalance(pieceCount) - imbalance(pieceCount)) / 16; + mi->value = int16_t((imbalance(pieceCount) - imbalance(pieceCount)) / 16); return mi; }