Go to the documentation of this file.00001
00002
00003 #ifndef OSL_CHECKMATE_IMMEDIATE_CHECKMATE_TABLE_H
00004 #define OSL_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<unsigned char,0x10000u> dropPtypeMasks;
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 unsigned char dropPtypeMaskOf(unsigned int liberty_drop_mask) const
00026 {
00027 return dropPtypeMasks[liberty_drop_mask];
00028 }
00029 unsigned char dropPtypeMask(King8Info canMoveMask) const
00030 {
00031 return dropPtypeMaskOf(canMoveMask.libertyDropMask());
00032 }
00033 unsigned int ptypeDropMask(Ptype ptype,King8Info canMoveMask) const
00034 {
00035 return ptypeDropMasks(canMoveMask.liberty(),ptype);
00036 }
00037 unsigned int blockingMask(Ptype ptype,Direction dir) const
00038 {
00039 assert(static_cast<int>(dir)<8);
00040 return blockingMasks(ptype,dir);
00041 }
00042 unsigned int noEffectMask(Ptype ptype,Direction dir) const
00043 {
00044 assert(static_cast<int>(dir)<8);
00045 return noEffectMasks(ptype,dir);
00046 }
00047 };
00048 extern const ImmediateCheckmateTable Immediate_Checkmate_Table;
00049 }
00050 }
00051
00052 #endif
00053
00054
00055
00056
00057