12 typedef std::bitset<8> bs_t;
33 template<Player P>
inline
45 if(pieceMask.
none())
return false;
47 if(pieceMask1.
any())
return true;
49 assert(pieceMask.
any());
58 if(dir1==dir)
return true;
59 }
while(pieceMask.
any());
65 template<osl::Player P,osl::Direction Dir>
78 return 0x1000000000000ull+(0x100010100ull<<static_cast<int>(Dir));
80 return 0x1000000000000ull+(0x10100ull<<static_cast<int>(Dir));
85 const bool has_enough_effect = hasEnoughEffect<altP>(state,target,pos,pinned,on_board_defense,Dir);
86 if(has_enough_effect){
89 return 0x10100010000ull<<static_cast<int>(Dir);
91 return 0x10000ull<<static_cast<int>(Dir);
94 return 0x10000000000ull<<static_cast<int>(Dir);
98 return 0x10101010001ull<<static_cast<int>(Dir);
100 return 0x10000ull<<static_cast<int>(Dir);
102 return 0x10001000000ull<<static_cast<int>(Dir);
106 template<osl::Player P>
108 #if (defined __GNUC__) && (! defined GPSONE) && (! defined GPSUSIONE)
115 uint64_t canMoveMask=
116 hasEffectMask<P,UR>(state,target,pinned,on_board_defense)+
117 hasEffectMask<P,R>(state,target,pinned,on_board_defense)+
118 hasEffectMask<P,DR>(state,target,pinned,on_board_defense)+
119 hasEffectMask<P,U>(state,target,pinned,on_board_defense)+
120 hasEffectMask<P,D>(state,target,pinned,on_board_defense)+
121 hasEffectMask<P,UL>(state,target,pinned,on_board_defense)+
122 hasEffectMask<P,L>(state,target,pinned,on_board_defense)+
123 hasEffectMask<P,DL>(state,target,pinned,on_board_defense);
125 while(longMask.any()){
130 if((canMoveMask&(0x100<<d))!=0){
131 canMoveMask-=((0x100<<d)+0x1000000000000ull);
137 template <osl::Player P>
139 #if (defined __GNUC__) && (! defined GPSONE) && (! defined GPSUSIONE)
145 return make<P>(state,target,state.
pin(
alt(P)));
153 return make<BLACK>(state, king);
155 return make<WHITE>(state, king);
164 return make<BLACK>(state, king, pins);
166 return make<WHITE>(state, king, pins);