BenBot 1.7.5
A chess engine
Loading...
Searching...
No Matches
ben_bot::Engine Class Referencefinalabstract

#include <libbenbot/engine/Engine.hpp>

Inheritance diagram for ben_bot::Engine:
Collaboration diagram for ben_bot::Engine:

Public Types

using CommandList = std::span<const EngineCommand>
using OptionList = std::span<Option*>

Public Member Functions

 Engine ()=default
 Engine (const Engine &)=delete
 Engine (Engine &&)=delete
 ~Engine () override=default
auto get_standard_uci_commands () const noexcept -> CommandList
auto get_standard_uci_options () noexcept -> OptionList
virtual void go (const GoCommandOptions &opts)=0
void handle_command (string_view command)
virtual void handle_registration (const RegisterOptions &opts)
auto is_debug_mode () const noexcept -> bool
void loop ()
Engineoperator= (const Engine &)=delete
Engineoperator= (Engine &&)=delete
void read_config_file (const std::filesystem::path &file)
void set_debug_mode (const bool shouldDebug) noexcept
void set_sanitize_positions (const bool shouldSanitize) noexcept

Public Attributes

IntOption opt_Hash
BoolOption opt_Ponder

Private Member Functions

void abort_search () override
auto get_author () const -> string_view override
auto get_custom_uci_commands () const noexcept -> CommandList override
auto get_custom_uci_options () noexcept -> OptionList override
auto get_name () const -> std::string override
void go (const uci::GoCommandOptions &opts) override
auto is_searching () const noexcept -> bool override
void new_game (bool firstCall) override
void ponder_hit () override
void resize_transposition_table (const size_t sizeMB) override
void set_ponder (const bool shouldPonder) override
void set_position (const Position &pos) override
void wait () override

Detailed Description

The ben-bot UCI engine class.

Definition at line 49 of file Engine.hpp.

Member Typedef Documentation

◆ CommandList

using chess::uci::EngineBase::CommandList = std::span<const EngineCommand>
inherited

Typedef for a view of a list of engine commands.

Definition at line 171 of file EngineBase.hpp.

◆ OptionList

using chess::uci::EngineBase::OptionList = std::span<Option*>
inherited

Typedef for a view of a list of engine options.

Definition at line 186 of file EngineBase.hpp.

Constructor & Destructor Documentation

◆ Engine() [1/3]

ben_bot::Engine::Engine ( )
default

◆ ~Engine()

ben_bot::Engine::~Engine ( )
overridedefault

◆ Engine() [2/3]

ben_bot::Engine::Engine ( const Engine & )
delete

◆ Engine() [3/3]

ben_bot::Engine::Engine ( Engine && )
delete

Member Function Documentation

◆ abort_search()

void ben_bot::Engine::abort_search ( )
inlineoverrideprivatevirtual

This function is called when the search should be exited.

Reimplemented from chess::uci::EngineBase.

Definition at line 74 of file Engine.hpp.

◆ get_author()

auto ben_bot::Engine::get_author ( ) const -> string_view
inlinenodiscardoverrideprivatevirtual

This must return the name of the engine's author.

Implements chess::uci::EngineBase.

Definition at line 66 of file Engine.hpp.

◆ get_custom_uci_commands()

auto ben_bot::Engine::get_custom_uci_commands ( ) const -> CommandList
inlinenodiscardoverrideprivatevirtualnoexcept

Subclasses should overload this to return their custom UCI commands.

Reimplemented from chess::uci::EngineBase.

Definition at line 87 of file Engine.hpp.

◆ get_custom_uci_options()

auto ben_bot::Engine::get_custom_uci_options ( ) -> OptionList
inlinenodiscardoverrideprivatevirtualnoexcept

Subclasses should overload this to return their custom UCI options.

Reimplemented from chess::uci::EngineBase.

Definition at line 82 of file Engine.hpp.

◆ get_name()

auto ben_bot::Engine::get_name ( ) const -> std::string
nodiscardoverrideprivatevirtual

This must return the name of the engine. The returned string may optionally contain the engine's current version, such as BenBot 1.2.0.

Implements chess::uci::EngineBase.

◆ get_standard_uci_commands()

auto chess::uci::EngineBase::get_standard_uci_commands ( ) const -> CommandList
inlinenodiscardnoexceptinherited

Returns the engine's list of supported standard UCI commands.

Definition at line 174 of file EngineBase.hpp.

◆ get_standard_uci_options()

auto chess::uci::EngineBase::get_standard_uci_options ( ) -> OptionList
inlinenodiscardnoexceptinherited

Returns the engine's list of supported standard UCI commands.

Definition at line 195 of file EngineBase.hpp.

◆ go() [1/2]

void ben_bot::Engine::go ( const uci::GoCommandOptions & opts)
overrideprivate

◆ go() [2/2]

virtual void chess::uci::EngineBase::go ( const GoCommandOptions & opts)
pure virtualinherited

Called when the "go" command is received. The engine should begin searching. After this function has been called, the engine should print to stdout a line of the form "bestmove <from><to>".

◆ handle_command()

void chess::uci::EngineBase::handle_command ( string_view command)
inherited

Handles a UCI command. Typically you will not call this directly, you'll just invoke loop(), but this method can be used to manually invoke UCI commands if needed.

See also
loop()

◆ handle_registration()

virtual void chess::uci::EngineBase::handle_registration ( const RegisterOptions & opts)
inlinevirtualinherited

Called when the user send a "register" command. The engine may simply do nothing if it does not require registration.

Definition at line 168 of file EngineBase.hpp.

◆ is_debug_mode()

auto chess::uci::EngineBase::is_debug_mode ( ) const -> bool
inlinenodiscardnoexceptinherited

Returns true if the engine's debugging mode is active.

Definition at line 201 of file EngineBase.hpp.

◆ is_searching()

auto ben_bot::Engine::is_searching ( ) const -> bool
inlineoverrideprivatevirtualnoexcept

This function must return true if a search is currently in progress. This function should be thread-safe.

Implements chess::uci::EngineBase.

Definition at line 80 of file Engine.hpp.

◆ loop()

void chess::uci::EngineBase::loop ( )
inherited

Runs the engine's event loop. This function blocks while reading from stdin. The calling thread becomes the engine's "main thread".

See also
handle_command()

◆ new_game()

void ben_bot::Engine::new_game ( bool firstCall)
overrideprivatevirtual

This function will be called when the "ucinewgame" command is received. This should flush any game-specific data structures such as hash tables, transposition table, etc. wait() will be called after this, before the next search begins.

Parameters
firstCallTrue if this is the first time new_game() has been called.

Reimplemented from chess::uci::EngineBase.

◆ operator=() [1/2]

Engine & ben_bot::Engine::operator= ( const Engine & )
delete

◆ operator=() [2/2]

Engine & ben_bot::Engine::operator= ( Engine && )
delete

◆ ponder_hit()

void ben_bot::Engine::ponder_hit ( )
inlineoverrideprivatevirtual

This function is called when the "ponderhit" command is received. This means that the engine was told to ponder on the same move the user has played. The engine should continue searching but switch from pondering to normal search.

Reimplemented from chess::uci::EngineBase.

Definition at line 76 of file Engine.hpp.

◆ read_config_file()

void ben_bot::Engine::read_config_file ( const std::filesystem::path & file)

Loads the engine's state from a configuration file at the given path.

◆ resize_transposition_table()

void ben_bot::Engine::resize_transposition_table ( const size_t sizeMB)
inlineoverrideprivatevirtual

Subclasses should implement this to resize their transposition table.

Reimplemented from chess::uci::EngineBase.

Definition at line 117 of file Engine.hpp.

◆ set_debug_mode()

void chess::uci::EngineBase::set_debug_mode ( const bool shouldDebug)
inlinenoexceptinherited

Sets the engine's debugging mode.

Definition at line 207 of file EngineBase.hpp.

◆ set_ponder()

void ben_bot::Engine::set_ponder ( const bool shouldPonder)
inlineoverrideprivatevirtual

Subclasses can implement this to be informed when the ponder parameter changes.

Reimplemented from chess::uci::EngineBase.

Definition at line 122 of file Engine.hpp.

◆ set_position()

void ben_bot::Engine::set_position ( const Position & pos)
inlineoverrideprivatevirtual

Called when a new position is received from the GUI.

Reimplemented from chess::uci::EngineBase.

Definition at line 70 of file Engine.hpp.

◆ set_sanitize_positions()

void chess::uci::EngineBase::set_sanitize_positions ( const bool shouldSanitize)
inlinenoexceptinherited

Tells the base class whether to sanitize incoming positions when processing the position command. When sanitizing is on, after evaluating each position command, the engine performs some basic checks to determine if the position is illegal, and if so, prints a diagnostic message and reverts the internal board to the previous position.

Definition at line 219 of file EngineBase.hpp.

◆ wait()

void ben_bot::Engine::wait ( )
inlineoverrideprivatevirtual

This function will be called when the "isready" command is received, and may block while waiting for background tasks to complete. This function should be thread-safe.

Reimplemented from chess::uci::EngineBase.

Definition at line 78 of file Engine.hpp.

Member Data Documentation

◆ opt_Hash

IntOption chess::uci::EngineBase::opt_Hash
inherited
Initial value:
{
"Hash",
1, 2048, 16,
"Sets the transposition table size (in MB)",
[this](const int sizeMB) {
assert(sizeMB >= 0);
resize_transposition_table(static_cast<size_t>(sizeMB));
}
}
void resize_transposition_table(const size_t sizeMB) override
Definition Engine.hpp:117

Standard UCI option for hash size.

Definition at line 234 of file EngineBase.hpp.

◆ opt_Ponder

BoolOption chess::uci::EngineBase::opt_Ponder
inherited
Initial value:
{
"Ponder",
false,
"Controls whether pondering is allowed.",
[this](const bool shouldPonder) { set_ponder(shouldPonder); }
}
void set_ponder(const bool shouldPonder) override
Definition Engine.hpp:122

Standard UCI option for pondering. The engine doesn't start pondering on its own without explicitly being told to via another go command; this option is needed to inform the GUI that the engine supports pondering, and also gives the engine the opportunity to adjust its time management algorithm when pondering is enabled.

Definition at line 250 of file EngineBase.hpp.


The documentation for this class was generated from the following file: