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