11 #include <boost/type_traits.hpp>
21 template<
typename Liberty,Player P,Ptype T>
36 getShortMask<PlayerTraits<P>::opponent>(p.
ptype(), from,
target);
42 getLongEffect<PlayerTraits<P>::opponent>(p.
ptype(),
46 if(offset.zero())
return;
48 if(
state.isEmptyBetween(from,
target-offset.blackOffset<P>())){
49 unsigned int nearMaskSpace=
nearMask.spaceMask();
50 unsigned int mask0=longEffect8.
getMask(0);
51 liberty.andMask(NearMask::makeDirect(~mask0));
52 if((mask0&nearMaskSpace)!=0){
53 unsigned int mask1=longEffect8.
getMask(1);
54 liberty.andMask(NearMask::makeDirect(~mask1));
55 if( T!=
BISHOP && (mask1&nearMaskSpace)!=0){
56 unsigned int mask2=longEffect8.
getMask(2);
57 liberty.andMask(NearMask::makeDirect(~mask2));
65 getLongEffect2<PlayerTraits<P>::opponent>(p.
square(),
67 unsigned int mask0=longEffect8.
getMask(0);
69 unsigned int nearMaskSpace=
nearMask.spaceMask();
70 liberty.andMask(NearMask::makeDirect(~mask0));
71 if((mask0&nearMaskSpace)==0)
return;
72 unsigned int mask1=longEffect8.
getMask(1);
73 liberty.andMask(NearMask::makeDirect(~mask1));
83 state.hasEffectTo(p,to))
118 action_t action(*
this,state,target,nearMask);
120 forEachOnBoard<PlayerTraits<P>::opponent,T,action_t>(action);
128 template<Ptype T,
typename Tail>
130 addMaskPtype<T>(state,
target,nearMask);
131 addMask(state,target,nearMask,Tail());
147 for (
int i=0;i<8;i++)
154 std::ostream& operator<<(std::ostream& os,Liberty8<P>
const& liberty);
158 template<osl::Player P>
165 assert(state.pieceAt(target).template isOnBoardByOwner<P>());
170 NearMask nearMask=NearMask::make<P>(state,
target);
175 mask = NearMask::makeDirect(nearMask.uintValue() & 0xff);