All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
numSimpleEffect.tcc
Go to the documentation of this file.
1 #ifndef OSL_NUM_SIMPLE_EFFECT_TCC
2 #define OSL_NUM_SIMPLE_EFFECT_TCC
3 
5 #include "osl/effect_util/pin.h"
7 #include "osl/pieceTable.h"
8 #include "osl/record/csa.h"
9 #include <iostream>
10 
11 template<osl::effect::NumBitmapEffect::Op OP,bool UC>
12 void osl::effect::
13 NumSimpleEffectTable::doEffect(const SimpleState& state,PtypeO ptypeo,Square pos,int num)
14 {
15  switch((int)ptypeo){
16  case NEW_PTYPEO(WHITE,PAWN): doEffectBy<WHITE,PAWN,OP,UC>(state,pos,num); break;
17  case NEW_PTYPEO(WHITE,LANCE): doEffectBy<WHITE,LANCE,OP,UC>(state,pos,num); break;
18  case NEW_PTYPEO(WHITE,KNIGHT): doEffectBy<WHITE,KNIGHT,OP,UC>(state,pos,num); break;
19  case NEW_PTYPEO(WHITE,SILVER): doEffectBy<WHITE,SILVER,OP,UC>(state,pos,num); break;
20  case NEW_PTYPEO(WHITE,PPAWN):
21  case NEW_PTYPEO(WHITE,PLANCE):
22  case NEW_PTYPEO(WHITE,PKNIGHT):
23  case NEW_PTYPEO(WHITE,PSILVER):
24  case NEW_PTYPEO(WHITE,GOLD): doEffectBy<WHITE,GOLD,OP,UC>(state,pos,num); break;
25  case NEW_PTYPEO(WHITE,BISHOP): doEffectBy<WHITE,BISHOP,OP,UC>(state,pos,num); break;
26  case NEW_PTYPEO(WHITE,PBISHOP): doEffectBy<WHITE,PBISHOP,OP,UC>(state,pos,num); break;
27  case NEW_PTYPEO(WHITE,ROOK): doEffectBy<WHITE,ROOK,OP,UC>(state,pos,num); break;
28  case NEW_PTYPEO(WHITE,PROOK): doEffectBy<WHITE,PROOK,OP,UC>(state,pos,num); break;
29  case NEW_PTYPEO(WHITE,KING): doEffectBy<WHITE,KING,OP,UC>(state,pos,num); break;
30  case NEW_PTYPEO(BLACK,PAWN): doEffectBy<BLACK,PAWN,OP,UC>(state,pos,num); break;
31  case NEW_PTYPEO(BLACK,LANCE): doEffectBy<BLACK,LANCE,OP,UC>(state,pos,num); break;
32  case NEW_PTYPEO(BLACK,KNIGHT): doEffectBy<BLACK,KNIGHT,OP,UC>(state,pos,num); break;
33  case NEW_PTYPEO(BLACK,SILVER): doEffectBy<BLACK,SILVER,OP,UC>(state,pos,num); break;
34  case NEW_PTYPEO(BLACK,PPAWN):
35  case NEW_PTYPEO(BLACK,PLANCE):
36  case NEW_PTYPEO(BLACK,PKNIGHT):
37  case NEW_PTYPEO(BLACK,PSILVER):
38  case NEW_PTYPEO(BLACK,GOLD): doEffectBy<BLACK,GOLD,OP,UC>(state,pos,num); break;
39  case NEW_PTYPEO(BLACK,BISHOP): doEffectBy<BLACK,BISHOP,OP,UC>(state,pos,num); break;
40  case NEW_PTYPEO(BLACK,PBISHOP): doEffectBy<BLACK,PBISHOP,OP,UC>(state,pos,num); break;
41  case NEW_PTYPEO(BLACK,ROOK): doEffectBy<BLACK,ROOK,OP,UC>(state,pos,num); break;
42  case NEW_PTYPEO(BLACK,PROOK): doEffectBy<BLACK,PROOK,OP,UC>(state,pos,num); break;
43  case NEW_PTYPEO(BLACK,KING): doEffectBy<BLACK,KING,OP,UC>(state,pos,num); break;
44  default: assert(0);
45  }
46  return;
47 }
48 
49 template<osl::Player P, osl::Ptype T, osl::effect::NumBitmapEffect::Op OP,bool UC>
50 void osl::effect::
51 NumSimpleEffectTable::doEffectBy(const SimpleState& state,Square pos,int num)
52 {
53  if(UC){
54  if(T==LANCE || T==BISHOP || T==PBISHOP || T==ROOK || T==PROOK)
55  setChangedPieces(NumBitmapEffect::makeLongEffect<P>(num));
56  else
57  setChangedPieces(NumBitmapEffect::makeEffect<P>(num));
58  }
59  doEffectShort<P,T,UL,OP,UC>(state,pos,num);
60  doEffectShort<P,T,U,OP,UC>(state,pos,num);
61  doEffectShort<P,T,UR,OP,UC>(state,pos,num);
62  doEffectShort<P,T,L,OP,UC>(state,pos,num);
63  doEffectShort<P,T,R,OP,UC>(state,pos,num);
64  doEffectShort<P,T,DL,OP,UC>(state,pos,num);
65  doEffectShort<P,T,D,OP,UC>(state,pos,num);
66  doEffectShort<P,T,DR,OP,UC>(state,pos,num);
67  doEffectShort<P,T,UUL,OP,UC>(state,pos,num);
68  doEffectShort<P,T,UUR,OP,UC>(state,pos,num);
69  doEffectLong<P,T,LONG_UL,OP,UC>(state,pos,num);
70  doEffectLong<P,T,LONG_U,OP,UC>(state,pos,num);
71  doEffectLong<P,T,LONG_UR,OP,UC>(state,pos,num);
72  doEffectLong<P,T,LONG_L,OP,UC>(state,pos,num);
73  doEffectLong<P,T,LONG_R,OP,UC>(state,pos,num);
74  doEffectLong<P,T,LONG_DL,OP,UC>(state,pos,num);
75  doEffectLong<P,T,LONG_D,OP,UC>(state,pos,num);
76  doEffectLong<P,T,LONG_DR,OP,UC>(state,pos,num);
77 }
78 
79 #endif /* OSL_NUM_SIMPLE_EFFECT_TCC */
80 // ;;; Local Variables:
81 // ;;; mode:c++
82 // ;;; c-basic-offset:2
83 // ;;; End: