My Project
stateInfo.h
Go to the documentation of this file.
1 /* stateInfo.h
2  */
3 #ifndef OSL_MOVE_PROBABILITY_STATEINFO_H
4 #define OSL_MOVE_PROBABILITY_STATEINFO_H
5 
7 #include "osl/numEffectState.h"
8 #include "osl/bits/king8Info.h"
9 #include "osl/progress.h"
10 #include "osl/container.h"
11 #include "osl/container/square8.h"
13 #include <vector>
14 #include <algorithm>
15 
16 namespace osl
17 {
18  namespace move_probability
19  {
20  struct StateInfo
21  {
45  bool dirty;
46 
47  StateInfo() : state(0), history(0), progress16(0), dirty(true)
48  {
49  }
51  Move t=Move())
52  : state(&s), history(&h), progress16(p), dirty(true)
53  {
54  clearOldCache();
55  threatmate_move = t;
56  finishUpdate();
57  }
58  void reset0(const NumEffectState& s, Progress16 p)
59  {
60  dirty = true;
61  state = &s;
62  progress16 = p;
66  clearOldCache();
67  }
68  void reset1(const MoveStack& h)
69  {
70  history = &h;
71  }
72  void finishUpdate();
73  void reset(const NumEffectState& s, Progress16 p,
74  const MoveStack& h, Move threatmate_move=Move())
75  {
76  reset0(s, p);
77  reset1(h);
79  finishUpdate();
80  }
81  void setThreatmate(Move move) { threatmate_move = move; }
82 
83  bool pinByOpposingSliders(Piece p) const
84  {
87  }
89  {
90  return King8Info(state->Iking8Info(pl));
91  }
92  int progress8() const { return progress16.value()/2; }
93  static std::pair<Piece,Square> findCheckmateDefender(const NumEffectState& state, Player king);
94  static Move findShortThreatmate(const NumEffectState&, Move last_move);
95  private:
96  void clearOldCache();
97  void updateDelayed();
98  void makePinOfLongPieces();
100  void updatePinnedGenerals(Player owner);
101  };
102  bool operator==(const StateInfo& l, const StateInfo& r);
103  }
104 }
105 
106 #endif /* OSL_MOVE_PROBABILITY_STATEINFO_H */
107 // ;;; Local Variables:
108 // ;;; mode:c++
109 // ;;; c-basic-offset:2
110 // ;;; End:
osl::progress::Progress16
ProgressN< 16 > Progress16
Definition: progress.h:42
osl::move_probability::StateInfo::attack_shadow
CArray2d< bool, 40, 2 > attack_shadow
Definition: stateInfo.h:31
osl::move_probability::StateInfo::threatmate_move
Move threatmate_move
Definition: stateInfo.h:35
osl::move_probability::StateInfo::bookmove
CArray< Move, 2 > bookmove
Definition: stateInfo.h:44
osl::move_probability::StateInfo::pin_by_opposing_sliders
PieceVector pin_by_opposing_sliders
Definition: stateInfo.h:25
osl::move_probability::StateInfo::possible_threatmate_ptype
unsigned int possible_threatmate_ptype
Definition: stateInfo.h:43
osl::move_probability::StateInfo::makePinOfLongPieces
void makePinOfLongPieces()
Definition: stateInfo.cc:103
osl::move_probability::StateInfo::dirty
bool dirty
Definition: stateInfo.h:45
osl::move_probability::operator==
bool operator==(const PinnedGeneral &l, const PinnedGeneral &r)
Definition: pinnedGeneral.h:20
osl::NumEffectState::Iking8Info
uint64_t Iking8Info(Player king) const
Definition: numEffectState.h:78
osl::move_probability::StateInfo::StateInfo
StateInfo()
Definition: stateInfo.h:47
osl::move_probability::StateInfo::updatePinnedGenerals
void updatePinnedGenerals(Player owner)
Definition: stateInfo.cc:185
osl::Move
圧縮していない moveの表現 .
Definition: basic_type.h:1052
osl::move_probability::StateInfo::pattern_cache
CArray< pattern_square_t, Square::SIZE > pattern_cache
Definition: stateInfo.h:30
osl::move_probability::StateInfo::king8_long_pieces
PieceVector king8_long_pieces
Definition: stateInfo.h:25
osl::move_probability::StateInfo::long_attack_cache
CArray2d< long_attack_t, 40, 8 > long_attack_cache
Definition: stateInfo.h:28
osl::move_probability::StateInfo::pinByOpposingSliders
bool pinByOpposingSliders(Piece p) const
Definition: stateInfo.h:83
osl::Ptype
Ptype
駒の種類を4ビットでコード化する
Definition: basic_type.h:84
osl::move_probability::StateInfo
Definition: stateInfo.h:21
osl::FixedCapacityVector< int, 8 >
osl::move_probability::StateInfo::king8Info
King8Info king8Info(Player pl) const
Definition: stateInfo.h:88
osl::FixedCapacityVector::begin
iterator begin()
Definition: container.h:198
osl::Piece
駒.
Definition: basic_type.h:788
osl::move_probability::StateInfo::updateDelayed
void updateDelayed()
osl::move_probability::StateInfo::clearOldCache
void clearOldCache()
Definition: stateInfo.cc:14
osl::move_probability::StateInfo::long_attack_t
FixedCapacityVector< int, 8 > long_attack_t
Definition: stateInfo.h:27
osl::move_probability::StateInfo::sendoffs
Square8 sendoffs
Definition: stateInfo.h:36
osl::move_probability::StateInfo::state
const NumEffectState * state
Definition: stateInfo.h:22
osl::move_probability::StateInfo::findCheckmateDefender
static std::pair< Piece, Square > findCheckmateDefender(const NumEffectState &state, Player king)
Definition: stateInfo.cc:160
osl::move_probability::StateInfo::progress16
Progress16 progress16
Definition: stateInfo.h:24
osl::move_probability::StateInfo::last_add_effect
PieceMask last_add_effect
Definition: stateInfo.h:32
osl::move_probability::StateInfo::reset0
void reset0(const NumEffectState &s, Progress16 p)
Definition: stateInfo.h:58
osl::container::MoveStack
Move のstack.
Definition: moveStack.h:15
osl::move_probability::StateInfo::finishUpdate
void finishUpdate()
Definition: stateInfo.cc:59
container.h
osl::move_probability::StateInfo::setThreatmate
void setThreatmate(Move move)
Definition: stateInfo.h:81
osl::FixedCapacityVector::end
iterator end()
Definition: container.h:199
moveStack.h
osl::move_probability::StateInfo::pin
CArray< PieceMask, 2 > pin
Definition: stateInfo.h:34
osl::move_probability::StateInfo::StateInfo
StateInfo(const NumEffectState &s, Progress16 p, const MoveStack &h, Move t=Move())
Definition: stateInfo.h:50
osl::PieceVector
Definition: container.h:305
osl::container::Square8
Definition: square8.h:16
osl::FixedCapacityVector::clear
void clear()
Definition: container.h:215
osl::move_probability::StateInfo::checkmate_defender
CArray< std::pair< Piece, Square >, 2 > checkmate_defender
Definition: stateInfo.h:42
osl::move_probability::StateInfo::changed_effects
BoardMask changed_effects
Definition: stateInfo.h:41
osl::NumEffectState
利きを持つ局面
Definition: numEffectState.h:34
osl::move_probability::StateInfo::findShortThreatmate
static Move findShortThreatmate(const NumEffectState &, Move last_move)
Definition: stateInfo.cc:222
osl::move_probability::StateInfo::threatened
CArray< Piece, 2 > threatened
Definition: stateInfo.h:26
king8Info.h
osl::move_probability::StateInfo::move_candidate_exists
CArray< bool, 2 > move_candidate_exists
Definition: stateInfo.h:39
square8.h
progress.h
osl::move_probability::StateInfo::progress8
int progress8() const
Definition: stateInfo.h:92
osl::move_probability::StateInfo::reset1
void reset1(const MoveStack &h)
Definition: stateInfo.h:68
osl::move_probability::StateInfo::history
const MoveStack * history
Definition: stateInfo.h:23
osl::move_probability::StateInfo::last_move_ptype5
Ptype last_move_ptype5
Definition: stateInfo.h:33
osl::move_probability::StateInfo::makeLongAttacks
void makeLongAttacks()
osl::Player
Player
Definition: basic_type.h:8
numEffectState.h
osl::move_probability::StateInfo::pinned_gs_t
FixedCapacityVector< PinnedGeneral, 64 > pinned_gs_t
Definition: stateInfo.h:37
osl::CArray
Definition: container.h:20
osl::move_probability::StateInfo::exchange_pins
CArray< pinned_gs_t, 2 > exchange_pins
Definition: stateInfo.h:38
osl::container::BoardMask
11 x 12
Definition: boardMask.h:21
osl::PieceMask
駒番号のビットセット.
Definition: pieceMask.h:21
osl::checkmate::King8Info
敵玉の8近傍の状態を表す.
Definition: king8Info.h:29
osl::move_probability::StateInfo::copy
NumEffectState copy
Definition: stateInfo.h:40
osl
Definition: additionalEffect.h:6
osl::move_probability::StateInfo::pattern_square_t
CArray< int, 16 > pattern_square_t
Definition: stateInfo.h:29
osl::move_probability::StateInfo::reset
void reset(const NumEffectState &s, Progress16 p, const MoveStack &h, Move threatmate_move=Move())
Definition: stateInfo.h:73
pinnedGeneral.h