00001
00002
00003 #ifndef _DEFENSE_SIMULATION_H
00004 #define _DEFENSE_SIMULATION_H
00005
00006 #include "osl/state/numEffectState.h"
00007
00008 namespace osl
00009 {
00010 class PathEncoding;
00011 namespace checkmate
00012 {
00013 class CheckHashRecord;
00014 class CheckMove;
00018 template <Player P>
00019 struct DefenseSimulation
00020 {
00027 template <class Table>
00028 static void disproofDropSibling(NumEffectState& state,
00029 const HashKey& key,
00030 const PathEncoding& path,
00031 CheckHashRecord *record, Table& table,
00032 const CheckMove& oracle,
00033 size_t& node_count);
00041 template <class Table>
00042 static bool disproofNoPromote(NumEffectState& state,
00043 const HashKey& new_key,
00044 const PathEncoding& new_path,
00045 CheckHashRecord *record, Table& table,
00046 CheckMove& target,
00047 const CheckMove& guide, size_t& node_count);
00048 private:
00052 template <class Table>
00053 static bool disproof(NumEffectState& state,
00054 const HashKey& new_key,
00055 const PathEncoding& new_path,
00056 Table& table, const CheckMove& target,
00057 CheckHashRecord *guide, size_t& node_count);
00058
00059 };
00060 }
00061 }
00062
00063 #endif
00064
00065
00066
00067