00001
00002
00003 #ifndef _BLOCKING_SIMULATION_H
00004 #define _BLOCKING_SIMULATION_H
00005
00006 #include "osl/state/numEffectState.h"
00007 #include "osl/hash/hashKey.h"
00008 namespace osl
00009 {
00010 class PathEncoding;
00011 namespace checkmate
00012 {
00013 class CheckHashRecord;
00014 class CheckMove;
00018 template <Player P>
00019 struct BlockingSimulation
00020 {
00024 template <class Table>
00025 static bool proof(NumEffectState& state,
00026 const HashKey& new_key, const PathEncoding& new_path,
00027 const CheckHashRecord *record, Table& table,
00028 const CheckMove& move, size_t& node_count);
00033 template <class Table>
00034 static void proofSibling(NumEffectState& state,
00035 const HashKey& key, const PathEncoding& path,
00036 CheckHashRecord *record, Table& table,
00037 const CheckMove& oracle, size_t& node_count);
00038 private:
00042 template <class Table>
00043 static bool proof(NumEffectState& state,
00044 const HashKey&, const PathEncoding&, Table& table,
00045 const CheckMove& target, const CheckHashRecord *guide,
00046 size_t& node_count);
00047
00048 };
00049 }
00050 }
00051
00052 #endif
00053
00054
00055
00056