5 #include <boost/foreach.hpp>
11 PieceMask direct = state.effectSetAt(target) & state.piecesOnBoard(attack);
15 direct &= (state.promotedPieces() | mask);
17 while (direct.any()) {
18 const int num = direct.takeOneBit();
21 const int num1=state.longEffectNumTable()[num][d];
22 if(!Piece::isEmptyNum(num1) && state.pieceOf(num1).owner()==attack)
return true;
27 template <
int count_max>
32 PieceVector direct_pieces;
33 EffectUtil::findEffect(attack, state, target, direct_pieces);
34 return AdditionalOrShadow::count<count_max>
35 (direct_pieces, state,
target, attack);
42 return count<1>(state,
target, attack);
49 return count<2>(state,
target, attack);
54 const PieceVector& direct_effects,
55 PieceVector& black, PieceVector& white)
57 BOOST_FOREACH(
Piece p, direct_effects)
65 Piece candidate=state.nextPiece(from, step);
70 candidate=state.nextPiece(candidate.
square(), step))
77 black.push_back(candidate);
79 white.push_back(candidate);
87 PieceVector& black, PieceVector& white)
89 PieceVector direct_pieces;
90 EffectUtil::findEffect(
BLACK, state, target, direct_pieces);
91 find(state, target, direct_pieces, black, white);
93 direct_pieces.clear();
94 EffectUtil::findEffect(
WHITE, state, target, direct_pieces);
95 find(state, target, direct_pieces, black, white);
100 int& black,
int& white)
102 PieceVector black_pieces, white_pieces;
103 find(state, target, black_pieces, white_pieces);
104 black = black_pieces.size();
105 white = white_pieces.size();