289 setChangedPieces(effects[pos.
index()]);
291 mask_t mask1 =((effects[pos.
index()].getMask(1))
292 & NumBitmapEffect::longEffectMask());
294 int num=mask1.takeOneBit()+NumBitmapEffect::longToNumOffset;
295 assert(32<=num && num<=39);
302 if(OP==NumBitmapEffect::Sub){
303 Square endSquare=mobilityTable.get(d,num);
307 int pos2Index, offset81;
309 int posIndex=BoardMask::index(pos);
310 pos2Index=BoardMask::index(pos2);
311 offset81=pos2Index-posIndex;
313 for(;pos2!=endSquare;pos2+=offset0){
315 changed_effects[pl1].set(pos2Index);
318 effects[pos2.
index()].template opEqual<OP>(effect);
320 effects[pos2.
index()].template opEqual<OP>(effect);
322 if (!Piece::isEdgeNum(num1)){
325 changed_effects[pl1].set(pos2Index);
326 if((effects[endSquare.
index()].getMask(1)&NumBitmapEffect::playerEffectMask(pl1)).none()){
327 effected_mask[pl1].reset(num1);
329 effected_changed_mask[pl1].set(num1);
330 mobilityTable.set(d,num,pos);
334 mobilityTable.set(d,num,pos);
335 effectedNumTable[piece_num][d]=num;
340 int pos2Index, offset81;
342 int posIndex=BoardMask::index(pos);
343 pos2Index=BoardMask::index(pos2);
344 offset81=pos2Index-posIndex;
348 if(!Piece::isEmptyNum(num1)){
350 mobilityTable.set(d,num,pos2);
351 if(!Piece::isEdgeNum(num1)){
352 effectedNumTable[num1][d]=num;
353 effects[pos2.
index()].template opEqual<OP>(effect);
354 changed_effects[pl1].set(pos2Index);
355 effected_mask[pl1].set(num1);
356 effected_changed_mask[pl1].set(num1);
359 else if(!Piece::isEdgeNum(num1)){
360 effectedNumTable[num1][d]=num;
361 effects[pos2.
index()].template opEqual<OP>(effect);
366 changed_effects[pl1].set(pos2Index);
369 effects[pos2.
index()].template opEqual<OP>(effect);