説明を見る。00001
00002
00003 #ifndef OSL_CHECKMATE_IMMEDIATE_CHECKMATE_TABLE_H
00004 #define OSL_CHECKMATE_IMMEDIATE_CHECKMATE_TABLE_H
00005 #include "osl/basic_type.h"
00006 #include "osl/bits/king8Info.h"
00007
00008 namespace osl
00009 {
00010 namespace checkmate
00011 {
00012 class ImmediateCheckmateTable
00013 {
00014 private:
00015 CArray<unsigned char,0x10000u> dropPtypeMasks;
00016 CArray2d<unsigned char,0x100u,PTYPE_SIZE> ptypeDropMasks;
00017 CArray2d<unsigned char,PTYPE_SIZE,8> blockingMasks;
00018 CArray2d<unsigned short,PTYPE_SIZE,8> noEffectMasks;
00019 public:
00020 ImmediateCheckmateTable();
00021 unsigned char dropPtypeMaskOf(unsigned int liberty_drop_mask) const
00022 {
00023 return dropPtypeMasks[liberty_drop_mask];
00024 }
00025 unsigned char dropPtypeMask(King8Info canMoveMask) const
00026 {
00027 return dropPtypeMaskOf(canMoveMask.libertyDropMask());
00028 }
00029 unsigned int ptypeDropMask(Ptype ptype,King8Info canMoveMask) const
00030 {
00031 return ptypeDropMasks[canMoveMask.liberty()][ptype];
00032 }
00033 unsigned int blockingMask(Ptype ptype,Direction dir) const
00034 {
00035 assert(static_cast<int>(dir)<8);
00036 return blockingMasks[ptype][dir];
00037 }
00038 unsigned int noEffectMask(Ptype ptype,Direction dir) const
00039 {
00040 assert(static_cast<int>(dir)<8);
00041 return noEffectMasks[ptype][dir];
00042 }
00043 };
00044 extern const ImmediateCheckmateTable Immediate_Checkmate_Table;
00045 }
00046 }
00047
00048 #endif
00049
00050
00051
00052
00053