std::vector<RootMove> RootMoves;
Position RootPosition;
Time SearchTime;
+ StateStackPtr SetupStates;
}
using std::string;
&& type_of(pos.piece_on(to_sq(m))) != PAWN
&& type_of(m) == NORMAL
&& ( pos.non_pawn_material(WHITE) + pos.non_pawn_material(BLACK)
- - PieceValueMidgame[pos.piece_on(to_sq(m))] == VALUE_ZERO))
+ - PieceValue[Mg][pos.piece_on(to_sq(m))] == VALUE_ZERO))
return true;
return false;
Depth R = 3 * ONE_PLY + depth / 4;
// Null move dynamic reduction based on value
- if (refinedValue - PawnValueMidgame > beta)
+ if (refinedValue - PawnValueMg > beta)
R += ONE_PLY;
pos.do_null_move<true>(st);
if (SpNode)
{
moveCount = ++sp->moveCount;
- lock_release(sp->lock);
+ sp->mutex.unlock();
}
else
moveCount++;
&& (!threatMove || !connected_threat(pos, move, threatMove)))
{
if (SpNode)
- lock_grab(sp->lock);
+ sp->mutex.lock();
continue;
}
if (futilityValue < beta)
{
if (SpNode)
- lock_grab(sp->lock);
+ sp->mutex.lock();
continue;
}
&& pos.see_sign(move) < 0)
{
if (SpNode)
- lock_grab(sp->lock);
+ sp->mutex.lock();
continue;
}
// Step 18. Check for new best move
if (SpNode)
{
- lock_grab(sp->lock);
+ sp->mutex.lock();
bestValue = sp->bestValue;
alpha = sp->alpha;
}
alpha = bestValue;
futilityBase = ss->eval + evalMargin + FutilityMarginQS;
- enoughMaterial = pos.non_pawn_material(pos.side_to_move()) > RookValueMidgame;
+ enoughMaterial = pos.non_pawn_material(pos.side_to_move()) > RookValueMg;
}
// Initialize a MovePicker object for the current position, and prepare
&& !pos.is_passed_pawn_push(move))
{
futilityValue = futilityBase
- + PieceValueEndgame[pos.piece_on(to_sq(move))]
- + (type_of(move) == ENPASSANT ? PawnValueEndgame : VALUE_ZERO);
+ + PieceValue[Eg][pos.piece_on(to_sq(move))]
+ + (type_of(move) == ENPASSANT ? PawnValueEg : VALUE_ZERO);
if (futilityValue < beta)
{
&& givesCheck
&& move != ttMove
&& !pos.is_capture_or_promotion(move)
- && ss->eval + PawnValueMidgame / 4 < beta
+ && ss->eval + PawnValueMg / 4 < beta
&& !check_is_dangerous(pos, move, futilityBase, beta))
continue;
while (b)
{
// Note that here we generate illegal "double move"!
- if (futilityBase + PieceValueEndgame[pos.piece_on(pop_lsb(&b))] >= beta)
+ if (futilityBase + PieceValue[Eg][pos.piece_on(pop_lsb(&b))] >= beta)
return true;
}
// Case 2: If the threatened piece has value less than or equal to the
// value of the threatening piece, don't prune moves which defend it.
if ( pos.is_capture(threat)
- && ( PieceValueMidgame[pos.piece_on(tfrom)] >= PieceValueMidgame[pos.piece_on(tto)]
+ && ( PieceValue[Mg][pos.piece_on(tfrom)] >= PieceValue[Mg][pos.piece_on(tto)]
|| type_of(pos.piece_on(tfrom)) == KING)
&& pos.move_attacks_square(m, tto))
return true;
// RootMoves are already sorted by score in descending order
size_t size = std::min(MultiPV, RootMoves.size());
- int variance = std::min(RootMoves[0].score - RootMoves[size - 1].score, PawnValueMidgame);
+ int variance = std::min(RootMoves[0].score - RootMoves[size - 1].score, PawnValueMg);
int weakness = 120 - 2 * SkillLevel;
int max_s = -VALUE_INFINITE;
Move best = MOVE_NONE;
}
// Grab the lock to avoid races with Thread::wake_up()
- lock_grab(sleepLock);
+ mutex.lock();
// If we are master and all slaves have finished don't go to sleep
if (sp_master && !sp_master->slavesMask)
{
- lock_release(sleepLock);
+ mutex.unlock();
break;
}
// in the meanwhile, allocated us and sent the wake_up() call before we
// had the chance to grab the lock.
if (do_sleep || !is_searching)
- cond_wait(sleepCond, sleepLock);
+ sleepCondition.wait(mutex);
- lock_release(sleepLock);
+ mutex.unlock();
}
// If this thread has been assigned work, launch a search
{
assert(!do_sleep && !do_exit);
- lock_grab(Threads.splitLock);
+ Threads.mutex.lock();
assert(is_searching);
SplitPoint* sp = curSplitPoint;
- lock_release(Threads.splitLock);
+ Threads.mutex.unlock();
Stack ss[MAX_PLY_PLUS_2];
Position pos(*sp->pos, this);
memcpy(ss, sp->ss - 1, 4 * sizeof(Stack));
(ss+1)->sp = sp;
- lock_grab(sp->lock);
+ sp->mutex.lock();
if (sp->nodeType == Root)
search<SplitPointRoot>(pos, ss+1, sp->alpha, sp->beta, sp->depth);
// related data in a safe way becuase it could have been released under
// our feet by the sp master. Also accessing other Thread objects is
// unsafe because if we are exiting there is a chance are already freed.
- lock_release(sp->lock);
+ sp->mutex.unlock();
}
}
}