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