27 for (
int i=0; i<8; ++i)
29 const Offset king_square = normal[i];
30 for (
int j=0; j<8; ++j)
32 const Offset target = normal[j];
35 const int dx = king_square.
dx() - target.
dx();
36 const int dy = king_square.
dy() - target.
dy();
41 reverse[i].push_back(j);
46 for (
int i=0; i<256; ++i)
53 for (
int p: reverse[j])
55 if (! reverse_all[i].isMember(p))
56 reverse_all[i].push_back(p);
62 template <osl::Player Attack>
64 #if (defined __GNUC__) && (! defined GPSONE) && (! defined GPSUSIONE)
73 for (
int i=0; i<8; ++i)
75 testSquare<Attack>(state, king_square+table.normal[i], i, flags);
78 for (
int i: table.reverse_all[flags])
80 const Square candidate = king_square + table.normal[i];
95 unsigned int flags = flags8;
98 const Square candidate = king_square + table.normal[i];
109 return find<BLACK>(state, king_square, out);
111 return find<WHITE>(state, king_square, out);
bool hasEffect() const
短い利きがあるか,間がemptyなら長い利きがある
int countEffect(Player player, Square target) const
利きの数を数える.
int dx() const
Offsetから一般に dxは求まらないので, ここでの入力は12近傍のみとする
int dy() const
Offsetから一般に dyは求まらないので, ここでの入力は12近傍のみとする
const EffectContent getEffect(PtypeO ptypeo, Square from, Square to) const
fromにいるptypeoがtoに利きを持つか?
const Piece pieceAt(Square sq) const
const PtypeTable Ptype_Table
Offset32Base< 8, 9 > Offset32
const PtypeO PTYPEO_EDGE __attribute__((unused))
PtypeO
Player + Ptype [-15, 15] PtypeO の O は Owner の O.
constexpr Player alt(Player player)
PtypeO newPtypeO(Player player, Ptype ptype)
static osl::SetUpRegister _initializer([](){ osl::effect_util::SendOffSquare::init();})
void push_back(Square position)
static void unpack(SendOff8, Square king, Square8 &out)
static SendOff8 find(const NumEffectState &state, Square king_position, Square8 &out)
static int takeOneBit(Integer &mask)