00001
00002
00003 #ifndef OSL_BRINKMATE_BRINKMATERECORD
00004 #define OSL_BRINKMATE_BRINKMATERECORD
00005
00006 #include "osl/brinkmate/configuration.h"
00007 #include "osl/stl/vector.h"
00008 #include "osl/move.h"
00009 namespace osl
00010 {
00011 namespace brinkmate
00012 {
00013 enum BrinkmateResult {
00015 WORST_DEFENSE,
00016 CHECKMATE,
00018 BRINKMATE,
00019 UNKNOWN,
00021 NOT_BRINKMATE,
00022 LOOP_DETECTION,
00023 INVERSE_CHECKMATE,
00025 WORST_ATTACK,
00026 };
00027 inline bool isAttackSuccess(BrinkmateResult result)
00028 {
00029 return result < UNKNOWN;
00030 }
00031 inline bool isDefenseSuccess(BrinkmateResult result)
00032 {
00033 return result > UNKNOWN;
00034 }
00035 inline bool isSearchResult(BrinkmateResult result)
00036 {
00037 return (result > WORST_DEFENSE) && (result < WORST_ATTACK)
00038 && (result != UNKNOWN);
00039 }
00040 inline BrinkmateResult betterForAttack(BrinkmateResult l, BrinkmateResult r)
00041 {
00042 return (l < r) ? l : r;
00043 }
00044 inline BrinkmateResult betterForDefense(BrinkmateResult l, BrinkmateResult r)
00045 {
00046 return (l > r) ? l : r;
00047 }
00048
00049 struct BrinkmateRecord
00050 {
00051 typedef vector<Move> vector_t;
00052 vector_t moves;
00053 Configuration conf;
00054 Move best_move;
00055 BrinkmateResult result;
00056 int visit_count;
00057 bool is_visited;
00058
00059 BrinkmateRecord() : result(UNKNOWN), visit_count(0), is_visited(false)
00060 {
00061 }
00062 };
00063
00064 }
00065 }
00066
00067 #endif
00068
00069
00070
00071