13   typedef std::bitset<8> bs_t;
 
   34 template<Player P> 
inline 
   39  hasEnoughEffect(NumEffectState 
const& state,
Square target,
Square pos, 
const PieceMask& pinned,
 
   40                      const PieceMask& on_board_defense,
 
   43   assert(state.kingSquare(P)==
target);
 
   45   PieceMask pieceMask = state.effectSetAt(pos)&on_board_defense;
 
   46   if(pieceMask.none()) 
return false;
 
   47   PieceMask pieceMask1=pieceMask&~pinned;
 
   48   if(pieceMask1.any()) 
return true;
 
   50   assert(pieceMask.any());
 
   52     int num=pieceMask.takeOneBit();
 
   53     Piece p=state.pieceOf(num);
 
   59     if(dir1==dir) 
return true;
 
   60   } 
while(pieceMask.any());
 
   66 template<osl::Player P,osl::Direction Dir>
 
   69                          PieceMask on_board_defense)
 
   73   Piece p=state.pieceAt(pos);
 
   76   if(!state.hasEffectAt(P,pos)){
 
   79         return 0x1000000000000ull+(0x100010100ull<<static_cast<int>(Dir));
 
   81         return 0x1000000000000ull+(0x10100ull<<static_cast<int>(Dir));
 
   86   const bool has_enough_effect = hasEnoughEffect<altP>(state,
target,pos,pinned,on_board_defense,Dir);
 
   87   if(has_enough_effect){
 
   90         return 0x10100010000ull<<static_cast<int>(Dir);
 
   92         return 0x10000ull<<static_cast<int>(Dir);
 
   95       return 0x10000000000ull<<static_cast<int>(Dir);
 
   99       return 0x10101010001ull<<static_cast<int>(Dir);
 
  101       return 0x10000ull<<static_cast<int>(Dir);
 
  103       return 0x10001000000ull<<static_cast<int>(Dir);
 
  107 template<osl::Player P>
 
  109 #if (defined __GNUC__) && (! defined GPSONE) && (! defined GPSUSIONE) 
  114   PieceMask on_board_defense=state.piecesOnBoard(
alt(P));
 
  116   uint64_t canMoveMask=
 
  117     hasEffectMask<P,UR>(state,
target,pinned,on_board_defense)+
 
  118     hasEffectMask<P,R>(state,target,pinned,on_board_defense)+
 
  119     hasEffectMask<P,DR>(state,
target,pinned,on_board_defense)+
 
  120     hasEffectMask<P,U>(state,target,pinned,on_board_defense)+
 
  121     hasEffectMask<P,D>(state,
target,pinned,on_board_defense)+
 
  122     hasEffectMask<P,UL>(state,target,pinned,on_board_defense)+
 
  123     hasEffectMask<P,L>(state,
target,pinned,on_board_defense)+
 
  124     hasEffectMask<P,DL>(state,target,pinned,on_board_defense);
 
  125   mask_t longMask=state.longEffectAt(target,P);
 
  126   while(longMask.any()){
 
  128     Piece attacker=state.pieceOf(num);
 
  131     if((canMoveMask&(0x100<<d))!=0){
 
  132       canMoveMask-=((0x100<<d)+0x1000000000000ull);
 
  138 template <osl::Player P>
 
  140 #if (defined __GNUC__) && (! defined GPSONE) && (! defined GPSUSIONE) 
  146   return make<P>(state,
target,state.pin(
alt(P)));
 
  152   const Square king=state.kingSquare(
alt(attack));
 
  154     return make<BLACK>(state, king);
 
  156     return make<WHITE>(state, king);
 
  161                        const PieceMask& pins)
 
  163   const Square king=state.kingSquare(
alt(attack));
 
  165     return make<BLACK>(state, king, pins);
 
  167     return make<WHITE>(state, king, pins);
 
  172   edge_mask.fill(~(0xfull << 48));
 
  173   for (
int x=1; x<=9; ++x) {
 
  174     for (
int y=1; y<=9; ++y) {
 
  178         if (target.
x() <= 1 || target.
x() >= 9 || target.
y() <=1 || target.
y() >=9)
 
  179           edge_mask[
BLACK][king.
index()] &= ~(0x100ull<<d);
 
  181         if (target.
x() <= 1 || target.
x() >= 9 || target.
y() <=1 || target.
y() >=9)
 
  182           edge_mask[
WHITE][king.
index()] &= ~(0x100ull<<d);