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 
8 namespace 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:
osl::DirectionTraits::ptypeMaskNotKing
static const int ptypeMaskNotKing
Definition: directionTraits.h:235
osl::UR
@ UR
Definition: basic_type.h:315
osl::LONG_L
@ LONG_L
Definition: basic_type.h:328
osl::DirectionTraits::blackDy
static const int blackDy
Definition: directionTraits.h:230
osl::WHITE
@ WHITE
Definition: basic_type.h:10
osl::R
@ R
Definition: basic_type.h:317
osl::LONG_DR
@ LONG_DR
Definition: basic_type.h:332
osl::LONG_DL
@ LONG_DL
Definition: basic_type.h:330
osl::DirectionTraits::blackOffset
static const Offset blackOffset()
Definition: directionTraits.h:231
osl::DirectionTraitsGen
Definition: directionTraits.h:11
osl::PLANCE
@ PLANCE
Definition: basic_type.h:88
osl::DirectionTraits::mask
static const unsigned int mask
Definition: directionTraits.h:227
osl::DirectionPlayerTraits< Dir, WHITE >::offset
static const Offset offset()
Definition: directionTraits.h:256
osl::PSILVER
@ PSILVER
Definition: basic_type.h:90
basic_type.h
osl::DirectionTraits::primDir
static const Direction primDir
Definition: directionTraits.h:237
osl::UUL
@ UUL
Definition: basic_type.h:322
osl::DirectionTraits::blackDx
static const int blackDx
Definition: directionTraits.h:229
osl::DirectionPlayerTraits< Dir, BLACK >::offset
static const Offset offset()
Definition: directionTraits.h:246
osl::Offset
座標の差分
Definition: basic_type.h:430
osl::LONG_D
@ LONG_D
Definition: basic_type.h:331
osl::LANCE
@ LANCE
Definition: basic_type.h:96
osl::UUR
@ UUR
Definition: basic_type.h:323
osl::D
@ D
Definition: basic_type.h:319
osl::DirectionPlayerTraits
Definition: directionTraits.h:242
osl::DirectionTraits::ptypeMask
static const int ptypeMask
Definition: directionTraits.h:234
osl::GOLD
@ GOLD
Definition: basic_type.h:94
osl::DR
@ DR
Definition: basic_type.h:320
osl::LONG_R
@ LONG_R
Definition: basic_type.h:329
osl::KING
@ KING
Definition: basic_type.h:93
osl::LONG_U
@ LONG_U
Definition: basic_type.h:326
osl::BISHOP
@ BISHOP
Definition: basic_type.h:99
osl::PAWN
@ PAWN
Definition: basic_type.h:95
osl::PPAWN
@ PPAWN
Definition: basic_type.h:87
osl::PKNIGHT
@ PKNIGHT
Definition: basic_type.h:89
osl::L
@ L
Definition: basic_type.h:316
osl::PBISHOP
@ PBISHOP
Definition: basic_type.h:91
osl::DirectionTraits::canPromoteTo
static const bool canPromoteTo
Definition: directionTraits.h:232
osl::DirectionTraits::altDir
static const Direction altDir
Definition: directionTraits.h:238
osl::Direction
Direction
Definition: basic_type.h:310
osl::ROOK
@ ROOK
Definition: basic_type.h:100
osl::DirectionTraits::longDir
static const Direction longDir
Definition: directionTraits.h:233
osl::primDir
constexpr Direction primDir(Direction d)
8方向について,primitiveな4方向を求める
Definition: basic_type.h:366
osl::BLACK
@ BLACK
Definition: basic_type.h:9
osl::Offset::make
static Offset make()
Definition: directionTraits.h:265
osl::DL
@ DL
Definition: basic_type.h:318
osl::SILVER
@ SILVER
Definition: basic_type.h:98
osl::LONG_UL
@ LONG_UL
Definition: basic_type.h:325
osl::DirectionTraits::isLong
static const bool isLong
Definition: directionTraits.h:228
osl::PROOK
@ PROOK
Definition: basic_type.h:92
osl::UL
@ UL
Definition: basic_type.h:313
osl::LONG_UR
@ LONG_UR
Definition: basic_type.h:327
osl::U
@ U
Definition: basic_type.h:314
osl::DirectionTraits
Definition: directionTraits.h:225
osl
Definition: additionalEffect.h:6
osl::KNIGHT
@ KNIGHT
Definition: basic_type.h:97