Go to the documentation of this file.00001 #include "osl/eval/pieceEval.h"
00002 #include "osl/eval/pieceEval.tcc"
00003 #include "osl/eval/evalTraits.h"
00004 #include "osl/state/numEffectState.h"
00005 #include "osl/effect_util/effectUtil.tcc"
00006 #include "osl/pieceTable.h"
00007
00008 namespace osl
00009 {
00010
00011 template int PieceEval::computeDiffAfterMove<BLACK>
00012 (const NumEffectState&, Move);
00013 template int PieceEval::computeDiffAfterMove<WHITE>
00014 (const NumEffectState&, Move);
00015
00016 #ifndef DFPNSTATONE
00017 #ifndef MINIMAL
00018 template void
00019 EffectUtil::findThreat<PieceEval>(const NumEffectState& state,
00020 Square position,
00021 PtypeO ptypeo,
00022 PieceVector& out);
00023 #endif
00024 #endif
00025 }
00026
00027 osl::PieceEval::PieceEval(const NumEffectState& state)
00028 {
00029 int ret=0;
00030 for (int num=0;num<Piece::SIZE;num++) {
00031 if (state.standMask(BLACK).test(num))
00032 {
00033 ret+=Ptype_Eval_Table.value(newPtypeO(BLACK,Piece_Table.getPtypeOf(num)));
00034 }
00035 else if (state.standMask(WHITE).test(num))
00036 {
00037 ret+=Ptype_Eval_Table.value(newPtypeO(WHITE,Piece_Table.getPtypeOf(num)));
00038 }
00039 else{
00040 assert(state.isOnBoard(num));
00041 Piece p=state.pieceOf(num);
00042 ret+=Ptype_Eval_Table.value(p.ptypeO());
00043 }
00044 }
00045 val=ret;
00046 }
00047
00048 osl::eval::PtypeEvalTable::PtypeEvalTable()
00049 {
00050 const CArray<int, PTYPE_SIZE> values = {{
00051 0, 0,
00052 PtypeEvalTraits<PPAWN>::val, PtypeEvalTraits<PLANCE>::val,
00053 PtypeEvalTraits<PKNIGHT>::val, PtypeEvalTraits<PSILVER>::val,
00054 PtypeEvalTraits<PBISHOP>::val, PtypeEvalTraits<PROOK>::val,
00055
00056 PtypeEvalTraits<KING>::val, PtypeEvalTraits<GOLD>::val,
00057
00058 PtypeEvalTraits<PAWN>::val, PtypeEvalTraits<LANCE>::val,
00059 PtypeEvalTraits<KNIGHT>::val, PtypeEvalTraits<SILVER>::val,
00060 PtypeEvalTraits<BISHOP>::val, PtypeEvalTraits<ROOK>::val,
00061 }};
00062 reset(values);
00063 }
00064 osl::eval::PtypeEvalTable::~PtypeEvalTable()
00065 {
00066 }
00067
00068 void osl::eval::PtypeEvalTable::reset(const CArray<int,PTYPE_SIZE>& values)
00069 {
00070 ptypeO2Val.fill(0);
00071 std::copy(values.begin(), values.end(), ptypeO2Val.begin()+16);
00072 for(int i=PTYPE_MIN;i<=PTYPE_MAX;i++)
00073 {
00074 Ptype ptype=static_cast<Ptype>(i);
00075 ptypeO2Val[newPtypeO(WHITE,ptype)-PTYPEO_MIN]=
00076 -ptypeO2Val[newPtypeO(BLACK,ptype)-PTYPEO_MIN];
00077 }
00078 for(int i=PTYPEO_MIN;i<=PTYPEO_MAX;i++)
00079 {
00080 PtypeO ptypeO=static_cast<PtypeO>(i);
00081 PtypeO basicPtypeO=unpromote(ptypeO);
00082
00083 promoteVal[i-PTYPEO_MIN]=this->value(ptypeO)-this->value(basicPtypeO);
00084 }
00085
00086 captureVal[0]=0;
00087 for(int i=PTYPEO_MIN;i<=PTYPEO_MAX;i++)
00088 {
00089 PtypeO ptypeO=static_cast<PtypeO>(i);
00090
00091 if(isPiece(ptypeO))
00092 captureVal[i-PTYPEO_MIN]=this->value(captured(ptypeO))-
00093 this->value(ptypeO);
00094 else
00095 captureVal[i-PTYPEO_MIN]=0;
00096 }
00097 }
00098
00099
00100
00101
00102
00103
00104