core
osl
bits
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
8
namespace
osl
9
{
10
template
<Direction Dir>
11
struct
DirectionTraitsGen
;
12
13
template
<>
14
struct
DirectionTraitsGen
<
UL
>{
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
<>
27
struct
DirectionTraitsGen
<
U
>{
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
<>
40
struct
DirectionTraitsGen
<
UR
>{
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
<>
52
struct
DirectionTraitsGen
<
L
>{
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
<>
64
struct
DirectionTraitsGen
<
R
>{
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
<>
76
struct
DirectionTraitsGen
<
DL
>{
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
<>
87
struct
DirectionTraitsGen
<
D
>{
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
<>
99
struct
DirectionTraitsGen
<
DR
>{
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
<>
110
struct
DirectionTraitsGen
<
UUL
>{
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
<>
122
struct
DirectionTraitsGen
<
UUR
>{
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
<>
135
struct
DirectionTraitsGen
<
LONG_UL
>{
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
<>
147
struct
DirectionTraitsGen
<
LONG_U
>{
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
<>
159
struct
DirectionTraitsGen
<
LONG_UR
>{
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
<>
170
struct
DirectionTraitsGen
<
LONG_L
>{
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
<>
181
struct
DirectionTraitsGen
<
LONG_R
>{
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
<>
192
struct
DirectionTraitsGen
<
LONG_DL
>{
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
<>
203
struct
DirectionTraitsGen
<
LONG_D
>{
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
<>
214
struct
DirectionTraitsGen
<
LONG_DR
>{
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>
225
struct
DirectionTraits
{
226
// これらを関数にすると押し込められる
227
static
const
unsigned
int
mask=1<<
static_cast<
int
>
(Dir);
228
static
const
bool
isLong
=(
static_cast<
int
>
(Dir) >=
LONG_UL
);
229
static
const
int
blackDx=
DirectionTraitsGen<Dir>::blackDx
;
230
static
const
int
blackDy=
DirectionTraitsGen<Dir>::blackDy
;
231
static
const
Offset
blackOffset
() {
return
Offset
(blackDx,blackDy); }
232
static
const
bool
canPromoteTo=
DirectionTraitsGen<Dir>::canPromoteTo
;
233
static
const
Direction
longDir=
DirectionTraitsGen<Dir>::longDir
;
234
static
const
int
ptypeMask=
DirectionTraitsGen<Dir>::ptypeMask
;
235
static
const
int
ptypeMaskNotKing=
DirectionTraitsGen<Dir>::ptypeMask
&
236
~(1<<
KING
);
237
static
const
Direction
primDir=
DirectionTraitsGen<Dir>::primDir
;
238
static
const
Direction
altDir=
DirectionTraitsGen<Dir>::altDir
;
239
};
240
241
template
<Direction Dir,Player P>
242
struct
DirectionPlayerTraits
;
243
244
template
<Direction Dir>
245
struct
DirectionPlayerTraits
<Dir,
BLACK
>{
246
static
const
Offset
offset
() {
247
return
DirectionTraits<Dir>::blackOffset
();
248
}
249
static
const
Direction
directionByBlack=Dir;
250
};
251
template
<Direction Dir>
252
const
Direction
DirectionPlayerTraits<Dir,BLACK>::directionByBlack
;
253
254
template
<Direction Dir>
255
struct
DirectionPlayerTraits
<Dir,
WHITE
>{
256
static
const
Offset
offset
() {
257
return
-
DirectionTraits<Dir>::blackOffset
();
258
}
259
static
const
Direction
directionByBlack=
DirectionTraitsGen<Dir>::altDir
;
260
};
261
template
<Direction Dir>
262
const
Direction
DirectionPlayerTraits<Dir,WHITE>::directionByBlack
;
263
264
template
<Player P, Direction D>
265
Offset
Offset::make
() {
266
return
DirectionPlayerTraits<D,P>::offset
();
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:
osl::PKNIGHT
Definition:
basic_type.h:89
osl::L
Definition:
basic_type.h:316
osl::LONG_U
Definition:
basic_type.h:326
osl::BISHOP
Definition:
basic_type.h:99
osl::PPAWN
Definition:
basic_type.h:87
osl
Definition:
additionalEffect.h:5
osl::DirectionTraits::blackOffset
static const Offset blackOffset()
Definition:
directionTraits.h:231
osl::DirectionTraits
Definition:
directionTraits.h:225
osl::DirectionPlayerTraits
Definition:
directionTraits.h:242
osl::Offset
座標の差分
Definition:
basic_type.h:429
osl::PBISHOP
Definition:
basic_type.h:91
osl::ROOK
Definition:
basic_type.h:100
osl::DL
Definition:
basic_type.h:318
osl::SILVER
Definition:
basic_type.h:98
basic_type.h
osl::DirectionPlayerTraits< Dir, BLACK >::offset
static const Offset offset()
Definition:
directionTraits.h:246
osl::BLACK
Definition:
basic_type.h:9
osl::LONG_UL
Definition:
basic_type.h:325
osl::U
Definition:
basic_type.h:314
osl::PROOK
Definition:
basic_type.h:92
osl::UL
Definition:
basic_type.h:313
osl::DirectionPlayerTraits< Dir, WHITE >::offset
static const Offset offset()
Definition:
directionTraits.h:256
osl::LONG_UR
Definition:
basic_type.h:327
osl::UR
Definition:
basic_type.h:315
osl::LONG_L
Definition:
basic_type.h:328
osl::DirectionTraitsGen
Definition:
directionTraits.h:11
osl::KNIGHT
Definition:
basic_type.h:97
osl::primDir
constexpr Direction primDir(Direction d)
8方向について,primitiveな4方向を求める
Definition:
basic_type.h:366
osl::LONG_DL
Definition:
basic_type.h:330
osl::WHITE
Definition:
basic_type.h:10
osl::Offset::make
static Offset make()
Definition:
directionTraits.h:265
osl::PSILVER
Definition:
basic_type.h:90
osl::R
Definition:
basic_type.h:317
osl::LONG_DR
Definition:
basic_type.h:332
osl::Direction
Direction
Definition:
basic_type.h:310
osl::PLANCE
Definition:
basic_type.h:88
osl::isLong
constexpr bool isLong(Direction d)
Definition:
basic_type.h:350
osl::LANCE
Definition:
basic_type.h:96
osl::UUL
Definition:
basic_type.h:322
osl::GOLD
Definition:
basic_type.h:94
osl::LONG_D
Definition:
basic_type.h:331
osl::UUR
Definition:
basic_type.h:323
osl::D
Definition:
basic_type.h:319
osl::KING
Definition:
basic_type.h:93
osl::DR
Definition:
basic_type.h:320
osl::LONG_R
Definition:
basic_type.h:329
osl::PAWN
Definition:
basic_type.h:95
Generated by
1.8.13