My Project
ptypeTable.cc
Go to the documentation of this file.
1/* ptypeTable.cc
2 */
5
7{
8 init();
9
10 {
11 // guard
12 assert(&effect(newPtypeO(WHITE,ROOK), Offset32(2,8))
15 Offset32(Square(7,1),Square(8,1)))
17 }
18}
19
20template<osl::Ptype T>
37
38template<osl::Ptype T>
40{
41 names[static_cast<int>(T)]=PtypeTraits<T>::name();
42 csaNames[static_cast<int>(T)]=PtypeTraits<T>::csaName();
43 moveMasks[static_cast<int>(T)]=PtypeTraits<T>::moveMask;
45}
46
47template<osl::Ptype T>
52
54{
55 numMaskLows.fill();
56 numIndices.fill();
57
74 effectTable.fill();
76 shortMoveMask.fill();
77 static_assert(sizeof(EffectContent) == 4, "size");
78 assert(&effect(newPtypeO(WHITE,ROOK), Offset32(2,8))
80 assert(! getEffect(newPtypeO(BLACK,ROOK), Offset32(-1,8)).hasEffect());
81
82 for(int ptype=PTYPE_MIN;ptype<=PTYPE_MAX;ptype++){
83 for(int j=DIRECTION_MIN;j<=DIRECTION_MAX;j++){
84 Direction dir=static_cast<Direction>(j);
85
86 if((moveMasks[ptype]&(1<<dir))!=0){
87 int dx=Board_Table.getDxForBlack(dir);
88 int dy=Board_Table.getDyForBlack(dir);
89 Offset32 offset32=Offset32(dx,dy);
90 Offset offset=newOffset(dx,dy);
91 if(isLong(dir)){
92 shortMoveMask[0][dir-10]|=1<<(ptype-PTYPEO_MIN);
93 shortMoveMask[1][dir-10]|=1<<(ptype-16-PTYPEO_MIN);
94
95 effectTable[ptype-PTYPEO_MIN][offset32.index()]=EffectContent::DIRECT(offset);
96 effectTable[ptype-16-PTYPEO_MIN][(-offset32).index()]=EffectContent::DIRECT(-offset);
97
98 for(int i=2;i<9;i++){
99 offset32=Offset32(dx*i,dy*i);
100 effectTable[ptype-PTYPEO_MIN][offset32.index()]=EffectContent(offset);
101 effectTable[ptype-16-PTYPEO_MIN][(-offset32).index()]=EffectContent(-offset);
102
103 if(static_cast<int>(dir)!=LONG_U){
104 effectTableNotLongU[ptype-PTYPEO_MIN][offset32.index()]=effectTable[ptype-PTYPEO_MIN][offset32.index()];
105 effectTableNotLongU[ptype-16-PTYPEO_MIN][(-offset32).index()]=effectTable[ptype-16-PTYPEO_MIN][(-offset32).index()];
106 }
107 }
108 }
109 else{
110 shortMoveMask[0][dir]|=1<<(ptype-PTYPEO_MIN);
111 shortMoveMask[1][dir]|=1<<(ptype-16-PTYPEO_MIN);
113 effectTable[ptype-16-PTYPEO_MIN][(-offset32).index()]=EffectContent::DIRECT();
114
115 assert(! getEffect(newPtypeO(BLACK,ROOK),Offset32(-1,8)).hasEffect());
116 }
117 }
118 }
119 }
120}
121
122/* ------------------------------------------------------------------------- */
123// ;;; Local Variables:
124// ;;; mode:c++
125// ;;; c-basic-offset:2
126// ;;; End:
static const EffectContent DIRECT()
unsigned int index() const
Definition offset32.h:40
座標の差分
Definition basic_type.h:430
CArray< mask_t, PTYPE_SIZE > numMaskLows
Definition ptypeTable.h:18
CArray2d< EffectContent, PTYPEO_SIZE, Offset32::SIZE > effectTableNotLongU
Definition ptypeTable.h:30
CArray< int, PTYPE_SIZE > moveMasks
Definition ptypeTable.h:23
void initPtypeSub(Int2Type< false > isBasic)
Definition ptypeTable.cc:39
CArray< int, PTYPE_SIZE > numIndices
Definition ptypeTable.h:19
const EffectContent getEffect(PtypeO ptypeo, Square from, Square to) const
fromにいるptypeoがtoに利きを持つか?
Definition ptypeTable.h:112
CArray2d< int, 2, PTYPE_SIZE > canDropLimit
Definition ptypeTable.h:27
EffectContent & effect(PtypeO ptypeo, Offset32 offset32)
Definition ptypeTable.h:123
CArray< const char *, PTYPE_SIZE > names
Definition ptypeTable.h:20
CArray< bool, PTYPE_SIZE > betterToPromote
Definition ptypeTable.h:22
CArray< int, PTYPE_SIZE > indexMins
Definition ptypeTable.h:24
CArray2d< EffectContent, PTYPEO_SIZE, Offset32::SIZE > effectTable
Definition ptypeTable.h:29
CArray2d< unsigned int, 2, SHORT_DIRECTION_SIZE > shortMoveMask
Definition ptypeTable.h:31
CArray< const char *, PTYPE_SIZE > csaNames
Definition ptypeTable.h:21
CArray< int, PTYPE_SIZE > indexLimits
Definition ptypeTable.h:25
static int reverseY(int y)
Definition basic_type.h:652
static const GeneralMask makeDirect(mask_int_t value)
Definition mask.h:219
@ PTYPE_MAX
Definition basic_type.h:105
@ ROOK
Definition basic_type.h:100
@ PPAWN
Definition basic_type.h:87
@ PTYPE_MIN
Definition basic_type.h:102
bool canPromote(Ptype ptype)
ptypeがpromote可能な型かどうかのチェック promote済みの場合はfalseを返す
Definition basic_type.h:147
const BoardTable Board_Table
Definition tables.cc:95
Direction
Definition basic_type.h:310
@ DIRECTION_MAX
Definition basic_type.h:337
@ LONG_U
Definition basic_type.h:326
@ DIRECTION_MIN
Definition basic_type.h:334
Offset32Base< 8, 9 > Offset32
Definition offset32.h:63
@ WHITE
Definition basic_type.h:10
@ BLACK
Definition basic_type.h:9
Offset newOffset(int dx, int dy)
@obsolete
Definition basic_type.h:508
@ PTYPEO_MIN
Definition basic_type.h:200
constexpr bool isLong(Direction d)
Definition basic_type.h:350
PtypeO newPtypeO(Player player, Ptype ptype)
Definition basic_type.h:211
Ptype promote(Ptype ptype)
promote可能なptypeに対して,promote後の型を返す promote不可のptypeを与えてはいけない.
Definition basic_type.h:173
static const uint64_t indexMask