千日手の検出. More...
#include <repetitionCounter.h>
Classes | |
struct | Table |
Public Types | |
typedef osl::slist< int > | list_t |
Public Member Functions | |
RepetitionCounter () | |
RepetitionCounter (const RepetitionCounter &c) | |
RepetitionCounter (const NumEffectState &initial) | |
~RepetitionCounter () | |
void | push (const NumEffectState &state, Move move) |
state の状態で move を(これから)指すことを記録 More... | |
void | push (const NumEffectState &state) |
指した後の局面を記録 More... | |
void | push (const HashKey &key, const NumEffectState &state) |
指した後の局面を記録 More... | |
void | pop () |
void | clear () |
const Sennichite | isSennichite (const NumEffectState &state, Move move) const |
const Sennichite | isAlmostSennichite (const HashKey &key) const |
このまま同形を繰り返したらどの結果になるかを返す More... | |
const std::pair< Sennichite, int > | distanceToSennichite (const HashKey &key) const |
unsigned int | countRepetition (const HashKey &) const |
const list_t | getRepetitions (const HashKey &) const |
void | printMatches (const HashKey &key) const |
int | getLastMove (const HashKey &key) const |
key の手を最後に登録した指手番号. More... | |
int | getFirstMove (const HashKey &key) const |
key の手を最初に登録した指手番号. More... | |
int | checkCount (Player attack) const |
const HashKeyStack & | history () const |
bool | isConsistent () const |
Static Public Member Functions | |
static bool | maybeEqual (const RepetitionCounter &l, const RepetitionCounter &r) |
Private Member Functions | |
int | order () const |
void | push (const HashKey &new_key, bool is_check) |
const Sennichite | isAlmostSennichiteUnsafe (int first_move) const |
Private Attributes | |
boost::scoped_ptr< Table > | table |
CArray< osl::vector< int >, 2 > | continuous_check |
HashKeyStack | hash_history |
千日手の検出.
連続王手の千日手(同一局面の最初と4回目の間の一方の指し手が王手のみだった場合)は、連続王手をかけていたほうが負け。 http://www.computer-shogi.org/wcsc14/youryou.html
Definition at line 22 of file repetitionCounter.h.
typedef osl::slist<int> osl::RepetitionCounter::list_t |
Definition at line 30 of file repetitionCounter.h.
osl::RepetitionCounter::RepetitionCounter | ( | ) |
Definition at line 42 of file repetitionCounter.cc.
References clear().
osl::RepetitionCounter::RepetitionCounter | ( | const RepetitionCounter & | c) |
Definition at line 48 of file repetitionCounter.cc.
References isConsistent(), and table.
|
explicit |
Definition at line 59 of file repetitionCounter.cc.
osl::RepetitionCounter::~RepetitionCounter | ( | ) |
Definition at line 68 of file repetitionCounter.cc.
|
inline |
Definition at line 93 of file repetitionCounter.h.
References continuous_check.
Referenced by processRecord(), osl::game_playing::GameState::rejectByStack(), and osl::checkmate::DualDfpn::writeRootHistory().
void osl::RepetitionCounter::clear | ( | ) |
Definition at line 27 of file repetitionCounter.cc.
References continuous_check, hash_history, initial_capacity, and table.
Referenced by RepetitionCounter().
unsigned int osl::RepetitionCounter::countRepetition | ( | const HashKey & | key) | const |
Definition at line 199 of file repetitionCounter.cc.
Referenced by processRecord().
const std::pair< osl::Sennichite, int > osl::RepetitionCounter::distanceToSennichite | ( | const HashKey & | key) | const |
Definition at line 190 of file repetitionCounter.cc.
References osl::Sennichite::NORMAL().
Referenced by osl::game_playing::HistoryToTable::adjustTable().
int osl::RepetitionCounter::getFirstMove | ( | const HashKey & | key) | const |
key の手を最初に登録した指手番号.
Definition at line 161 of file repetitionCounter.cc.
References result.
Referenced by isAlmostSennichite(), and processRecord().
int osl::RepetitionCounter::getLastMove | ( | const HashKey & | key) | const |
const list_t osl::RepetitionCounter::getRepetitions | ( | const HashKey & | key) | const |
Definition at line 208 of file repetitionCounter.cc.
|
inline |
Definition at line 97 of file repetitionCounter.h.
References hash_history.
Referenced by osl::search::SearchState2Core::currentHash(), and osl::checkmate::DualDfpn::writeRootHistory().
|
inline |
このまま同形を繰り返したらどの結果になるかを返す
Definition at line 71 of file repetitionCounter.h.
References getFirstMove(), isAlmostSennichiteUnsafe(), and osl::Sennichite::NORMAL().
Referenced by osl::game_playing::GameState::generateMoves(), and processRecord().
|
inlineprivate |
Definition at line 57 of file repetitionCounter.h.
References osl::BLACK, osl::Sennichite::BLACK_LOSE(), continuous_check, osl::Sennichite::DRAW(), order(), osl::WHITE, and osl::Sennichite::WHITE_LOSE().
Referenced by isAlmostSennichite().
bool osl::RepetitionCounter::isConsistent | ( | ) | const |
Definition at line 231 of file repetitionCounter.cc.
References osl::alt(), and order.
Referenced by RepetitionCounter().
const osl::Sennichite osl::RepetitionCounter::isSennichite | ( | const NumEffectState & | state, |
Move | move | ||
) | const |
Definition at line 175 of file repetitionCounter.cc.
References osl::Sennichite::NORMAL().
Referenced by processRecord().
|
static |
Definition at line 265 of file repetitionCounter.cc.
References continuous_check, hash_history, and table.
|
inlineprivate |
Definition at line 28 of file repetitionCounter.h.
References hash_history.
Referenced by isAlmostSennichiteUnsafe().
void osl::RepetitionCounter::pop | ( | ) |
Definition at line 128 of file repetitionCounter.cc.
References osl::alt(), and order.
Referenced by osl::search::SearchState2Core::popAfterApply().
void osl::RepetitionCounter::printMatches | ( | const HashKey & | key) | const |
Definition at line 218 of file repetitionCounter.cc.
|
private |
Definition at line 73 of file repetitionCounter.cc.
References osl::alt(), and order.
Referenced by processRecord(), RepetitionCounter(), and osl::search::SearchState2Core::updateRepetitionCounterAfterMove().
void osl::RepetitionCounter::push | ( | const NumEffectState & | state, |
Move | move | ||
) |
state の状態で move を(これから)指すことを記録
Definition at line 112 of file repetitionCounter.cc.
References osl::Move::isPass(), osl::Move::isValidOrPass(), and osl::Move::player().
void osl::RepetitionCounter::push | ( | const NumEffectState & | state) |
指した後の局面を記録
Definition at line 106 of file repetitionCounter.cc.
void osl::RepetitionCounter::push | ( | const HashKey & | key, |
const NumEffectState & | state | ||
) |
指した後の局面を記録
Definition at line 99 of file repetitionCounter.cc.
|
private |
Definition at line 26 of file repetitionCounter.h.
Referenced by checkCount(), clear(), isAlmostSennichiteUnsafe(), and maybeEqual().
|
private |
Definition at line 27 of file repetitionCounter.h.
Referenced by clear(), history(), maybeEqual(), and order().
|
private |
Definition at line 24 of file repetitionCounter.h.
Referenced by clear(), maybeEqual(), and RepetitionCounter().