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:
座標の差分
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