1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-30 16:53:09 +00:00

Move locals definitions at the function start

It seems to me function are easier to read now.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba 2009-11-05 11:11:02 +01:00
parent 94dcac1fee
commit 423b8b9ded

View file

@ -1062,6 +1062,18 @@ namespace {
assert(ply >= 0 && ply < PLY_MAX); assert(ply >= 0 && ply < PLY_MAX);
assert(threadID >= 0 && threadID < ActiveThreads); assert(threadID >= 0 && threadID < ActiveThreads);
Move movesSearched[256];
EvalInfo ei;
StateInfo st;
Bitboard dcCandidates;
const TTEntry* tte;
Move ttMove, move;
Depth ext, newDepth;
Value oldAlpha, value;
bool isCheck, mateThreat, singleReply, moveIsCheck, captureOrPromotion, dangerous;
int moveCount = 0;
Value bestValue = -VALUE_INFINITE;
if (depth < OnePly) if (depth < OnePly)
return qsearch(pos, ss, alpha, beta, Depth(0), ply, threadID); return qsearch(pos, ss, alpha, beta, Depth(0), ply, threadID);
@ -1076,13 +1088,11 @@ namespace {
if (pos.is_draw()) if (pos.is_draw())
return VALUE_DRAW; return VALUE_DRAW;
EvalInfo ei;
if (ply >= PLY_MAX - 1) if (ply >= PLY_MAX - 1)
return pos.is_check() ? quick_evaluate(pos) : evaluate(pos, ei, threadID); return pos.is_check() ? quick_evaluate(pos) : evaluate(pos, ei, threadID);
// Mate distance pruning // Mate distance pruning
Value oldAlpha = alpha; oldAlpha = alpha;
alpha = Max(value_mated_in(ply), alpha); alpha = Max(value_mated_in(ply), alpha);
beta = Min(value_mate_in(ply+1), beta); beta = Min(value_mate_in(ply+1), beta);
if (alpha >= beta) if (alpha >= beta)
@ -1090,8 +1100,8 @@ namespace {
// Transposition table lookup. At PV nodes, we don't use the TT for // Transposition table lookup. At PV nodes, we don't use the TT for
// pruning, but only for move ordering. // pruning, but only for move ordering.
const TTEntry* tte = TT.retrieve(pos.get_key()); tte = TT.retrieve(pos.get_key());
Move ttMove = (tte ? tte->move() : MOVE_NONE); ttMove = (tte ? tte->move() : MOVE_NONE);
// Go with internal iterative deepening if we don't have a TT move // Go with internal iterative deepening if we don't have a TT move
if (UseIIDAtPVNodes && ttMove == MOVE_NONE && depth >= 5*OnePly) if (UseIIDAtPVNodes && ttMove == MOVE_NONE && depth >= 5*OnePly)
@ -1102,15 +1112,10 @@ namespace {
// Initialize a MovePicker object for the current position, and prepare // Initialize a MovePicker object for the current position, and prepare
// to search all moves // to search all moves
Move move, movesSearched[256]; isCheck = pos.is_check();
int moveCount = 0; mateThreat = pos.has_mate_threat(opposite_color(pos.side_to_move()));
Value value, bestValue = -VALUE_INFINITE; dcCandidates = pos.discovered_check_candidates(pos.side_to_move());
Color us = pos.side_to_move();
bool isCheck = pos.is_check();
bool mateThreat = pos.has_mate_threat(opposite_color(us));
MovePicker mp = MovePicker(pos, ttMove, depth, H, &ss[ply]); MovePicker mp = MovePicker(pos, ttMove, depth, H, &ss[ply]);
Bitboard dcCandidates = pos.discovered_check_candidates(us);
// Loop through all legal moves until no moves remain or a beta cutoff // Loop through all legal moves until no moves remain or a beta cutoff
// occurs. // occurs.
@ -1120,19 +1125,17 @@ namespace {
{ {
assert(move_is_ok(move)); assert(move_is_ok(move));
bool singleReply = (isCheck && mp.number_of_evasions() == 1); singleReply = (isCheck && mp.number_of_evasions() == 1);
bool moveIsCheck = pos.move_is_check(move, dcCandidates); moveIsCheck = pos.move_is_check(move, dcCandidates);
bool captureOrPromotion = pos.move_is_capture_or_promotion(move); captureOrPromotion = pos.move_is_capture_or_promotion(move);
movesSearched[moveCount++] = ss[ply].currentMove = move; movesSearched[moveCount++] = ss[ply].currentMove = move;
// Decide the new search depth // Decide the new search depth
bool dangerous; ext = extension(pos, move, true, captureOrPromotion, moveIsCheck, singleReply, mateThreat, &dangerous);
Depth ext = extension(pos, move, true, captureOrPromotion, moveIsCheck, singleReply, mateThreat, &dangerous); newDepth = depth - OnePly + ext;
Depth newDepth = depth - OnePly + ext;
// Make and search the move // Make and search the move
StateInfo st;
pos.do_move(move, st, dcCandidates); pos.do_move(move, st, dcCandidates);
if (moveCount == 1) // The first move in list is the PV if (moveCount == 1) // The first move in list is the PV
@ -1227,13 +1230,13 @@ namespace {
else if (bestValue >= beta) else if (bestValue >= beta)
{ {
BetaCounter.add(pos.side_to_move(), depth, threadID); BetaCounter.add(pos.side_to_move(), depth, threadID);
Move m = ss[ply].pv[ply]; move = ss[ply].pv[ply];
if (!pos.move_is_capture_or_promotion(m)) if (!pos.move_is_capture_or_promotion(move))
{ {
update_history(pos, m, depth, movesSearched, moveCount); update_history(pos, move, depth, movesSearched, moveCount);
update_killers(m, ss[ply]); update_killers(move, ss[ply]);
} }
TT.store(pos.get_key(), value_to_tt(bestValue, ply), VALUE_TYPE_LOWER, depth, m); TT.store(pos.get_key(), value_to_tt(bestValue, ply), VALUE_TYPE_LOWER, depth, move);
} }
else else
TT.store(pos.get_key(), value_to_tt(bestValue, ply), VALUE_TYPE_EXACT, depth, ss[ply].pv[ply]); TT.store(pos.get_key(), value_to_tt(bestValue, ply), VALUE_TYPE_EXACT, depth, ss[ply].pv[ply]);
@ -1251,6 +1254,19 @@ namespace {
assert(ply >= 0 && ply < PLY_MAX); assert(ply >= 0 && ply < PLY_MAX);
assert(threadID >= 0 && threadID < ActiveThreads); assert(threadID >= 0 && threadID < ActiveThreads);
Move movesSearched[256];
EvalInfo ei;
StateInfo st;
Bitboard dcCandidates;
const TTEntry* tte;
Move ttMove, move;
Depth ext, newDepth;
Value approximateEval, nullValue, value, futilityValue;
bool isCheck, useFutilityPruning, singleReply, moveIsCheck, captureOrPromotion, dangerous;
bool mateThreat = false;
int moveCount = 0;
Value bestValue = -VALUE_INFINITE;
if (depth < OnePly) if (depth < OnePly)
return qsearch(pos, ss, beta-1, beta, Depth(0), ply, threadID); return qsearch(pos, ss, beta-1, beta, Depth(0), ply, threadID);
@ -1265,8 +1281,6 @@ namespace {
if (pos.is_draw()) if (pos.is_draw())
return VALUE_DRAW; return VALUE_DRAW;
EvalInfo ei;
if (ply >= PLY_MAX - 1) if (ply >= PLY_MAX - 1)
return pos.is_check() ? quick_evaluate(pos) : evaluate(pos, ei, threadID); return pos.is_check() ? quick_evaluate(pos) : evaluate(pos, ei, threadID);
@ -1278,8 +1292,8 @@ namespace {
return beta - 1; return beta - 1;
// Transposition table lookup // Transposition table lookup
const TTEntry* tte = TT.retrieve(pos.get_key()); tte = TT.retrieve(pos.get_key());
Move ttMove = (tte ? tte->move() : MOVE_NONE); ttMove = (tte ? tte->move() : MOVE_NONE);
if (tte && ok_to_use_TT(tte, depth, beta, ply)) if (tte && ok_to_use_TT(tte, depth, beta, ply))
{ {
@ -1287,9 +1301,8 @@ namespace {
return value_from_tt(tte->value(), ply); return value_from_tt(tte->value(), ply);
} }
Value approximateEval = quick_evaluate(pos); approximateEval = quick_evaluate(pos);
bool mateThreat = false; isCheck = pos.is_check();
bool isCheck = pos.is_check();
// Null move search // Null move search
if ( allowNullmove if ( allowNullmove
@ -1301,11 +1314,10 @@ namespace {
{ {
ss[ply].currentMove = MOVE_NULL; ss[ply].currentMove = MOVE_NULL;
StateInfo st;
pos.do_null_move(st); pos.do_null_move(st);
int R = (depth >= 5 * OnePly ? 4 : 3); // Null move dynamic reduction int R = (depth >= 5 * OnePly ? 4 : 3); // Null move dynamic reduction
Value nullValue = -search(pos, ss, -(beta-1), depth-R*OnePly, ply+1, false, threadID); nullValue = -search(pos, ss, -(beta-1), depth-R*OnePly, ply+1, false, threadID);
pos.undo_null_move(); pos.undo_null_move();
@ -1359,15 +1371,9 @@ namespace {
// Initialize a MovePicker object for the current position, and prepare // Initialize a MovePicker object for the current position, and prepare
// to search all moves. // to search all moves.
MovePicker mp = MovePicker(pos, ttMove, depth, H, &ss[ply]); MovePicker mp = MovePicker(pos, ttMove, depth, H, &ss[ply]);
dcCandidates = pos.discovered_check_candidates(pos.side_to_move());
Move move, movesSearched[256]; futilityValue = VALUE_NONE;
int moveCount = 0; useFutilityPruning = depth < SelectiveDepth && !isCheck;
Value value, bestValue = -VALUE_INFINITE;
Color us = pos.side_to_move();
Bitboard dcCandidates = pos.discovered_check_candidates(us);
Value futilityValue = VALUE_NONE;
bool useFutilityPruning = depth < SelectiveDepth
&& !isCheck;
// Avoid calling evaluate() if we already have the score in TT // Avoid calling evaluate() if we already have the score in TT
if (tte && (tte->type() & VALUE_TYPE_EVAL)) if (tte && (tte->type() & VALUE_TYPE_EVAL))
@ -1381,16 +1387,15 @@ namespace {
{ {
assert(move_is_ok(move)); assert(move_is_ok(move));
bool singleReply = (isCheck && mp.number_of_evasions() == 1); singleReply = (isCheck && mp.number_of_evasions() == 1);
bool moveIsCheck = pos.move_is_check(move, dcCandidates); moveIsCheck = pos.move_is_check(move, dcCandidates);
bool captureOrPromotion = pos.move_is_capture_or_promotion(move); captureOrPromotion = pos.move_is_capture_or_promotion(move);
movesSearched[moveCount++] = ss[ply].currentMove = move; movesSearched[moveCount++] = ss[ply].currentMove = move;
// Decide the new search depth // Decide the new search depth
bool dangerous; ext = extension(pos, move, false, captureOrPromotion, moveIsCheck, singleReply, mateThreat, &dangerous);
Depth ext = extension(pos, move, false, captureOrPromotion, moveIsCheck, singleReply, mateThreat, &dangerous); newDepth = depth - OnePly + ext;
Depth newDepth = depth - OnePly + ext;
// Futility pruning // Futility pruning
if ( useFutilityPruning if ( useFutilityPruning
@ -1420,7 +1425,6 @@ namespace {
} }
// Make and search the move // Make and search the move
StateInfo st;
pos.do_move(move, st, dcCandidates); pos.do_move(move, st, dcCandidates);
// Try to reduce non-pv search depth by one ply if move seems not problematic, // Try to reduce non-pv search depth by one ply if move seems not problematic,
@ -1486,13 +1490,13 @@ namespace {
else else
{ {
BetaCounter.add(pos.side_to_move(), depth, threadID); BetaCounter.add(pos.side_to_move(), depth, threadID);
Move m = ss[ply].pv[ply]; move = ss[ply].pv[ply];
if (!pos.move_is_capture_or_promotion(m)) if (!pos.move_is_capture_or_promotion(move))
{ {
update_history(pos, m, depth, movesSearched, moveCount); update_history(pos, move, depth, movesSearched, moveCount);
update_killers(m, ss[ply]); update_killers(move, ss[ply]);
} }
TT.store(pos.get_key(), value_to_tt(bestValue, ply), VALUE_TYPE_LOWER, depth, m); TT.store(pos.get_key(), value_to_tt(bestValue, ply), VALUE_TYPE_LOWER, depth, move);
} }
assert(bestValue > -VALUE_INFINITE && bestValue < VALUE_INFINITE); assert(bestValue > -VALUE_INFINITE && bestValue < VALUE_INFINITE);
@ -1514,6 +1518,16 @@ namespace {
assert(ply >= 0 && ply < PLY_MAX); assert(ply >= 0 && ply < PLY_MAX);
assert(threadID >= 0 && threadID < ActiveThreads); assert(threadID >= 0 && threadID < ActiveThreads);
EvalInfo ei;
StateInfo st;
Bitboard dcCandidates;
Move ttMove, move;
Value staticValue, bestValue, value, futilityValue;
bool isCheck, enoughMaterial;
const TTEntry* tte = NULL;
int moveCount = 0;
bool pvNode = (beta - alpha != 1);
// Initialize, and make an early exit in case of an aborted search, // Initialize, and make an early exit in case of an aborted search,
// an instant draw, maximum ply reached, etc. // an instant draw, maximum ply reached, etc.
init_node(ss, ply, threadID); init_node(ss, ply, threadID);
@ -1526,8 +1540,6 @@ namespace {
return VALUE_DRAW; return VALUE_DRAW;
// Transposition table lookup, only when not in PV // Transposition table lookup, only when not in PV
TTEntry* tte = NULL;
bool pvNode = (beta - alpha != 1);
if (!pvNode) if (!pvNode)
{ {
tte = TT.retrieve(pos.get_key()); tte = TT.retrieve(pos.get_key());
@ -1538,12 +1550,10 @@ namespace {
return value_from_tt(tte->value(), ply); return value_from_tt(tte->value(), ply);
} }
} }
Move ttMove = (tte ? tte->move() : MOVE_NONE); ttMove = (tte ? tte->move() : MOVE_NONE);
// Evaluate the position statically // Evaluate the position statically
EvalInfo ei; isCheck = pos.is_check();
Value staticValue;
bool isCheck = pos.is_check();
ei.futilityMargin = Value(0); // Manually initialize futilityMargin ei.futilityMargin = Value(0); // Manually initialize futilityMargin
if (isCheck) if (isCheck)
@ -1564,7 +1574,7 @@ namespace {
// Initialize "stand pat score", and return it immediately if it is // Initialize "stand pat score", and return it immediately if it is
// at least beta. // at least beta.
Value bestValue = staticValue; bestValue = staticValue;
if (bestValue >= beta) if (bestValue >= beta)
{ {
@ -1582,11 +1592,8 @@ namespace {
// to search the moves. Because the depth is <= 0 here, only captures, // to search the moves. Because the depth is <= 0 here, only captures,
// queen promotions and checks (only if depth == 0) will be generated. // queen promotions and checks (only if depth == 0) will be generated.
MovePicker mp = MovePicker(pos, ttMove, depth, H); MovePicker mp = MovePicker(pos, ttMove, depth, H);
Move move; dcCandidates = pos.discovered_check_candidates(pos.side_to_move());
int moveCount = 0; enoughMaterial = pos.non_pawn_material(pos.side_to_move()) > RookValueMidgame;
Color us = pos.side_to_move();
Bitboard dcCandidates = pos.discovered_check_candidates(us);
bool enoughMaterial = pos.non_pawn_material(us) > RookValueMidgame;
// Loop through the moves until no moves remain or a beta cutoff // Loop through the moves until no moves remain or a beta cutoff
// occurs. // occurs.
@ -1606,7 +1613,7 @@ namespace {
&& !pos.move_is_check(move, dcCandidates) && !pos.move_is_check(move, dcCandidates)
&& !pos.move_is_passed_pawn_push(move)) && !pos.move_is_passed_pawn_push(move))
{ {
Value futilityValue = staticValue futilityValue = staticValue
+ Max(pos.midgame_value_of_piece_on(move_to(move)), + Max(pos.midgame_value_of_piece_on(move_to(move)),
pos.endgame_value_of_piece_on(move_to(move))) pos.endgame_value_of_piece_on(move_to(move)))
+ (move_is_ep(move) ? PawnValueEndgame : Value(0)) + (move_is_ep(move) ? PawnValueEndgame : Value(0))
@ -1628,10 +1635,9 @@ namespace {
&& pos.see_sign(move) < 0) && pos.see_sign(move) < 0)
continue; continue;
// Make and search the move. // Make and search the move
StateInfo st;
pos.do_move(move, st, dcCandidates); pos.do_move(move, st, dcCandidates);
Value value = -qsearch(pos, ss, -beta, -alpha, depth-OnePly, ply+1, threadID); value = -qsearch(pos, ss, -beta, -alpha, depth-OnePly, ply+1, threadID);
pos.undo_move(move); pos.undo_move(move);
assert(value > -VALUE_INFINITE && value < VALUE_INFINITE); assert(value > -VALUE_INFINITE && value < VALUE_INFINITE);
@ -1656,7 +1662,7 @@ namespace {
assert(bestValue > -VALUE_INFINITE && bestValue < VALUE_INFINITE); assert(bestValue > -VALUE_INFINITE && bestValue < VALUE_INFINITE);
// Update transposition table // Update transposition table
Move m = ss[ply].pv[ply]; move = ss[ply].pv[ply];
if (!pvNode) if (!pvNode)
{ {
// If bestValue isn't changed it means it is still the static evaluation of // If bestValue isn't changed it means it is still the static evaluation of
@ -1667,12 +1673,12 @@ namespace {
if (bestValue < beta) if (bestValue < beta)
TT.store(pos.get_key(), value_to_tt(bestValue, ply), type, d, MOVE_NONE); TT.store(pos.get_key(), value_to_tt(bestValue, ply), type, d, MOVE_NONE);
else else
TT.store(pos.get_key(), value_to_tt(bestValue, ply), VALUE_TYPE_LOWER, d, m); TT.store(pos.get_key(), value_to_tt(bestValue, ply), VALUE_TYPE_LOWER, d, move);
} }
// Update killers only for good check moves // Update killers only for good check moves
if (alpha >= beta && !pos.move_is_capture_or_promotion(m)) if (alpha >= beta && !pos.move_is_capture_or_promotion(move))
update_killers(m, ss[ply]); update_killers(move, ss[ply]);
return bestValue; return bestValue;
} }