All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
directionTraits.h
Go to the documentation of this file.
1 /* directionTraits.h
2  */
3 #ifndef OSL_DIRECTIONTRAITS_H
4 #define OSL_DIRECTIONTRAITS_H
5 
6 #include "osl/direction.h"
7 #include "osl/offset.h"
8 #include "osl/ptype.h"
9 
10 namespace osl
11 {
12  template<Direction Dir>
14 
15  template<>
17  static const int blackDx=1;
18  static const int blackDy=-1;
19  static const bool canPromoteTo=true;
20  static const Direction altDir=DR;
21  static const Direction longDir=LONG_UL;
22  static const Direction primDir=UL;
23  static const int ptypeMask=
24  (1<<PPAWN)|(1<<PLANCE)|(1<<PKNIGHT)|(1<<PSILVER)|(1<<PBISHOP)|
25  (1<<PROOK)|(1<<KING)|(1<<GOLD)|(1<<SILVER)|(1<<BISHOP);
26  };
27 
28  template<>
30  static const int blackDx=0;
31  static const int blackDy=-1;
32  static const bool canPromoteTo=true;
33  static const Direction altDir=D;
34  static const Direction longDir=LONG_U;
35  static const Direction primDir=U;
36  static const int ptypeMask=
37  (1<<PPAWN)|(1<<PLANCE)|(1<<PKNIGHT)|(1<<PSILVER)|(1<<PBISHOP)|
38  (1<<PROOK)|(1<<KING)|(1<<GOLD)|(1<<PAWN)|(1<<LANCE)|(1<<SILVER)|(1<<ROOK);
39  };
40 
41  template<>
43  static const int blackDx=-1;
44  static const int blackDy=-1;
45  static const bool canPromoteTo=true;
46  static const Direction altDir=DL;
47  static const Direction longDir=LONG_UR;
48  static const Direction primDir=UR;
49  static const int ptypeMask=
50  (1<<PPAWN)|(1<<PLANCE)|(1<<PKNIGHT)|(1<<PSILVER)|(1<<PBISHOP)|
51  (1<<PROOK)|(1<<KING)|(1<<GOLD)|(1<<SILVER)|(1<<BISHOP);
52  };
53  template<>
55  static const int blackDx=1;
56  static const int blackDy=0;
57  static const bool canPromoteTo=false;
58  static const Direction altDir=R;
59  static const Direction longDir=LONG_L;
60  static const Direction primDir=L;
61  static const int ptypeMask=
62  (1<<PPAWN)|(1<<PLANCE)|(1<<PKNIGHT)|(1<<PSILVER)|(1<<PBISHOP)|
63  (1<<PROOK)|(1<<KING)|(1<<GOLD)|(1<<ROOK);
64  };
65  template<>
67  static const int blackDx=-1;
68  static const int blackDy=0;
69  static const bool canPromoteTo=false;
70  static const Direction altDir=L;
71  static const Direction longDir=LONG_R;
72  static const Direction primDir=L;
73  static const int ptypeMask=
74  (1<<PPAWN)|(1<<PLANCE)|(1<<PKNIGHT)|(1<<PSILVER)|(1<<PBISHOP)|
75  (1<<PROOK)|(1<<KING)|(1<<GOLD)|(1<<ROOK);
76  };
77  template<>
79  static const int blackDx=1;
80  static const int blackDy=1;
81  static const bool canPromoteTo=false;
82  static const Direction altDir=UR;
83  static const Direction longDir=LONG_DL;
84  static const Direction primDir=UR;
85  static const int ptypeMask=
86  (1<<PBISHOP)|(1<<PROOK)|(1<<KING)|(1<<SILVER)|(1<<BISHOP);
87  };
88  template<>
90  static const int blackDx=0;
91  static const int blackDy=1;
92  static const bool canPromoteTo=false;
93  static const Direction altDir=U;
94  static const Direction longDir=LONG_D;
95  static const Direction primDir=U;
96  static const int ptypeMask=
97  (1<<PPAWN)|(1<<PLANCE)|(1<<PKNIGHT)|(1<<PSILVER)|(1<<PBISHOP)|
98  (1<<PROOK)|(1<<KING)|(1<<GOLD)|(1<<ROOK);
99  };
100  template<>
102  static const int blackDx=-1;
103  static const int blackDy=1;
104  static const bool canPromoteTo=false;
105  static const Direction altDir=UL;
106  static const Direction longDir=LONG_DR;
107  static const Direction primDir=UL;
108  static const int ptypeMask=
109  (1<<PBISHOP)|(1<<PROOK)|(1<<KING)|(1<<SILVER)|(1<<BISHOP);
110  };
111  template<>
113  static const int blackDx=1;
114  static const int blackDy=-2;
115  static const bool canPromoteTo=true;
116  // no meaning
117  static const Direction altDir=UUL;
118  static const Direction longDir=UUL;
119  static const Direction primDir=UUL;
120  static const int ptypeMask=
121  (1<<KNIGHT);
122  };
123  template<>
125  static const int blackDx=-1;
126  static const int blackDy=-2;
127  static const bool canPromoteTo=true;
128  // no meaning
129  static const Direction altDir=UUR;
130  static const Direction longDir=UUR;
131  static const Direction primDir=UUR;
132  static const int ptypeMask=
133  (1<<KNIGHT);
134  };
135 
136  template<>
138  static const bool canPromoteTo=true;
139  static const Direction altDir=LONG_DR;
140  static const Direction longDir=LONG_UL;
141  static const Direction primDir=UL;
142  static const int blackDx=DirectionTraitsGen<UL>::blackDx;
143  static const int blackDy=DirectionTraitsGen<UL>::blackDy;
144  static const int ptypeMask=
145  (1<<PBISHOP)|(1<<BISHOP);
146  };
147 
148  template<>
150  static const bool canPromoteTo=true;
151  static const Direction altDir=LONG_D;
152  static const Direction longDir=LONG_U;
153  static const Direction primDir=U;
154  static const int blackDx=DirectionTraitsGen<U>::blackDx;
155  static const int blackDy=DirectionTraitsGen<U>::blackDy;
156  static const int ptypeMask=
157  (1<<LANCE)|(1<<ROOK)|(1<<PROOK);
158  };
159 
160  template<>
162  static const bool canPromoteTo=true;
163  static const Direction altDir=LONG_DL;
164  static const Direction longDir=LONG_UR;
165  static const Direction primDir=UR;
166  static const int blackDx=DirectionTraitsGen<UR>::blackDx;
167  static const int blackDy=DirectionTraitsGen<UR>::blackDy;
168  static const int ptypeMask=
169  (1<<PBISHOP)|(1<<BISHOP);
170  };
171  template<>
173  static const bool canPromoteTo=false;
174  static const Direction altDir=LONG_R;
175  static const Direction longDir=LONG_L;
176  static const Direction primDir=L;
177  static const int blackDx=DirectionTraitsGen<L>::blackDx;
178  static const int blackDy=DirectionTraitsGen<L>::blackDy;
179  static const int ptypeMask=
180  (1<<ROOK)|(1<<PROOK);
181  };
182  template<>
184  static const bool canPromoteTo=false;
185  static const Direction altDir=LONG_L;
186  static const Direction longDir=LONG_R;
187  static const Direction primDir=L;
188  static const int blackDx=DirectionTraitsGen<R>::blackDx;
189  static const int blackDy=DirectionTraitsGen<R>::blackDy;
190  static const int ptypeMask=
191  (1<<ROOK)|(1<<PROOK);
192  };
193  template<>
195  static const bool canPromoteTo=false;
196  static const Direction altDir=LONG_UR;
197  static const Direction longDir=LONG_DL;
198  static const Direction primDir=UR;
199  static const int blackDx=DirectionTraitsGen<DL>::blackDx;
200  static const int blackDy=DirectionTraitsGen<DL>::blackDy;
201  static const int ptypeMask=
202  (1<<PBISHOP)|(1<<BISHOP);
203  };
204  template<>
206  static const bool canPromoteTo=false;
207  static const Direction altDir=LONG_U;
208  static const Direction longDir=LONG_D;
209  static const Direction primDir=U;
210  static const int blackDx=DirectionTraitsGen<D>::blackDx;
211  static const int blackDy=DirectionTraitsGen<D>::blackDy;
212  static const int ptypeMask=
213  (1<<ROOK)|(1<<PROOK);
214  };
215  template<>
217  static const bool canPromoteTo=false;
218  static const Direction altDir=LONG_UL;
219  static const Direction longDir=LONG_DR;
220  static const Direction primDir=UL;
221  static const int blackDx=DirectionTraitsGen<DR>::blackDx;
222  static const int blackDy=DirectionTraitsGen<DR>::blackDy;
223  static const int ptypeMask=
224  (1<<PBISHOP)|(1<<BISHOP);
225  };
226  template<Direction Dir>
228  // これらを関数にすると押し込められる
229  static const unsigned int mask=1<<static_cast<int>(Dir);
230  static const bool isLong=(static_cast<int>(Dir) >= LONG_UL);
233  static const Offset blackOffset() { return Offset(blackDx,blackDy); }
238  ~(1<<KING);
241  };
242 
243  template<Direction Dir,Player P>
245 
246  template<Direction Dir>
248  static const Offset offset() {
250  }
251  static const Direction directionByBlack=Dir;
252  };
253  template<Direction Dir>
255 
256  template<Direction Dir>
258  static const Offset offset() {
260  }
261  static const Direction directionByBlack=DirectionTraitsGen<Dir>::altDir;
262  };
263  template<Direction Dir>
265 
266  template <Player P, Direction D>
269  }
270 } // namespace osl
271 
272 #endif /* OSL_DIRECTIONTRAITS_H */
273 // ;;; Local Variables:
274 // ;;; mode:c++
275 // ;;; c-basic-offset:2
276 // ;;; coding:utf-8
277 // ;;; End: