8 #include <boost/static_assert.hpp> 
   20       template <Player Defense,Direction DIR>
 
   22                                     PieceMask& pins, PieceMask 
const& onBoard)
 
   30         int num1=state.longEffectNumTable()[num][DIR];
 
   36       template<Player Defense>
 
   40         PieceMask mask=state.piecesOnBoard(
alt(Defense));
 
   41         findDirectionStep<Defense,UL>(state,
target,pins,mask);
 
   42         findDirectionStep<Defense,U>(state,
target,pins,mask);
 
   43         findDirectionStep<Defense,UR>(state,
target,pins,mask);
 
   44         findDirectionStep<Defense,L>(state,
target,pins,mask);
 
   45         findDirectionStep<Defense,R>(state,
target,pins,mask);
 
   46         findDirectionStep<Defense,DL>(state,
target,pins,mask);
 
   47         findDirectionStep<Defense,D>(state,
target,pins,mask);
 
   48         findDirectionStep<Defense,DR>(state,
target,pins,mask);
 
   56           return makeStep<BLACK>(state,
target);
 
   58           return makeStep<WHITE>(state,
target);
 
   60       static PieceMask 
make(
const NumEffectState& state,
Player defense)
 
   72       template <Direction DIR>
 
   74                                 Player defense, PieceMask& pins)
 
   77         const Piece pin = state.nextPiece(target, diff);
 
   79         const Piece attack_piece = state.nextPiece(pin.
square(), diff);
 
   94         assert(target==state.kingSquare<P>());
 
  102         NumBitmapEffect effect=state.effectSetAt(pos);
 
  119         const Piece attack_piece2 = state.nextPiece(pin.
square(), diff);
 
  120         return attack_piece == attack_piece2;
 
  125         return state.hasEffectByPiece(attack_piece, pin.
square());
 
  131         const Piece pin = state.nextPiece(target, diff);
 
  133         if (pin.
owner() != defense)
 
  139       template <Ptype PTYPE>
 
  146              i < PtypeTraits<PTYPE>::indexLimit; ++i)
 
  148           const Piece attack_piece = state.pieceOf(i);
 
  152             const Offset32 diff(attack_position, target);
 
  162             findOffset(state, attack_piece, target, defense, 
 
  185       template <Player Defense,Direction DIR>
 
  196           if(!state.pieceAt(pos).pieceIsBlack()) 
return;
 
  199           if(state.pieceAt(pos).pieceIsBlack()) 
return;
 
  201         int num1=state.longEffectNumTable()[num][DIR];
 
  204           if(!state.pieceOf(num1).pieceIsBlack())
 
  208           if(state.pieceOf(num1).pieceIsBlack())
 
  212       template<Player Defense>
 
  216         findDirectionStep<Defense,UL>(state,
target,pins);
 
  217         findDirectionStep<Defense,U>(state,
target,pins);
 
  218         findDirectionStep<Defense,UR>(state,
target,pins);
 
  219         findDirectionStep<Defense,L>(state,
target,pins);
 
  220         findDirectionStep<Defense,R>(state,
target,pins);
 
  221         findDirectionStep<Defense,DL>(state,
target,pins);
 
  222         findDirectionStep<Defense,D>(state,
target,pins);
 
  223         findDirectionStep<Defense,DR>(state,
target,pins);
 
  231           return makeStep<BLACK>(state,
target);
 
  233           return makeStep<WHITE>(state,
target);
 
  235       template<Player Defense>
 
  238         PieceMask pins=PinOrOpen::makeStep<Defense>(state,
target);;
 
  239         pins &= state.piecesOnBoard(Defense);
 
  247           return makeStep1<BLACK>(state,
target);
 
  249           return makeStep1<WHITE>(state,
target);
 
  265       static PieceMask 
make(
const NumEffectState& state, 
Player defense)
 
  271         return makeNaive(state, state.kingSquare(defense), defense);
 
  282         const PieceMask pins = 
make(state, defense);
 
  283         return pins.countBit();
 
  288         const PieceMask pins = 
make(state, target, defense);
 
  289         return pins.countBit();