1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-07-11 19:49:14 +00:00

Use a set to store SearchMoves

We just need to verify if a legal move is among the
SearchMoves, so we don't need a vector for this.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba 2012-01-14 11:45:54 +01:00
parent a1076cc68a
commit a29dd88f75
6 changed files with 28 additions and 29 deletions

View file

@ -19,6 +19,7 @@
#include <fstream> #include <fstream>
#include <iostream> #include <iostream>
#include <set>
#include <vector> #include <vector>
#include "misc.h" #include "misc.h"
@ -121,7 +122,7 @@ void benchmark(int argc, char* argv[]) {
} }
else else
{ {
Threads.start_thinking(pos, limits, vector<Move>(), false); Threads.start_thinking(pos, limits, set<Move>(), false);
nodes += RootPosition.nodes_searched(); nodes += RootPosition.nodes_searched();
} }
} }

View file

@ -42,7 +42,7 @@ namespace Search {
volatile SignalsType Signals; volatile SignalsType Signals;
LimitsType Limits; LimitsType Limits;
std::vector<Move> SearchMoves; std::set<Move> SearchMoves;
Position RootPosition; Position RootPosition;
} }
@ -282,6 +282,7 @@ void Search::think() {
static Book book; // Defined static to initialize the PRNG only once static Book book; // Defined static to initialize the PRNG only once
Move bm;
Position& pos = RootPosition; Position& pos = RootPosition;
Chess960 = pos.is_chess960(); Chess960 = pos.is_chess960();
elapsed_time(true); elapsed_time(true);
@ -293,18 +294,24 @@ void Search::think() {
// Populate RootMoves with all the legal moves (default) or, if a SearchMoves // Populate RootMoves with all the legal moves (default) or, if a SearchMoves
// is given, with the subset of legal moves to search. // is given, with the subset of legal moves to search.
for (MoveList<MV_LEGAL> ml(pos); !ml.end(); ++ml) for (MoveList<MV_LEGAL> ml(pos); !ml.end(); ++ml)
if (SearchMoves.empty() || count(SearchMoves.begin(), SearchMoves.end(), ml.move())) if (SearchMoves.empty() || SearchMoves.count(ml.move()))
RootMoves.push_back(RootMove(ml.move())); RootMoves.push_back(RootMove(ml.move()));
if (Options["OwnBook"]) if (RootMoves.empty())
{ {
Move bookMove = book.probe(pos, Options["Book File"], Options["Best Book Move"]); cout << "info depth 0 score "
<< score_to_uci(pos.in_check() ? -VALUE_MATE : VALUE_DRAW) << endl;
if (bookMove && count(RootMoves.begin(), RootMoves.end(), bookMove)) RootMoves.push_back(MOVE_NONE);
{ goto finalize;
std::swap(RootMoves[0], *find(RootMoves.begin(), RootMoves.end(), bookMove)); }
goto finalize;
} if ( Options["OwnBook"]
&& (bm = book.probe(pos, Options["Book File"], Options["Best Book Move"])) != MOVE_NONE
&& count(RootMoves.begin(), RootMoves.end(), bm))
{
std::swap(RootMoves[0], *find(RootMoves.begin(), RootMoves.end(), bm));
goto finalize;
} }
// Read UCI options: GUI could change UCI parameters during the game // Read UCI options: GUI could change UCI parameters during the game
@ -375,9 +382,9 @@ void Search::think() {
finalize: finalize:
// When we reach max depth we arrive here even without a StopRequest, but if // When we reach max depth we arrive here even without Signals.stop is raised,
// we are pondering or in infinite search, we shouldn't print the best move // but if we are pondering or in infinite search, we shouldn't print the best
// before we are told to do so. // move before we are told to do so.
if (!Signals.stop && (Limits.ponder || Limits.infinite)) if (!Signals.stop && (Limits.ponder || Limits.infinite))
Threads.wait_for_stop_or_ponderhit(); Threads.wait_for_stop_or_ponderhit();
@ -406,16 +413,6 @@ namespace {
bestValue = delta = -VALUE_INFINITE; bestValue = delta = -VALUE_INFINITE;
ss->currentMove = MOVE_NULL; // Hack to skip update gains ss->currentMove = MOVE_NULL; // Hack to skip update gains
// Handle the special case of a mated/stalemate position
if (RootMoves.empty())
{
cout << "info depth 0 score "
<< score_to_uci(pos.in_check() ? -VALUE_MATE : VALUE_DRAW) << endl;
RootMoves.push_back(MOVE_NONE);
return;
}
// Iterative deepening loop until requested to stop or target depth reached // Iterative deepening loop until requested to stop or target depth reached
while (!Signals.stop && ++depth <= MAX_PLY && (!Limits.maxDepth || depth <= Limits.maxDepth)) while (!Signals.stop && ++depth <= MAX_PLY && (!Limits.maxDepth || depth <= Limits.maxDepth))
{ {

View file

@ -21,7 +21,7 @@
#define SEARCH_H_INCLUDED #define SEARCH_H_INCLUDED
#include <cstring> #include <cstring>
#include <vector> #include <set>
#include "types.h" #include "types.h"
@ -70,7 +70,7 @@ struct SignalsType {
extern volatile SignalsType Signals; extern volatile SignalsType Signals;
extern LimitsType Limits; extern LimitsType Limits;
extern std::vector<Move> SearchMoves; extern std::set<Move> SearchMoves;
extern Position RootPosition; extern Position RootPosition;
extern void init(); extern void init();

View file

@ -431,7 +431,7 @@ void Thread::main_loop() {
// the search to finish. // the search to finish.
void ThreadsManager::start_thinking(const Position& pos, const LimitsType& limits, void ThreadsManager::start_thinking(const Position& pos, const LimitsType& limits,
const std::vector<Move>& searchMoves, bool asyncMode) { const std::set<Move>& searchMoves, bool asyncMode) {
Thread& main = threads[0]; Thread& main = threads[0];
lock_grab(&main.sleepLock); lock_grab(&main.sleepLock);

View file

@ -21,6 +21,7 @@
#define THREAD_H_INCLUDED #define THREAD_H_INCLUDED
#include <cstring> #include <cstring>
#include <set>
#include "lock.h" #include "lock.h"
#include "material.h" #include "material.h"
@ -120,7 +121,7 @@ public:
void wait_for_stop_or_ponderhit(); void wait_for_stop_or_ponderhit();
void stop_thinking(); void stop_thinking();
void start_thinking(const Position& pos, const Search::LimitsType& limits, void start_thinking(const Position& pos, const Search::LimitsType& limits,
const std::vector<Move>& searchMoves, bool asyncMode); const std::set<Move>& searchMoves, bool asyncMode);
template <bool Fake> template <bool Fake>
Value split(Position& pos, Search::Stack* ss, Value alpha, Value beta, Value bestValue, Value split(Position& pos, Search::Stack* ss, Value alpha, Value beta, Value bestValue,

View file

@ -201,7 +201,7 @@ namespace {
string token; string token;
Search::LimitsType limits; Search::LimitsType limits;
std::vector<Move> searchMoves; std::set<Move> searchMoves;
int time[] = { 0, 0 }, inc[] = { 0, 0 }; int time[] = { 0, 0 }, inc[] = { 0, 0 };
while (is >> token) while (is >> token)
@ -228,7 +228,7 @@ namespace {
is >> limits.maxTime; is >> limits.maxTime;
else if (token == "searchmoves") else if (token == "searchmoves")
while (is >> token) while (is >> token)
searchMoves.push_back(move_from_uci(pos, token)); searchMoves.insert(move_from_uci(pos, token));
} }
limits.time = time[pos.side_to_move()]; limits.time = time[pos.side_to_move()];