numSimpleEffect.tcc
Go to the documentation of this file.
00001 #ifndef OSL_NUM_SIMPLE_EFFECT_TCC
00002 #define OSL_NUM_SIMPLE_EFFECT_TCC
00003 
00004 #include "osl/effect/numSimpleEffect.h"
00005 #include "osl/effect_util/pin.h"
00006 #include "osl/checkmate/king8Info.h"
00007 #include "osl/pieceTable.h"
00008 #include "osl/record/csa.h"
00009 #include <iostream>
00010 
00011 template<osl::effect::NumBitmapEffect::Op OP,bool UC>
00012 void  osl::effect::
00013 NumSimpleEffectTable::doEffect(const SimpleState& state,PtypeO ptypeo,Square pos,int num)
00014 {
00015   switch((int)ptypeo){
00016   case NEW_PTYPEO(WHITE,PAWN): doEffectBy<WHITE,PAWN,OP,UC>(state,pos,num); break;
00017   case NEW_PTYPEO(WHITE,LANCE): doEffectBy<WHITE,LANCE,OP,UC>(state,pos,num); break;
00018   case NEW_PTYPEO(WHITE,KNIGHT): doEffectBy<WHITE,KNIGHT,OP,UC>(state,pos,num); break;
00019   case NEW_PTYPEO(WHITE,SILVER): doEffectBy<WHITE,SILVER,OP,UC>(state,pos,num); break;
00020   case NEW_PTYPEO(WHITE,PPAWN):
00021   case NEW_PTYPEO(WHITE,PLANCE):
00022   case NEW_PTYPEO(WHITE,PKNIGHT):
00023   case NEW_PTYPEO(WHITE,PSILVER):
00024   case NEW_PTYPEO(WHITE,GOLD): doEffectBy<WHITE,GOLD,OP,UC>(state,pos,num); break;
00025   case NEW_PTYPEO(WHITE,BISHOP): doEffectBy<WHITE,BISHOP,OP,UC>(state,pos,num); break;
00026   case NEW_PTYPEO(WHITE,PBISHOP): doEffectBy<WHITE,PBISHOP,OP,UC>(state,pos,num); break;
00027   case NEW_PTYPEO(WHITE,ROOK): doEffectBy<WHITE,ROOK,OP,UC>(state,pos,num); break;
00028   case NEW_PTYPEO(WHITE,PROOK): doEffectBy<WHITE,PROOK,OP,UC>(state,pos,num); break;
00029   case NEW_PTYPEO(WHITE,KING): doEffectBy<WHITE,KING,OP,UC>(state,pos,num); break;
00030   case NEW_PTYPEO(BLACK,PAWN): doEffectBy<BLACK,PAWN,OP,UC>(state,pos,num); break;
00031   case NEW_PTYPEO(BLACK,LANCE): doEffectBy<BLACK,LANCE,OP,UC>(state,pos,num); break;
00032   case NEW_PTYPEO(BLACK,KNIGHT): doEffectBy<BLACK,KNIGHT,OP,UC>(state,pos,num); break;
00033   case NEW_PTYPEO(BLACK,SILVER): doEffectBy<BLACK,SILVER,OP,UC>(state,pos,num); break;
00034   case NEW_PTYPEO(BLACK,PPAWN):
00035   case NEW_PTYPEO(BLACK,PLANCE):
00036   case NEW_PTYPEO(BLACK,PKNIGHT):
00037   case NEW_PTYPEO(BLACK,PSILVER):
00038   case NEW_PTYPEO(BLACK,GOLD): doEffectBy<BLACK,GOLD,OP,UC>(state,pos,num); break;
00039   case NEW_PTYPEO(BLACK,BISHOP): doEffectBy<BLACK,BISHOP,OP,UC>(state,pos,num); break;
00040   case NEW_PTYPEO(BLACK,PBISHOP): doEffectBy<BLACK,PBISHOP,OP,UC>(state,pos,num); break;
00041   case NEW_PTYPEO(BLACK,ROOK): doEffectBy<BLACK,ROOK,OP,UC>(state,pos,num); break;
00042   case NEW_PTYPEO(BLACK,PROOK): doEffectBy<BLACK,PROOK,OP,UC>(state,pos,num); break;
00043   case NEW_PTYPEO(BLACK,KING): doEffectBy<BLACK,KING,OP,UC>(state,pos,num); break;
00044   default: assert(0);
00045   }
00046   return;
00047 }
00048 
00049 template<osl::Player P, osl::Ptype T, osl::effect::NumBitmapEffect::Op OP,bool UC>
00050 void  osl::effect::
00051 NumSimpleEffectTable::doEffectBy(const SimpleState& state,Square pos,int num)
00052 {
00053   if(UC){
00054     if(T==LANCE || T==BISHOP || T==PBISHOP || T==ROOK || T==PROOK)
00055       setChangedPieces(NumBitmapEffect::makeLongEffect<P>(num));
00056     else
00057       setChangedPieces(NumBitmapEffect::makeEffect<P>(num));
00058   }
00059   doEffectShort<P,T,UL,OP,UC>(state,pos,num);
00060   doEffectShort<P,T,U,OP,UC>(state,pos,num);
00061   doEffectShort<P,T,UR,OP,UC>(state,pos,num);
00062   doEffectShort<P,T,L,OP,UC>(state,pos,num);
00063   doEffectShort<P,T,R,OP,UC>(state,pos,num);
00064   doEffectShort<P,T,DL,OP,UC>(state,pos,num);
00065   doEffectShort<P,T,D,OP,UC>(state,pos,num);
00066   doEffectShort<P,T,DR,OP,UC>(state,pos,num);
00067   doEffectShort<P,T,UUL,OP,UC>(state,pos,num);
00068   doEffectShort<P,T,UUR,OP,UC>(state,pos,num);
00069   doEffectLong<P,T,LONG_UL,OP,UC>(state,pos,num);
00070   doEffectLong<P,T,LONG_U,OP,UC>(state,pos,num);
00071   doEffectLong<P,T,LONG_UR,OP,UC>(state,pos,num);
00072   doEffectLong<P,T,LONG_L,OP,UC>(state,pos,num);
00073   doEffectLong<P,T,LONG_R,OP,UC>(state,pos,num);
00074   doEffectLong<P,T,LONG_DL,OP,UC>(state,pos,num);
00075   doEffectLong<P,T,LONG_D,OP,UC>(state,pos,num);
00076   doEffectLong<P,T,LONG_DR,OP,UC>(state,pos,num);
00077 }
00078 
00079 #endif /* OSL_NUM_SIMPLE_EFFECT_TCC */
00080 // ;;; Local Variables:
00081 // ;;; mode:c++
00082 // ;;; c-basic-offset:2
00083 // ;;; End:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines