BenBot 1.7.5
A chess engine
Loading...
Searching...
No Matches
KillerMoves.hpp
Go to the documentation of this file.
1/*
2 * ======================================================================================
3 *
4 * ░▒▓███████▓▒░░▒▓████████▓▒░▒▓███████▓▒░ ░▒▓███████▓▒░ ░▒▓██████▓▒░▒▓████████▓▒░
5 * ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░
6 * ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░
7 * ░▒▓███████▓▒░░▒▓██████▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓███████▓▒░░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░
8 * ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░
9 * ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░
10 * ░▒▓███████▓▒░░▒▓████████▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓███████▓▒░ ░▒▓██████▓▒░ ░▒▓█▓▒░
11 *
12 * ======================================================================================
13 */
14
19
20#pragma once
21
22#include <algorithm>
23#include <array>
24#include <cassert>
25#include <cstddef> // IWYU pragma: keep - for size_t
29#include <span>
30#include <vector>
31
32namespace ben_bot {
33
34using chess::moves::Move;
35using std::size_t;
36
43struct KillerMoves final {
45 void clear()
46 {
47 for (auto& list : lists)
48 list.clear();
49 }
50
52 void store(const size_t plyFromRoot, const Move move)
53 {
54 assert(plyFromRoot < search::MAX_PLY);
55
56 auto& list = lists.at(plyFromRoot);
57
58 if (not std::ranges::contains(list, move))
59 list.emplace_back(move);
60 }
61
63 [[nodiscard]] auto get(const size_t plyFromRoot) const noexcept -> std::span<const Move>
64 {
65 return lists.at(plyFromRoot);
66 }
67
68private:
69 using Killers = std::vector<Move>;
70
71 std::array<Killers, search::MAX_PLY + 1uz> lists { };
72};
73
74} // namespace ben_bot
constexpr auto MAX_PLY
Definition Constants.hpp:27
void store(const size_t plyFromRoot, const Move move)
auto get(const size_t plyFromRoot) const noexcept -> std::span< const Move >