My Project
additionalOrShadow.h
Go to the documentation of this file.
1 /* additionalOrShadow.h
2  */
3 #ifndef OSL_ADDITIONALORSHADOW_H
4 #define OSL_ADDITIONALORSHADOW_H
5 
6 #include "osl/numEffectState.h"
7 #include "osl/bits/boardTable.h"
8 
9 namespace osl
10 {
11  namespace effect_util
12  {
14  {
15  template <int count_max>
16  static int count(const PieceVector& direct_pieces,
17  const NumEffectState& state,
18  Square target, Player attack)
19  {
20  int result=0;
21  for (Piece p: direct_pieces)
22  {
23  const Square from = p.square();
24  int num = p.number();
25  const Direction long_d=Board_Table.getLongDirection<BLACK>(Offset32(target,from));
26  if(!isLong(long_d)) continue; // unpromoted Knightを除いておくのとどちらが得か?
27  Direction d=longToShort(long_d);
28  for(;;){
29  num=state.longEffectNumTable()[num][d];
30  if(Piece::isEmptyNum(num) || state.pieceOf(num).owner()!=attack)
31  break;
32  if (++result >= count_max)
33  return result;
34  }
35  }
36  return result;
37  }
38 
39  };
40  }
41 } // namespace osl
42 
43 #endif /* OSL_ADDITIONALORSHADOW_H */
44 // ;;; Local Variables:
45 // ;;; mode:c++
46 // ;;; c-basic-offset:2
47 // ;;; coding:utf-8
48 // ;;; End:
osl::Square
Definition: basic_type.h:532
osl::Board_Table
const BoardTable Board_Table
Definition: tables.cc:95
boardTable.h
osl::Offset32
Offset32Base< 8, 9 > Offset32
Definition: offset32.h:63
osl::NumEffectState::longEffectNumTable
const EffectedNumTable & longEffectNumTable() const
Definition: numEffectState.h:124
osl::BoardTable::getLongDirection
Direction getLongDirection(Offset32 offset32) const
Definition: boardTable.h:71
osl::Piece
駒.
Definition: basic_type.h:788
osl::SimpleState::pieceOf
const Piece pieceOf(int num) const
Definition: simpleState.h:76
osl::Piece::isEmptyNum
static bool isEmptyNum(int num)
Definition: basic_type.h:916
osl::Square::square
unsigned int square
Definition: basic_type.h:533
osl::PieceVector
Definition: container.h:305
osl::Piece::owner
Player owner() const
Definition: basic_type.h:963
osl::effect_util::AdditionalOrShadow::count
static int count(const PieceVector &direct_pieces, const NumEffectState &state, Square target, Player attack)
Definition: additionalOrShadow.h:16
osl::NumEffectState
利きを持つ局面
Definition: numEffectState.h:34
osl::Direction
Direction
Definition: basic_type.h:310
osl::effect_util::AdditionalOrShadow
Definition: additionalOrShadow.h:14
osl::isLong
constexpr bool isLong(Direction d)
Definition: basic_type.h:350
osl::longToShort
constexpr Direction longToShort(Direction d)
Definition: basic_type.h:380
osl::BLACK
@ BLACK
Definition: basic_type.h:9
osl::Player
Player
Definition: basic_type.h:8
numEffectState.h
osl
Definition: additionalEffect.h:6