X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fmaterial.cpp;h=845519bc41648cedd2a7933564d4307b5ceafffa;hp=9195880af4ccf5ffadd1abba7a226567007013b0;hb=03f524c591c90120302e127cd0c1adba4c498806;hpb=3ed603cd64624d27de3f3f6e8f4e5dfccaaed420 diff --git a/src/material.cpp b/src/material.cpp index 9195880a..845519bc 100644 --- a/src/material.cpp +++ b/src/material.cpp @@ -1,7 +1,7 @@ /* Stockfish, a UCI chess playing engine derived from Glaurung 2.1 Copyright (C) 2004-2008 Tord Romstad (Glaurung author) - Copyright (C) 2008 Marco Costalba + Copyright (C) 2008-2009 Marco Costalba Stockfish is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -23,12 +23,12 @@ //// #include -#include #include #include #include "material.h" +using std::string; //// //// Local definitions @@ -36,6 +36,7 @@ namespace { + // Values modified by Joona Kiiski const Value BishopPairMidgameBonus = Value(109); const Value BishopPairEndgameBonus = Value(97); @@ -59,9 +60,9 @@ public: EndgameScalingFunctionBase* getESF(Key key, Color* c) const; private: - void add(const std::string& keyCode, EndgameEvaluationFunctionBase* f); - void add(const std::string& keyCode, Color c, EndgameScalingFunctionBase* f); - Key buildKey(const std::string& keyCode); + void add(const string& keyCode, EndgameEvaluationFunctionBase* f); + void add(const string& keyCode, Color c, EndgameScalingFunctionBase* f); + Key buildKey(const string& keyCode); struct ScalingInfo { @@ -90,9 +91,8 @@ MaterialInfoTable::MaterialInfoTable(unsigned int numOfEntries) { { std::cerr << "Failed to allocate " << (numOfEntries * sizeof(MaterialInfo)) << " bytes for material hash table." << std::endl; - exit(EXIT_FAILURE); + Application::exit_with_failure(); } - clear(); } @@ -100,17 +100,8 @@ MaterialInfoTable::MaterialInfoTable(unsigned int numOfEntries) { MaterialInfoTable::~MaterialInfoTable() { - delete [] entries; delete funcs; -} - - -/// MaterialInfoTable::clear() clears a material hash table by setting -/// all entries to 0. - -void MaterialInfoTable::clear() { - - memset(entries, 0, size * sizeof(MaterialInfo)); + delete [] entries; } @@ -152,14 +143,14 @@ MaterialInfo* MaterialInfoTable::get_material_info(const Position& pos) { else if ( pos.non_pawn_material(BLACK) == Value(0) && pos.piece_count(BLACK, PAWN) == 0 - && pos.non_pawn_material(WHITE) >= RookValueEndgame) + && pos.non_pawn_material(WHITE) >= RookValueMidgame) { mi->evaluationFunction = &EvaluateKXK; return mi; } else if ( pos.non_pawn_material(WHITE) == Value(0) && pos.piece_count(WHITE, PAWN) == 0 - && pos.non_pawn_material(BLACK) >= RookValueEndgame) + && pos.non_pawn_material(BLACK) >= RookValueMidgame) { mi->evaluationFunction = &EvaluateKKX; return mi; @@ -342,6 +333,8 @@ EndgameFunctions::EndgameFunctions() { add("KRKRP", BLACK, &ScaleKRKRP); add("KBPKB", WHITE, &ScaleKBPKB); add("KBKBP", BLACK, &ScaleKBKBP); + add("KBPPKB", WHITE, &ScaleKBPPKB); + add("KBKBPP", BLACK, &ScaleKBKBPP); add("KBPKN", WHITE, &ScaleKBPKN); add("KNKBP", BLACK, &ScaleKNKBP); add("KRPPKRP", WHITE, &ScaleKRPPKRP); @@ -350,7 +343,7 @@ EndgameFunctions::EndgameFunctions() { add("KRPKRPP", BLACK, &ScaleKRPKRPP); } -Key EndgameFunctions::buildKey(const std::string& keyCode) { +Key EndgameFunctions::buildKey(const string& keyCode) { assert(keyCode.length() > 0 && keyCode[0] == 'K'); assert(keyCode.length() < 8); @@ -371,12 +364,12 @@ Key EndgameFunctions::buildKey(const std::string& keyCode) { return Position(s.str()).get_material_key(); } -void EndgameFunctions::add(const std::string& keyCode, EndgameEvaluationFunctionBase* f) { +void EndgameFunctions::add(const string& keyCode, EndgameEvaluationFunctionBase* f) { EEFmap.insert(std::pair(buildKey(keyCode), f)); } -void EndgameFunctions::add(const std::string& keyCode, Color c, EndgameScalingFunctionBase* f) { +void EndgameFunctions::add(const string& keyCode, Color c, EndgameScalingFunctionBase* f) { ScalingInfo s = {c, f}; ESFmap.insert(std::pair(buildKey(keyCode), s));