My Project
Classes | Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | List of all members
osl::RepetitionCounter Class Reference

千日手の検出. More...

#include <repetitionCounter.h>

Classes

struct  Table
 

Public Types

typedef std::list< 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 を(これから)指すことを記録
 
void push (const NumEffectState &state)
 指した後の局面を記録
 
void push (const HashKey &key, const NumEffectState &state)
 指した後の局面を記録
 
void pop ()
 
void clear ()
 
const Sennichite isSennichite (const NumEffectState &state, Move move) const
 
const Sennichite isAlmostSennichite (const HashKey &key) const
 このまま同形を繰り返したらどの結果になるかを返す
 
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 の手を最後に登録した指手番号.
 
int getFirstMove (const HashKey &key) const
 key の手を最初に登録した指手番号.
 
int checkCount (Player attack) const
 
const HashKeyStackhistory () 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

std::unique_ptr< Tabletable
 
CArray< std::vector< int >, 2 > continuous_check
 
HashKeyStack hash_history
 

Detailed Description

千日手の検出.

連続王手の千日手(同一局面の最初と4回目の間の一方の指し手が王手のみだった場合)は、連続王手をかけていたほうが負け。 http://www.computer-shogi.org/wcsc14/youryou.html

Definition at line 20 of file repetitionCounter.h.

Member Typedef Documentation

◆ list_t

typedef std::list<int> osl::RepetitionCounter::list_t

Definition at line 28 of file repetitionCounter.h.

Constructor & Destructor Documentation

◆ RepetitionCounter() [1/3]

osl::RepetitionCounter::RepetitionCounter ( )

Definition at line 34 of file repetitionCounter.cc.

References clear().

◆ RepetitionCounter() [2/3]

osl::RepetitionCounter::RepetitionCounter ( const RepetitionCounter c)

Definition at line 40 of file repetitionCounter.cc.

References isConsistent(), and table.

◆ RepetitionCounter() [3/3]

osl::RepetitionCounter::RepetitionCounter ( const NumEffectState initial)
explicit

Definition at line 51 of file repetitionCounter.cc.

References clear(), and push().

◆ ~RepetitionCounter()

osl::RepetitionCounter::~RepetitionCounter ( )

Definition at line 60 of file repetitionCounter.cc.

Member Function Documentation

◆ checkCount()

int osl::RepetitionCounter::checkCount ( Player  attack) const
inline

◆ clear()

void osl::RepetitionCounter::clear ( )

◆ countRepetition()

unsigned int osl::RepetitionCounter::countRepetition ( const HashKey key) const

Definition at line 190 of file repetitionCounter.cc.

◆ distanceToSennichite()

const std::pair< osl::Sennichite, int > osl::RepetitionCounter::distanceToSennichite ( const HashKey key) const
Returns
pair<isAlmostSennichite, count>

Definition at line 181 of file repetitionCounter.cc.

References osl::Sennichite::NORMAL().

◆ getFirstMove()

int osl::RepetitionCounter::getFirstMove ( const HashKey key) const

key の手を最初に登録した指手番号.

Returns
初めての局面では-1

Definition at line 152 of file repetitionCounter.cc.

Referenced by isAlmostSennichite().

◆ getLastMove()

int osl::RepetitionCounter::getLastMove ( const HashKey key) const

key の手を最後に登録した指手番号.

Returns
初めての局面では-1

Definition at line 144 of file repetitionCounter.cc.

◆ getRepetitions()

const list_t osl::RepetitionCounter::getRepetitions ( const HashKey key) const

Definition at line 199 of file repetitionCounter.cc.

◆ history()

const HashKeyStack & osl::RepetitionCounter::history ( ) const
inline

Definition at line 95 of file repetitionCounter.h.

References hash_history.

Referenced by osl::checkmate::DualDfpn::writeRootHistory().

◆ isAlmostSennichite()

const Sennichite osl::RepetitionCounter::isAlmostSennichite ( const HashKey key) const
inline

このまま同形を繰り返したらどの結果になるかを返す

Definition at line 69 of file repetitionCounter.h.

References getFirstMove(), isAlmostSennichiteUnsafe(), and osl::Sennichite::NORMAL().

◆ isAlmostSennichiteUnsafe()

const Sennichite osl::RepetitionCounter::isAlmostSennichiteUnsafe ( int  first_move) const
inlineprivate

◆ isConsistent()

bool osl::RepetitionCounter::isConsistent ( ) const

◆ isSennichite()

const osl::Sennichite osl::RepetitionCounter::isSennichite ( const NumEffectState state,
Move  move 
) const

◆ maybeEqual()

bool osl::RepetitionCounter::maybeEqual ( const RepetitionCounter l,
const RepetitionCounter r 
)
static

Definition at line 256 of file repetitionCounter.cc.

References continuous_check, hash_history, and table.

◆ order()

int osl::RepetitionCounter::order ( ) const
inlineprivate

Definition at line 26 of file repetitionCounter.h.

References hash_history, and osl::hash::HashKeyStack::size().

Referenced by isAlmostSennichiteUnsafe().

◆ pop()

void osl::RepetitionCounter::pop ( )

Definition at line 119 of file repetitionCounter.cc.

References osl::alt(), and osl::hash::HashKey128::turn().

◆ printMatches()

void osl::RepetitionCounter::printMatches ( const HashKey key) const

Definition at line 209 of file repetitionCounter.cc.

◆ push() [1/4]

void osl::RepetitionCounter::push ( const HashKey key,
const NumEffectState state 
)

指した後の局面を記録

Definition at line 91 of file repetitionCounter.cc.

References osl::NumEffectState::inCheck().

◆ push() [2/4]

void osl::RepetitionCounter::push ( const HashKey new_key,
bool  is_check 
)
private

Definition at line 65 of file repetitionCounter.cc.

References osl::alt(), and osl::hash::HashKey128::turn().

Referenced by RepetitionCounter().

◆ push() [3/4]

void osl::RepetitionCounter::push ( const NumEffectState state)

指した後の局面を記録

Definition at line 98 of file repetitionCounter.cc.

◆ push() [4/4]

void osl::RepetitionCounter::push ( const NumEffectState state,
Move  move 
)

state の状態で move を(これから)指すことを記録

Definition at line 104 of file repetitionCounter.cc.

References osl::NumEffectState::isCheck(), osl::Move::isPass(), osl::Move::isValidOrPass(), osl::hash::HashKey::newHashWithMove(), osl::Move::player(), and osl::SimpleState::turn().

Member Data Documentation

◆ continuous_check

CArray<std::vector<int>, 2> osl::RepetitionCounter::continuous_check
private

Definition at line 24 of file repetitionCounter.h.

Referenced by checkCount(), clear(), isAlmostSennichiteUnsafe(), and maybeEqual().

◆ hash_history

HashKeyStack osl::RepetitionCounter::hash_history
private

Definition at line 25 of file repetitionCounter.h.

Referenced by clear(), history(), maybeEqual(), and order().

◆ table

std::unique_ptr<Table> osl::RepetitionCounter::table
private

Definition at line 23 of file repetitionCounter.h.

Referenced by clear(), maybeEqual(), and RepetitionCounter().


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