- /* 
-     Protector -- a UCI chess engine 
-   
-     Copyright (C) 2009-2010 Raimund Heid (Raimund_Heid@yahoo.com) 
-   
-     This program is free software: you can redistribute it and/or modify 
-     it under the terms of the GNU General Public License as published by 
-     the Free Software Foundation, either version 3 of the License, or 
-     (at your option) any later version. 
-   
-     This program is distributed in the hope that it will be useful, 
-     but WITHOUT ANY WARRANTY; without even the implied warranty of 
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
-     GNU General Public License for more details. 
-   
-     You should have received a copy of the GNU General Public License 
-     along with this program.  If not, see <http://www.gnu.org/licenses/>. 
-   
- */ 
-   
- #ifndef _evaluation_h_ 
- #define _evaluation_h_ 
-   
- #include "position.h" 
- #include "bitboard.h" 
- #include "keytable.h" 
- #include "io.h" 
-   
- #ifndef NDEBUG 
- extern bool debugEval; 
- #endif 
-   
- #define MATERIALINFO_TABLE_SIZE ( 648 * 648 ) 
- extern MaterialInfo materialInfo[MATERIALINFO_TABLE_SIZE]; 
- extern Bitboard companionFiles[_64_]; 
- extern Bitboard troitzkyArea[2]; 
- extern Bitboard pawnOpponents[2][_64_]; 
- extern Bitboard krprkDrawFiles; 
- extern Bitboard A1C1, F1H1, A1B1, G1H1; 
-   
- #define VALUE_TEMPO_OPENING 20 
- #define VALUE_TEMPO_ENDGAME 10 
- #define MIN_PIECE_WEIGHT_FOR_KING_ATTACK 14 
-   
- void addEvalBonusForColor(EvaluationBase * base, const Color color, 
-                           const INT32 bonus); 
- void addEvalMalusForColor(EvaluationBase * base, const Color color, 
-                           const INT32 bonus); 
- Color getWinningColor(const Position * position, const int value); 
- Bitboard getPromotablePawns(const Position * position, const Color color); 
- bool oppositeColoredBishops(const Position * position); 
- int getKnnkpChances(const Position * position, const Color color); 
- bool passiveKingStopsPawn(const Square kingSquare, 
-                           const Square pawnSquare, const Color pawnColor); 
- int getKrppkrChances(const Position * position, const Color color); 
- int getKrpkrChances(const Position * position, const Color color); 
- int getKqppkqChances(const Position * position, const Color color); 
- int getKqpkqChances(const Position * position, const Color color); 
- int getKpkChances(const Position * position, const Color color); 
- int getKbpkChances(const Position * position, const Color color); 
- int specialPositionChances(const Position * position, 
-                            const EvaluationBase * base, 
-                            const SpecialEvalType type, const Color color); 
- int getChances(const Position * position, const EvaluationBase * base, 
-                const Color winningColor); 
- bool hasBishopPair(const Position * position, const Color color); 
- int phaseValue(const INT32 value, const Position * position, 
-                EvaluationBase * base); 
- INT32 materialBalance(const Position * position); 
- INT32 positionalBalance(const Position * position, EvaluationBase * base); 
- int basicPositionalBalance(Position * position); 
- int getValue(const Position * position, 
-              EvaluationBase * base, 
-              PawnHashInfo * pawnHashtable, 
-              KingSafetyHashInfo * kingsafetyHashtable); 
- bool hasWinningPotential(Position * position, Color color); 
- Bitboard calculateKingPawnSafetyHashKey(const Position * position, 
-                                         const Color color); 
- int getPawnWidth(const Position * position, const Color color); 
- int getPassedPawnWidth(const Position * position, 
-                        const EvaluationBase * base, const Color color); 
- int getMaterialUpPawnCountWeight(int numPawns); 
-   
- /** 
-  * Calculate the value of the specified position. 
-  * 
-  * @return the value of the specified position 
-  */ 
- int getValue(const Position * position, 
-              EvaluationBase * base, 
-              PawnHashInfo * pawnHashtable, 
-              KingSafetyHashInfo * kingsafetyHashtable); 
-   
- /** 
-  * Check if the pawn at the specified square is a passed pawn. 
-  */ 
- bool pawnIsPassed(const Position * position, const Square pawnSquare, 
-                   const Color pawnColor); 
-   
- /** 
-  * Check if a pawn capture creates at least one passer. 
-  */ 
- bool captureCreatesPasser(Position * position, const Square captureSquare, 
-                           const Piece capturingPiece); 
-   
- /** 
-  * Reset the pawn hashtable. 
-  */ 
- void resetPawnHashtable(void); 
-   
- /** 
-  * Flip the given position and check if it yields the same result. 
-  * 
-  * @return FALSE if the flipped position yields a diffent result 
-  */ 
- bool flipTest(Position * position, PawnHashInfo * pawnHashtable, 
-               KingSafetyHashInfo * kingsafetyHashtable); 
-   
- /** 
-  * Initialize this module. 
-  * 
-  * @return 0 if no errors occurred. 
-  */ 
- int initializeModuleEvaluation(void); 
-   
- /** 
-  * Test this module. 
-  * 
-  * @return 0 if all tests succeed. 
-  */ 
- int testModuleEvaluation(void); 
-   
- #endif 
-