Main Page
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
include
osl
effect
moveSignature.h
Go to the documentation of this file.
1
#ifndef _MOVE_SIGNATURE_H
2
#define _MOVE_SIGNATURE_H
3
#include "
osl/misc/carray.h
"
4
#include "
osl/ptype.h
"
5
#include "
osl/ptypeTraits.h
"
6
#include <iosfwd>
7
8
namespace
osl
9
{
10
namespace
effect
11
{
16
// enumにするとsizeof(MoveSignature)が1にならない可能性があるので
17
typedef
unsigned
char
MoveSignature
;
18
const
int
MS_PLAYER
=(1<<7);
19
const
int
MS_LONG_U
=(1<<5);
20
const
int
MS_U
=(1<<4);
21
const
int
MS_UL_UR
=(1<<3);
22
const
int
MS_L_R_D
=(1<<2);
23
const
int
MS_DL_DR
=(1<<1);
24
const
int
MS_UUL_UUR
=(1<<0);
25
26
template
<Player P>
27
inline
MoveSignature
getPlayerMask
();
28
29
template
<>
30
inline
MoveSignature
getPlayerMask<BLACK>
(){
return
0; }
31
32
template
<>
33
inline
MoveSignature
getPlayerMask<WHITE>
(){
return
MS_PLAYER
; }
34
35
std::ostream&
operator<<
(std::ostream& os,
const
MoveSignature
signature);
36
37
template
<Ptype T>
38
struct
SignatureTraits
{
39
static
const
MoveSignature
signature
=
40
((
PtypeTraits<T>::moveMask
&
DirectionTraits<LONG_U>::mask
)!=0 ?
MS_LONG_U
: 0) |
41
((
PtypeTraits<T>::moveMask
& (
DirectionTraits<LONG_U>::mask
|
DirectionTraits<U>::mask
) )!=0 ?
MS_U
: 0) |
42
((
PtypeTraits<T>::moveMask
& (
DirectionTraits<LONG_UL>::mask
|
DirectionTraits<UL>::mask
) )!=0 ?
MS_UL_UR
: 0) |
43
((
PtypeTraits<T>::moveMask
& (
DirectionTraits<LONG_L>::mask
|
DirectionTraits<L>::mask
) )!=0 ?
MS_L_R_D
: 0) |
44
((
PtypeTraits<T>::moveMask
& (
DirectionTraits<LONG_DL>::mask
|
DirectionTraits<DL>::mask
) )!=0 ?
MS_DL_DR
: 0) |
45
((
PtypeTraits<T>::moveMask
&
DirectionTraits<UUL>::mask
)!=0 ?
MS_UUL_UUR
: 0);
46
};
47
48
const
MoveSignature
signature_EMPTY
=
getPlayerMask<BLACK>
();
49
const
MoveSignature
signature_EDGE
=
getPlayerMask<WHITE>
();
50
54
class
MoveSignatureTable
{
55
CArray<MoveSignature,PTYPEO_SIZE>
signatures
;
56
private
:
57
template
<Ptype T>
58
void
setSignature
();
59
template
<Ptype T>
60
void
setSignatures
(Int2Type<T>);
61
public
:
62
MoveSignatureTable
();
63
MoveSignature
getSignature
(
PtypeO
ptypeo)
const
{
64
assert(
isValidPtypeO
(ptypeo));
65
return
signatures
[
static_cast<
int
>
(ptypeo)-
PTYPEO_MIN
];
66
}
67
};
68
extern
const
MoveSignatureTable
Move_Signature_Table
;
69
}
// namespace effect
70
}
// namespace osl
71
#endif // _MOVE_SIGNATURE_H
72
// ;;; Local Variables:
73
// ;;; mode:c++
74
// ;;; c-basic-offset:2
75
// ;;; End:
Generated on Sun Jul 21 2013 13:37:25 by
1.8.4