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/pieceTable.h"
00006 #include <iostream>
00007 namespace osl
00008 {
00009   // explicit template instantiation
00010   template int PieceEval::computeDiffAfterMove<BLACK>
00011   (const NumEffectState&, Move);
00012   template int PieceEval::computeDiffAfterMove<WHITE>
00013   (const NumEffectState&, Move);
00014 }
00015 
00016 osl::PieceEval::PieceEval(const NumEffectState& state)
00017 {
00018   int ret=0;
00019   for (int num=0;num<Piece::SIZE;num++) {
00020     if (state.standMask(BLACK).test(num))
00021     {
00022       ret+=Ptype_Eval_Table.value(newPtypeO(BLACK,Piece_Table.getPtypeOf(num)));
00023     }
00024     else if (state.standMask(WHITE).test(num))
00025     {
00026       ret+=Ptype_Eval_Table.value(newPtypeO(WHITE,Piece_Table.getPtypeOf(num)));
00027     }
00028     else{
00029       assert(state.isOnBoard(num));
00030       Piece p=state.pieceOf(num);
00031       ret+=Ptype_Eval_Table.value(p.ptypeO());
00032     }
00033   }
00034   val=ret;
00035 }
00036 
00037 osl::eval::PtypeEvalTable::PtypeEvalTable()
00038 { 
00039   const CArray<int, PTYPE_SIZE> values = {{
00040       0, 0,
00041       PtypeEvalTraits<PPAWN>::val, PtypeEvalTraits<PLANCE>::val,
00042       PtypeEvalTraits<PKNIGHT>::val, PtypeEvalTraits<PSILVER>::val,
00043       PtypeEvalTraits<PBISHOP>::val, PtypeEvalTraits<PROOK>::val,
00044       //
00045       PtypeEvalTraits<KING>::val, PtypeEvalTraits<GOLD>::val,
00046       //
00047       PtypeEvalTraits<PAWN>::val, PtypeEvalTraits<LANCE>::val,
00048       PtypeEvalTraits<KNIGHT>::val, PtypeEvalTraits<SILVER>::val, 
00049       PtypeEvalTraits<BISHOP>::val, PtypeEvalTraits<ROOK>::val,
00050     }};
00051   reset(values);
00052 }
00053 osl::eval::PtypeEvalTable::~PtypeEvalTable()
00054 { 
00055 }
00056 
00057 void osl::eval::PtypeEvalTable::reset(const CArray<int,PTYPE_SIZE>& values)
00058 {
00059   ptypeO2Val.fill(0);
00060   std::copy(values.begin(), values.end(), ptypeO2Val.begin()+16);
00061   for(int i=PTYPE_MIN;i<=PTYPE_MAX;i++)
00062   {
00063     Ptype ptype=static_cast<Ptype>(i);
00064     ptypeO2Val[newPtypeO(WHITE,ptype)-PTYPEO_MIN]=
00065       -ptypeO2Val[newPtypeO(BLACK,ptype)-PTYPEO_MIN];
00066   }
00067   for(int i=PTYPEO_MIN;i<=PTYPEO_MAX;i++)
00068   {
00069     PtypeO ptypeO=static_cast<PtypeO>(i);
00070     PtypeO basicPtypeO=unpromote(ptypeO);
00071     // note: value() depends on ptypeO2Val
00072     promoteVal[i-PTYPEO_MIN]=this->value(ptypeO)-this->value(basicPtypeO);
00073   }
00074   // EMPTYのcapture
00075   captureVal[0]=0;
00076   for(int i=PTYPEO_MIN;i<=PTYPEO_MAX;i++)
00077   {
00078     PtypeO ptypeO=static_cast<PtypeO>(i);
00079     // note: value() depends on ptypeO2Val
00080     if(isPiece(ptypeO))
00081       captureVal[i-PTYPEO_MIN]=this->value(captured(ptypeO))-
00082         this->value(ptypeO);
00083     else
00084       captureVal[i-PTYPEO_MIN]=0;
00085   }
00086 }
00087 
00088 // ;;; Local Variables:
00089 // ;;; mode:c++
00090 // ;;; c-basic-offset:2
00091 // ;;; coding:utf-8
00092 // ;;; End:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines