14 template<Player P,Ptype Type>
24 direct->push_back(std::make_pair(p.ptypeO(), p.square()));
28 template <osl::Player P>
35 store_t op_pieces_store(&op_pieces, effect_to);
37 if (op_pieces.
empty())
42 store_t my_pieces_store(&my_pieces, effect_to);
48 FindEffectMore action = { &my_pieces, &my_pieces_more, effect_to, &state };
54 if (op_pieces.
size() <= my_pieces.
size())
56 my_pieces_more.
clear();
58 for (
size_t i=0; i<op_pieces.
size(); ++i) {
59 findAdditionalPieces(state, P, effect_to, op_pieces[i].second, my_pieces_more);
64 template <osl::Player P>
74 store_t op_pieces_store(&op_pieces, to);
76 if (op_pieces.
empty())
85 store_t my_pieces_store(&my_pieces, to);
92 findAdditionalPieces(state, move.
player(), to, moved.
square(), my_pieces_more);
94 FindEffectMore action = { &my_pieces, &my_pieces_more, to, &state };
100 if (op_pieces.
size() < my_pieces.
size())
102 my_pieces_more.
clear();
104 for (
size_t i=0; i<op_pieces.
size(); ++i) {
105 findAdditionalPieces(state, P, to, op_pieces[i].second, my_pieces_more);
110 template <osl::Player P>
126 bool op_deleted=
false, my_deleted=
false;
127 for (i=0;i<op_pieces.
size();i++,c++)
131 Square from=op_pieces[i].second;
135 assert(p.
owner()==Opponent);
139 assert(attacker.
owner()==P);
141 if(attacker_sq != move_from){
143 for(;j<my_pieces.
size();j++)
if(my_pieces[j].second==attacker_sq)
break;
145 if(j==my_pieces.
size() || op_pieces.
size()<=j+1 ){
146 for(
size_t k=i;k<op_pieces.
size()-1;k++)
147 op_pieces[k]=op_pieces[k+1];
152 std::pair<PtypeO,Square> v=op_pieces[i];
153 for(
size_t k=i;k<=j;k++)
154 op_pieces[k]=op_pieces[k+1];
168 ptypeO = op_pieces[i].first;
171 || op_pieces[i].second.canPromote<Opponent>());
181 if (i>=my_pieces.
size()){
185 Square from=my_pieces[i].second;
188 assert(p.
owner()==P);
193 assert(attacker.
owner()==Opponent);
196 for(;j<op_pieces.
size();j++)
if(op_pieces[j].second==attacker_sq)
break;
198 if(j==op_pieces.
size() || my_pieces.
size()<=j ){
199 for(
size_t k=i;k<my_pieces.
size()-1;k++)
200 my_pieces[k]=my_pieces[k+1];
205 std::pair<PtypeO,Square> v=my_pieces[i];
206 for(
size_t k=i;k<j;k++)
207 my_pieces[k]=my_pieces[k+1];
217 ptypeO=my_pieces[i].first;
220 || my_pieces[i].second.canPromote<P>());
228 for (
int j=i-1;j>=0;j--)
236 template <osl::Player P>
249 findEffectPieces<P>(state, to, my_pieces, op_pieces);
254 findEffectPiecesAfterMove<P>(state, move, my_pieces, op_pieces);
256 if (op_pieces.
empty())
258 return val + computeValue<P>(state, move, my_pieces, op_pieces, my_pin, op_pin, table);
268 return seeInternal<BLACK>(state, move, my_pin, op_pin, *table);
270 return -seeInternal<WHITE>(state, move, my_pin, op_pin, *table);
291 if (candidate.
owner() != attack)