// Constructors
Position();
- Position(const Position& pos);
- Position(const std::string& fen);
+ explicit Position(const Position& pos);
+ explicit Position(const std::string& fen);
// Text input/output
void from_fen(const std::string& fen);
assert(threadID >= 0 && threadID < ActiveThreads);
assert(ActiveThreads > 1);
- Position pos;
- pos.fast_copy(sp->pos);
+ Position pos(*sp->pos);
CheckInfo ci(pos);
SearchStack* ss = sp->sstack[threadID];
Value value = -VALUE_INFINITE;
assert(threadID >= 0 && threadID < ActiveThreads);
assert(ActiveThreads > 1);
- Position pos;
- pos.fast_copy(sp->pos);
+ Position pos(*sp->pos);
CheckInfo ci(pos);
SearchStack* ss = sp->sstack[threadID];
Value value = -VALUE_INFINITE;
splitPoint = SplitPointStack[master] + Threads[master].activeSplitPoints;
Threads[master].activeSplitPoints++;
- // Initialize the split point object and copy current position
+ // Initialize the split point object
splitPoint->parent = Threads[master].splitPoint;
splitPoint->finished = false;
splitPoint->ply = ply;
splitPoint->mp = mp;
splitPoint->moves = *moves;
splitPoint->cpus = 1;
- splitPoint->pos.fast_copy(p);
+ splitPoint->pos = &p;
splitPoint->parentSstack = sstck;
for (i = 0; i < ActiveThreads; i++)
splitPoint->slaves[i] = 0;
- // Detach splitPoint Position from the master one
- splitPoint->pos.detach();
-
// Copy the tail of current search stack to the master thread
memcpy(splitPoint->sstack[master] + ply - 1, sstck + ply - 1, 3 * sizeof(SearchStack));
Threads[master].splitPoint = splitPoint;