pieceEval.cc
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   // explicit template instantiation
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     // note: value() depends on ptypeO2Val
00083     promoteVal[i-PTYPEO_MIN]=this->value(ptypeO)-this->value(basicPtypeO);
00084   }
00085   // EMPTYのcapture
00086   captureVal[0]=0;
00087   for(int i=PTYPEO_MIN;i<=PTYPEO_MAX;i++)
00088   {
00089     PtypeO ptypeO=static_cast<PtypeO>(i);
00090     // note: value() depends on ptypeO2Val
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 // ;;; Local Variables:
00101 // ;;; mode:c++
00102 // ;;; c-basic-offset:2
00103 // ;;; coding:utf-8
00104 // ;;; End:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines