killerMoveTable.h
Go to the documentation of this file.
00001 /* killerMoveTable.h
00002  */
00003 #ifndef OSL_KILLERMOVETABLE_H
00004 #define OSL_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 /* OSL_KILLERMOVETABLE_H */
00058 // ;;; Local Variables:
00059 // ;;; mode:c++
00060 // ;;; c-basic-offset:2
00061 // ;;; End:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines