diff options
Diffstat (limited to 'src/eval.c')
| -rwxr-xr-x | src/eval.c | 79 |
1 files changed, 21 insertions, 58 deletions
@@ -21,7 +21,6 @@ Revision History: #include "chess.h" -typedef void (*PEVAL_HELPER)(POSITION *, COOR, PAWN_HASH_ENTRY *); // // Bishop-mobility ray-walk outcome categories -- see BMobCaseTable in @@ -2412,33 +2411,6 @@ Return value: } -static void -_InvalidEvaluator(UNUSED POSITION *pos, - UNUSED COOR c, - UNUSED PAWN_HASH_ENTRY *pHash) -/** - -Routine description: - - This code should never be called - -Parameters: - - POSITION *pos, - COOR c, - PAWN_HASH_ENTRY *pHash, - -Return value: - - void - -**/ -{ - UtilPanic(SHOULD_NOT_GET_HERE, - NULL, NULL, NULL, NULL, - __FILE__, __LINE__); -} - // // ====================================================================== // @@ -4768,23 +4740,6 @@ Return value: **/ { - static const PEVAL_HELPER JumpTable[] = - { - _InvalidEvaluator, // EMPTY_SQUARE (0) - _InvalidEvaluator, // INVALID_PIECE (1) - _InvalidEvaluator, // BLACK_PAWN (2) - _InvalidEvaluator, // WHITE_PAWN (3) - _EvalKnight, // BLACK_KNIGHT (4) - _EvalKnight, // WHITE_KNIGHT (5) - _EvalBishop, // BLACK_BISHOP (6) - _EvalBishop, // WHITE_BISHOP (7) - _InvalidEvaluator, // BLACK_ROOK (8) - _InvalidEvaluator, // WHITE_ROOK (9) - _InvalidEvaluator, // BLACK_QUEEN (10) - _InvalidEvaluator, // WHITE_QUEEN (11) - _InvalidEvaluator, // BLACK_KING (12) - _InvalidEvaluator // WHITE_KING (13) - }; ULONG uDefer[2][2]; COOR cDefer[2][2][10]; POSITION *pos = &(ctx->sPosition); @@ -5024,12 +4979,17 @@ Return value: // Note: The side on move's pieces of value X are // evaluated and have their mobility counted and added to // the attack table before the other side's pieces. Also, - // we do not care if JumpTable tells us this piece is in - // danger b/c we will find out later on in - // EvalLookForDanger anyway. + // we do not care if this piece is in danger b/c we will + // find out later on in EvalLookForDanger anyway. // - ASSERT(JumpTable[p]); - (void)(JumpTable[p])(pos, c, pHash); + if (IS_KNIGHT(p)) + { + _EvalKnight(pos, c, pHash); + } + else + { + _EvalBishop(pos, c, pHash); + } #ifdef EVAL_DUMP Trace("After %s:\n%d\t\t%d\n", PieceAbbrev(p), pos->iScore[WHITE], pos->iScore[BLACK]); @@ -5059,13 +5019,18 @@ Return value: // // This time we are evaluating a piece from the side not // on move. We will not go back later and look at this - // piece again so if JumpTable tells us it's in danger - // then record it. The drawback, of course, is that the - // JumpTable routines only detect danger if a piece is - // attacked by an enemy of lesser value! + // piece again so if it's in danger then record it. The + // drawback, of course, is that danger is only detected if + // a piece is attacked by an enemy of lesser value! // - ASSERT(JumpTable[p]); - (void)(JumpTable[p])(pos, c, pHash); + if (IS_KNIGHT(p)) + { + _EvalKnight(pos, c, pHash); + } + else + { + _EvalBishop(pos, c, pHash); + } #ifdef EVAL_DUMP Trace("After %s:\n%d\t\t%d\n", PieceAbbrev(p), pos->iScore[WHITE], pos->iScore[BLACK]); @@ -5162,7 +5127,6 @@ Return value: ASSERT(IS_VALID_PIECE(p)); ASSERT(GET_COLOR(p) == BLACK); ASSERT(IS_KING(p)); - ASSERT(JumpTable[p]); #endif _EvalKing(pos, c, pHash); ctx->sPlyInfo[ctx->uPly].iKingScore[BLACK] = pos->iTempScore; @@ -5177,7 +5141,6 @@ Return value: ASSERT(IS_VALID_PIECE(p)); ASSERT(GET_COLOR(p) == WHITE); ASSERT(IS_KING(p)); - ASSERT(JumpTable[p]); #endif _EvalKing(pos, c, pHash); ctx->sPlyInfo[ctx->uPly].iKingScore[WHITE] = pos->iTempScore; |
