My Project
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/basic_type.h"
7
8namespace osl
9{
10 template<Direction Dir>
12
13 template<>
15 static const int blackDx=1;
16 static const int blackDy=-1;
17 static const bool canPromoteTo=true;
18 static const Direction altDir=DR;
19 static const Direction longDir=LONG_UL;
20 static const Direction primDir=UL;
21 static const int ptypeMask=
22 (1<<PPAWN)|(1<<PLANCE)|(1<<PKNIGHT)|(1<<PSILVER)|(1<<PBISHOP)|
23 (1<<PROOK)|(1<<KING)|(1<<GOLD)|(1<<SILVER)|(1<<BISHOP);
24 };
25
26 template<>
28 static const int blackDx=0;
29 static const int blackDy=-1;
30 static const bool canPromoteTo=true;
31 static const Direction altDir=D;
32 static const Direction longDir=LONG_U;
33 static const Direction primDir=U;
34 static const int ptypeMask=
35 (1<<PPAWN)|(1<<PLANCE)|(1<<PKNIGHT)|(1<<PSILVER)|(1<<PBISHOP)|
36 (1<<PROOK)|(1<<KING)|(1<<GOLD)|(1<<PAWN)|(1<<LANCE)|(1<<SILVER)|(1<<ROOK);
37 };
38
39 template<>
41 static const int blackDx=-1;
42 static const int blackDy=-1;
43 static const bool canPromoteTo=true;
44 static const Direction altDir=DL;
45 static const Direction longDir=LONG_UR;
46 static const Direction primDir=UR;
47 static const int ptypeMask=
48 (1<<PPAWN)|(1<<PLANCE)|(1<<PKNIGHT)|(1<<PSILVER)|(1<<PBISHOP)|
49 (1<<PROOK)|(1<<KING)|(1<<GOLD)|(1<<SILVER)|(1<<BISHOP);
50 };
51 template<>
53 static const int blackDx=1;
54 static const int blackDy=0;
55 static const bool canPromoteTo=false;
56 static const Direction altDir=R;
57 static const Direction longDir=LONG_L;
58 static const Direction primDir=L;
59 static const int ptypeMask=
60 (1<<PPAWN)|(1<<PLANCE)|(1<<PKNIGHT)|(1<<PSILVER)|(1<<PBISHOP)|
61 (1<<PROOK)|(1<<KING)|(1<<GOLD)|(1<<ROOK);
62 };
63 template<>
65 static const int blackDx=-1;
66 static const int blackDy=0;
67 static const bool canPromoteTo=false;
68 static const Direction altDir=L;
69 static const Direction longDir=LONG_R;
70 static const Direction primDir=L;
71 static const int ptypeMask=
72 (1<<PPAWN)|(1<<PLANCE)|(1<<PKNIGHT)|(1<<PSILVER)|(1<<PBISHOP)|
73 (1<<PROOK)|(1<<KING)|(1<<GOLD)|(1<<ROOK);
74 };
75 template<>
77 static const int blackDx=1;
78 static const int blackDy=1;
79 static const bool canPromoteTo=false;
80 static const Direction altDir=UR;
81 static const Direction longDir=LONG_DL;
82 static const Direction primDir=UR;
83 static const int ptypeMask=
84 (1<<PBISHOP)|(1<<PROOK)|(1<<KING)|(1<<SILVER)|(1<<BISHOP);
85 };
86 template<>
88 static const int blackDx=0;
89 static const int blackDy=1;
90 static const bool canPromoteTo=false;
91 static const Direction altDir=U;
92 static const Direction longDir=LONG_D;
93 static const Direction primDir=U;
94 static const int ptypeMask=
95 (1<<PPAWN)|(1<<PLANCE)|(1<<PKNIGHT)|(1<<PSILVER)|(1<<PBISHOP)|
96 (1<<PROOK)|(1<<KING)|(1<<GOLD)|(1<<ROOK);
97 };
98 template<>
100 static const int blackDx=-1;
101 static const int blackDy=1;
102 static const bool canPromoteTo=false;
103 static const Direction altDir=UL;
104 static const Direction longDir=LONG_DR;
105 static const Direction primDir=UL;
106 static const int ptypeMask=
107 (1<<PBISHOP)|(1<<PROOK)|(1<<KING)|(1<<SILVER)|(1<<BISHOP);
108 };
109 template<>
111 static const int blackDx=1;
112 static const int blackDy=-2;
113 static const bool canPromoteTo=true;
114 // no meaning
115 static const Direction altDir=UUL;
116 static const Direction longDir=UUL;
117 static const Direction primDir=UUL;
118 static const int ptypeMask=
119 (1<<KNIGHT);
120 };
121 template<>
123 static const int blackDx=-1;
124 static const int blackDy=-2;
125 static const bool canPromoteTo=true;
126 // no meaning
127 static const Direction altDir=UUR;
128 static const Direction longDir=UUR;
129 static const Direction primDir=UUR;
130 static const int ptypeMask=
131 (1<<KNIGHT);
132 };
133
134 template<>
136 static const bool canPromoteTo=true;
137 static const Direction altDir=LONG_DR;
138 static const Direction longDir=LONG_UL;
139 static const Direction primDir=UL;
140 static const int blackDx=DirectionTraitsGen<UL>::blackDx;
141 static const int blackDy=DirectionTraitsGen<UL>::blackDy;
142 static const int ptypeMask=
143 (1<<PBISHOP)|(1<<BISHOP);
144 };
145
146 template<>
148 static const bool canPromoteTo=true;
149 static const Direction altDir=LONG_D;
150 static const Direction longDir=LONG_U;
151 static const Direction primDir=U;
152 static const int blackDx=DirectionTraitsGen<U>::blackDx;
153 static const int blackDy=DirectionTraitsGen<U>::blackDy;
154 static const int ptypeMask=
155 (1<<LANCE)|(1<<ROOK)|(1<<PROOK);
156 };
157
158 template<>
160 static const bool canPromoteTo=true;
161 static const Direction altDir=LONG_DL;
162 static const Direction longDir=LONG_UR;
163 static const Direction primDir=UR;
164 static const int blackDx=DirectionTraitsGen<UR>::blackDx;
165 static const int blackDy=DirectionTraitsGen<UR>::blackDy;
166 static const int ptypeMask=
167 (1<<PBISHOP)|(1<<BISHOP);
168 };
169 template<>
171 static const bool canPromoteTo=false;
172 static const Direction altDir=LONG_R;
173 static const Direction longDir=LONG_L;
174 static const Direction primDir=L;
175 static const int blackDx=DirectionTraitsGen<L>::blackDx;
176 static const int blackDy=DirectionTraitsGen<L>::blackDy;
177 static const int ptypeMask=
178 (1<<ROOK)|(1<<PROOK);
179 };
180 template<>
182 static const bool canPromoteTo=false;
183 static const Direction altDir=LONG_L;
184 static const Direction longDir=LONG_R;
185 static const Direction primDir=L;
186 static const int blackDx=DirectionTraitsGen<R>::blackDx;
187 static const int blackDy=DirectionTraitsGen<R>::blackDy;
188 static const int ptypeMask=
189 (1<<ROOK)|(1<<PROOK);
190 };
191 template<>
193 static const bool canPromoteTo=false;
194 static const Direction altDir=LONG_UR;
195 static const Direction longDir=LONG_DL;
196 static const Direction primDir=UR;
197 static const int blackDx=DirectionTraitsGen<DL>::blackDx;
198 static const int blackDy=DirectionTraitsGen<DL>::blackDy;
199 static const int ptypeMask=
200 (1<<PBISHOP)|(1<<BISHOP);
201 };
202 template<>
204 static const bool canPromoteTo=false;
205 static const Direction altDir=LONG_U;
206 static const Direction longDir=LONG_D;
207 static const Direction primDir=U;
208 static const int blackDx=DirectionTraitsGen<D>::blackDx;
209 static const int blackDy=DirectionTraitsGen<D>::blackDy;
210 static const int ptypeMask=
211 (1<<ROOK)|(1<<PROOK);
212 };
213 template<>
215 static const bool canPromoteTo=false;
216 static const Direction altDir=LONG_UL;
217 static const Direction longDir=LONG_DR;
218 static const Direction primDir=UL;
219 static const int blackDx=DirectionTraitsGen<DR>::blackDx;
220 static const int blackDy=DirectionTraitsGen<DR>::blackDy;
221 static const int ptypeMask=
222 (1<<PBISHOP)|(1<<BISHOP);
223 };
224 template<Direction Dir>
226 // これらを関数にすると押し込められる
227 static const unsigned int mask=1<<static_cast<int>(Dir);
228 static const bool isLong=(static_cast<int>(Dir) >= LONG_UL);
231 static const Offset blackOffset() { return Offset(blackDx,blackDy); }
236 ~(1<<KING);
239 };
240
241 template<Direction Dir,Player P>
243
244 template<Direction Dir>
246 static const Offset offset() {
248 }
249 static const Direction directionByBlack=Dir;
250 };
251 template<Direction Dir>
253
254 template<Direction Dir>
256 static const Offset offset() {
258 }
259 static const Direction directionByBlack=DirectionTraitsGen<Dir>::altDir;
260 };
261 template<Direction Dir>
263
264 template <Player P, Direction D>
267 }
268} // namespace osl
269
270#endif /* OSL_DIRECTIONTRAITS_H */
271// ;;; Local Variables:
272// ;;; mode:c++
273// ;;; c-basic-offset:2
274// ;;; coding:utf-8
275// ;;; End:
座標の差分
Definition: basic_type.h:430
static Offset make()
@ ROOK
Definition: basic_type.h:100
@ PPAWN
Definition: basic_type.h:87
@ BISHOP
Definition: basic_type.h:99
@ PROOK
Definition: basic_type.h:92
@ PAWN
Definition: basic_type.h:95
@ KING
Definition: basic_type.h:93
@ KNIGHT
Definition: basic_type.h:97
@ SILVER
Definition: basic_type.h:98
@ PKNIGHT
Definition: basic_type.h:89
@ GOLD
Definition: basic_type.h:94
@ PLANCE
Definition: basic_type.h:88
@ PBISHOP
Definition: basic_type.h:91
@ LANCE
Definition: basic_type.h:96
@ PSILVER
Definition: basic_type.h:90
Direction
Definition: basic_type.h:310
@ R
Definition: basic_type.h:317
@ LONG_DL
Definition: basic_type.h:330
@ LONG_DR
Definition: basic_type.h:332
@ D
Definition: basic_type.h:319
@ LONG_UL
Definition: basic_type.h:325
@ UUR
Definition: basic_type.h:323
@ LONG_U
Definition: basic_type.h:326
@ LONG_L
Definition: basic_type.h:328
@ UUL
Definition: basic_type.h:322
@ UL
Definition: basic_type.h:313
@ LONG_D
Definition: basic_type.h:331
@ DR
Definition: basic_type.h:320
@ U
Definition: basic_type.h:314
@ L
Definition: basic_type.h:316
@ UR
Definition: basic_type.h:315
@ LONG_R
Definition: basic_type.h:329
@ DL
Definition: basic_type.h:318
@ LONG_UR
Definition: basic_type.h:327
@ WHITE
Definition: basic_type.h:10
@ BLACK
Definition: basic_type.h:9
constexpr Direction primDir(Direction d)
8方向について,primitiveな4方向を求める
Definition: basic_type.h:366
static const unsigned int mask
static const Direction longDir
static const bool canPromoteTo
static const Direction primDir
static const Offset blackOffset()
static const Direction altDir
static const int blackDx
static const bool isLong
static const int blackDy
static const int ptypeMaskNotKing
static const int ptypeMask