00001 /* killerMoveTable.h 00002 */ 00003 #ifndef _KILLERMOVETABLE_H 00004 #define _KILLERMOVETABLE_H 00005 00006 #include "osl/search/lRUMoves.h" 00007 #include "osl/container/moveVector.h" 00008 #include "osl/state/numEffectState.h" 00009 #include <cstddef> 00010 #include <cassert> 00011 namespace osl 00012 { 00013 namespace search 00014 { 00022 class KillerMoveTable 00023 { 00024 public: 00025 static const int KillerMoveMax = 64; 00026 private: 00027 CArray<LRUMoves,KillerMoveMax> killer_moves; 00028 public: 00029 KillerMoveTable(); 00030 ~KillerMoveTable(); 00031 void clear(); 00032 void setMove(size_t depth, const Move& move) 00033 { 00034 assert(move.isValid()); 00035 killer_moves[depth].setMove(move); 00036 } 00037 void getMove(const NumEffectState& state, size_t depth, 00038 MoveVector& out) const 00039 { 00040 const LRUMoves& moves = killer_moves[depth]; 00041 for (size_t i=0; i<moves.size(); ++i) 00042 { 00043 Move m; 00044 { 00045 m = moves[i]; 00046 } 00047 if (! m.isNormal()) 00048 return; 00049 if (state.isAlmostValidMove<false>(m)) 00050 out.push_back(m); 00051 } 00052 } 00053 }; 00054 } // namespace search 00055 } // namespace osl 00056 00057 #endif /* _KILLERMOVETABLE_H */ 00058 // ;;; Local Variables: 00059 // ;;; mode:c++ 00060 // ;;; c-basic-offset:2 00061 // ;;; End: