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>
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
@ LONG_DL
Definition basic_type.h:330
@ LONG_DR
Definition basic_type.h:332
@ 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
@ LONG_D
Definition basic_type.h:331
@ LONG_R
Definition basic_type.h:329
@ 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