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