This reverts commit
0d68b523a390e2f5c37f211316869d798e852289.
After easy move semplification this machinery is not
needed anymore (because of we don't need to know if a
root move is a recapture)
No functional change.
int64_t nodes = 0;
Search::StateStackPtr st;
int64_t nodes = 0;
Search::StateStackPtr st;
- Search::MovesVectPtr mv;
Time::point elapsed = Time::now();
for (size_t i = 0; i < fens.size(); i++)
Time::point elapsed = Time::now();
for (size_t i = 0; i < fens.size(); i++)
- Threads.start_thinking(pos, limits, vector<Move>(), st, mv);
+ Threads.start_thinking(pos, limits, vector<Move>(), st);
Threads.wait_for_think_finished();
nodes += Search::RootPos.nodes_searched();
}
Threads.wait_for_think_finished();
nodes += Search::RootPos.nodes_searched();
}
Color RootColor;
Time::point SearchTime;
StateStackPtr SetupStates;
Color RootColor;
Time::point SearchTime;
StateStackPtr SetupStates;
- MovesVectPtr SetupMoves;
};
typedef std::auto_ptr<std::stack<StateInfo> > StateStackPtr;
};
typedef std::auto_ptr<std::stack<StateInfo> > StateStackPtr;
-typedef std::auto_ptr<std::vector<Move> > MovesVectPtr;
extern volatile SignalsType Signals;
extern LimitsType Limits;
extern volatile SignalsType Signals;
extern LimitsType Limits;
extern Color RootColor;
extern Time::point SearchTime;
extern StateStackPtr SetupStates;
extern Color RootColor;
extern Time::point SearchTime;
extern StateStackPtr SetupStates;
-extern MovesVectPtr SetupMoves;
extern void init();
extern size_t perft(Position& pos, Depth depth);
extern void init();
extern size_t perft(Position& pos, Depth depth);
// start_thinking() wakes up the main thread sleeping in MainThread::idle_loop()
// so to start a new search, then returns immediately.
// start_thinking() wakes up the main thread sleeping in MainThread::idle_loop()
// so to start a new search, then returns immediately.
-void ThreadPool::start_thinking(const Position& pos, const LimitsType& limits, const std::vector<Move>& searchMoves,
- StateStackPtr& setupStates, MovesVectPtr& setupMoves) {
+void ThreadPool::start_thinking(const Position& pos, const LimitsType& limits,
+ const std::vector<Move>& searchMoves, StateStackPtr& states) {
wait_for_think_finished();
SearchTime = Time::now(); // As early as possible
wait_for_think_finished();
SearchTime = Time::now(); // As early as possible
RootPos = pos;
Limits = limits;
RootPos = pos;
Limits = limits;
- SetupStates = setupStates; // Ownership transfer here
- SetupMoves = setupMoves; // Ownership transfer here
+ SetupStates = states; // Ownership transfer here
RootMoves.clear();
for (MoveList<LEGAL> ml(pos); !ml.end(); ++ml)
RootMoves.clear();
for (MoveList<LEGAL> ml(pos); !ml.end(); ++ml)
void read_uci_options();
Thread* available_slave(Thread* master) const;
void wait_for_think_finished();
void read_uci_options();
Thread* available_slave(Thread* master) const;
void wait_for_think_finished();
- void start_thinking(const Position&, const Search::LimitsType&, const std::vector<Move>&,
- Search::StateStackPtr&, Search::MovesVectPtr&);
+ void start_thinking(const Position&, const Search::LimitsType&,
+ const std::vector<Move>&, Search::StateStackPtr&);
bool sleepWhileIdle;
Depth minimumSplitDepth;
bool sleepWhileIdle;
Depth minimumSplitDepth;
// Keep track of position keys along the setup moves (from start position to the
// position just before to start searching). Needed by repetition draw detection.
Search::StateStackPtr SetupStates;
// Keep track of position keys along the setup moves (from start position to the
// position just before to start searching). Needed by repetition draw detection.
Search::StateStackPtr SetupStates;
- Search::MovesVectPtr SetupMoves;
void set_option(istringstream& up);
void set_position(Position& pos, istringstream& up);
void set_option(istringstream& up);
void set_position(Position& pos, istringstream& up);
pos.set(fen, Options["UCI_Chess960"], Threads.main_thread());
SetupStates = Search::StateStackPtr(new std::stack<StateInfo>());
pos.set(fen, Options["UCI_Chess960"], Threads.main_thread());
SetupStates = Search::StateStackPtr(new std::stack<StateInfo>());
- SetupMoves = Search::MovesVectPtr(new std::vector<Move>());
- SetupMoves->reserve(200); // Try to avoid reallocations
// Parse move list (if any)
while (is >> token && (m = move_from_uci(pos, token)) != MOVE_NONE)
{
// Parse move list (if any)
while (is >> token && (m = move_from_uci(pos, token)) != MOVE_NONE)
{
- SetupMoves->push_back(m);
SetupStates->push(StateInfo());
pos.do_move(m, SetupStates->top());
}
SetupStates->push(StateInfo());
pos.do_move(m, SetupStates->top());
}
else if (token == "ponder") limits.ponder = true;
}
else if (token == "ponder") limits.ponder = true;
}
- Threads.start_thinking(pos, limits, searchMoves, SetupStates, SetupMoves);
+ Threads.start_thinking(pos, limits, searchMoves, SetupStates);