Main Page
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
include
osl
ptype.h
Go to the documentation of this file.
1
#ifndef OSL_PTYPE_H
2
#define OSL_PTYPE_H
3
4
#include "
osl/config.h
"
5
#include "
osl/player.h
"
6
#include <cassert>
7
#include <iosfwd>
8
9
namespace
osl
10
{
11
13
enum
Ptype
14
{
15
PTYPE_EMPTY
=0,
16
PTYPE_EDGE
=1,
17
PPAWN
=2,
18
PLANCE
=3,
19
PKNIGHT
=4,
20
PSILVER
=5,
21
PBISHOP
=6,
22
PROOK
=7,
23
KING
=8,
24
GOLD
=9,
25
PAWN
=10,
26
LANCE
=11,
27
KNIGHT
=12,
28
SILVER
=13,
29
BISHOP
=14,
30
ROOK
=15,
31
32
PTYPE_MIN
=0,
33
PTYPE_BASIC_MIN
=
KING
,
34
PTYPE_PIECE_MIN
=2,
35
PTYPE_MAX
=15,
36
};
37
const
int
PTYPE_SIZE
=
PTYPE_MAX
-
PTYPE_MIN
+1;
38
39
std::istream&
operator>>
(std::istream& is,
Ptype
& ptype);
40
std::ostream&
operator<<
(std::ostream& os,
const
Ptype
ptype);
41
45
bool
isValid
(
Ptype
ptype);
46
50
inline
bool
isPiece
(
Ptype
ptype)
51
{
52
assert(
isValid
(ptype));
53
return
static_cast<
int
>
(ptype)>=
PTYPE_PIECE_MIN
;
54
}
58
inline
bool
isBasic
(
Ptype
ptype)
59
{
60
assert(
isValid
(ptype));
61
return
static_cast<
int
>
(ptype)>
PROOK
;
62
}
63
67
inline
bool
isPromoted
(
Ptype
ptype)
68
{
69
assert(
isPiece
(ptype));
70
return
static_cast<
int
>
(ptype)<
KING
;
71
}
72
77
inline
bool
canPromote
(
Ptype
ptype)
78
{
79
assert(
isPiece
(ptype));
80
return
static_cast<
int
>
(ptype)>
GOLD
;
81
}
82
87
inline
Ptype
unpromote
(
Ptype
ptype)
88
{
89
assert(
isPiece
(ptype));
90
Ptype
ret=
static_cast<
Ptype
>
(
static_cast<
int
>
(ptype)|8);
91
assert(
isPiece
(ret));
92
return
ret;
93
}
94
inline
Ptype
unpromoteSafe
(
Ptype
ptype)
95
{
96
if
(!
isPiece
(ptype))
97
return
ptype;
98
return
unpromote
(ptype);
99
}
100
105
inline
Ptype
promote
(
Ptype
ptype)
106
{
107
assert(
canPromote
(ptype));
108
Ptype
ret=
static_cast<
Ptype
>
(
static_cast<
int
>
(ptype)-8);
109
assert(
isPiece
(ret));
110
return
ret;
111
}
112
113
inline
bool
isMajorBasic
(
Ptype
ptype)
114
{
115
return
ptype >= 14;
116
}
117
inline
bool
isMajor
(
Ptype
ptype)
118
{
119
assert(
isPiece
(ptype));
120
return
isMajorBasic
(
unpromote
(ptype));
121
}
122
inline
bool
isMajorNonPieceOK
(
Ptype
ptype)
123
{
124
return
(static_cast<int>(ptype)|8)>=14;
125
}
126
131
enum
PtypeO
{
132
PTYPEO_MIN
=
PTYPE_EMPTY
-16,
133
PTYPEO_MAX
= 15,
134
};
135
136
#define NEW_PTYPEO(player,ptype) static_cast<PtypeO>(static_cast<int>(ptype)-(16&static_cast<int>(player)))
137
inline
unsigned
int
ptypeOIndex
(
PtypeO
ptypeo)
138
{
139
const
int
result
= ptypeo -
PTYPEO_MIN
;
140
assert(result >= 0);
141
return
result
;
142
}
143
inline
PtypeO
newPtypeO
(
Player
player,
Ptype
ptype)
144
{
145
return
static_cast<
PtypeO
>
(
static_cast<
int
>
(ptype)-(16&static_cast<int>(player)));
146
}
147
148
149
inline
Ptype
getPtype
(
PtypeO
ptypeO)
150
{
151
return
static_cast<
Ptype
>
(
static_cast<
int
>
(ptypeO)& 15);
152
}
153
155
inline
PtypeO
promote
(
PtypeO
ptypeO)
156
{
157
assert(
canPromote
(
getPtype
(ptypeO)));
158
PtypeO
ret=
static_cast<
PtypeO
>
(
static_cast<
int
>
(ptypeO)-8);
159
assert(
isPiece
(
getPtype
(ret)));
160
return
ret;
161
}
162
164
inline
PtypeO
promoteWithMask
(
PtypeO
ptypeO,
int
promoteMask)
165
{
166
assert(promoteMask==0 || promoteMask==0x800000);
167
PtypeO
ret=
static_cast<
PtypeO
>
(
static_cast<
int
>
(ptypeO)-(promoteMask>>20));
168
return
ret;
169
}
170
172
inline
PtypeO
unpromote
(
PtypeO
ptypeO)
173
{
174
return
static_cast<
PtypeO
>
(
static_cast<
int
>
(ptypeO)|8);
175
}
176
177
bool
isValidPtypeO
(
int
ptypeO);
178
182
inline
bool
isPiece
(
PtypeO
ptypeO)
183
{
184
assert(
isValidPtypeO
(ptypeO));
185
return
isPiece
(
getPtype
(ptypeO));
186
}
187
188
inline
Player
getOwner
(
PtypeO
ptypeO)
189
{
190
assert(
isPiece
(ptypeO));
191
return
static_cast<
Player
>
(
static_cast<
int
>
(ptypeO)>>31);
192
}
193
194
196
inline
PtypeO
captured
(
PtypeO
ptypeO)
197
{
198
assert(
isPiece
(ptypeO));
199
return
static_cast<
PtypeO
>
((
static_cast<
int
>
(ptypeO)|8)^(~15));
200
}
201
203
inline
PtypeO
alt
(
PtypeO
ptypeO)
204
{
205
assert(
isPiece
(ptypeO));
206
return
static_cast<
PtypeO
>
(
static_cast<
int
>
(ptypeO)^(~15));
207
}
208
213
inline
PtypeO
altIfPiece
(
PtypeO
ptypeO)
214
{
215
int
v=
static_cast<
int
>
(ptypeO);
216
return
static_cast<
PtypeO
>
(v^((1-(v&15))&~15));
217
}
218
219
inline
bool
canPromote
(
PtypeO
ptypeO)
220
{
221
return
canPromote
(
getPtype
(ptypeO));
222
}
223
224
228
inline
bool
isPromoted
(
PtypeO
ptypeO)
229
{
230
assert(
isValidPtypeO
(ptypeO));
231
return
isPromoted
(
getPtype
(ptypeO));
232
}
233
234
235
const
PtypeO
PTYPEO_EMPTY
=
newPtypeO
(
BLACK
,
PTYPE_EMPTY
);
236
const
PtypeO
PTYPEO_EDGE
=
newPtypeO
(
WHITE
,
PTYPE_EDGE
);
237
238
std::ostream&
operator<<
(std::ostream& os,
const
PtypeO
ptypeO);
239
240
const
int
PTYPEO_SIZE
=
PTYPEO_MAX
-
PTYPEO_MIN
+1;
241
242
}
// namespace osl
243
244
#endif
/* OSL_PTYPE_H */
245
// ;;; Local Variables:
246
// ;;; mode:c++
247
// ;;; c-basic-offset:2
248
// ;;; End:
Generated on Sun Jul 21 2013 13:37:26 by
1.8.4