00001 /* ntesukiMove.tcc 00002 */ 00003 #include "osl/ntesuki/ntesukiMove.h" 00004 #include "osl/ntesuki/ntesukiRecord.h" 00005 00006 template<osl::Player P> 00007 void osl::ntesuki::NtesukiMove:: 00008 setImmediateCheckmate() 00009 { 00010 if (P == osl::BLACK) 00011 flags |= (IS_SUCCESS_BLACK_MASK | IMMEDIATE_CHECKMATE); 00012 else 00013 flags |= (IS_SUCCESS_WHITE_MASK | IMMEDIATE_CHECKMATE); 00014 }; 00015 00016 /* private functions to check FLAGS for success/fail 00017 */ 00018 template <osl::Player P> 00019 int osl::ntesuki::NtesukiMove:: 00020 is_success_flag(int pass_left) const 00021 { 00022 ntesuki_assert(pass_left >= 0 && 00023 pass_left <= 3); 00024 if (P == osl::BLACK) 00025 return 1 << (IS_SUCCESS_BLACK_SHIFT + pass_left); 00026 if (P == osl::WHITE) 00027 return 1 << (IS_SUCCESS_WHITE_SHIFT + pass_left); 00028 } 00029 00030 template <osl::Player P> 00031 int osl::ntesuki::NtesukiMove:: 00032 is_fail_flag(int pass_left) const 00033 { 00034 ntesuki_assert(pass_left >= 0 && 00035 pass_left <= 3); 00036 if (P == osl::BLACK) 00037 return 1 << (IS_FAIL_BLACK_SHIFT + pass_left); 00038 else 00039 return 1 << (IS_FAIL_WHITE_SHIFT + pass_left); 00040 } 00041 00042 template<osl::Player P> 00043 void 00044 osl::ntesuki::NtesukiMove:: 00045 setCheckmateSuccess(int pass_left) 00046 { 00047 ntesuki_assert(!(flags & is_success_flag<P>(pass_left))); 00048 ntesuki_assert(!(flags & is_fail_flag<P>(pass_left))); 00049 flags |= is_success_flag<P>(pass_left); 00050 }; 00051 00052 template<osl::Player P> 00053 bool osl::ntesuki::NtesukiMove:: 00054 isCheckmateSuccess(int pass_left) const 00055 { 00056 return (flags & is_success_flag<P>(pass_left)) == is_success_flag<P>(pass_left); 00057 } 00058 00059 template<osl::Player P> 00060 void osl::ntesuki::NtesukiMove:: 00061 setCheckmateFail(int pass_left) 00062 { 00063 ntesuki_assert(!(flags & is_fail_flag<P>(pass_left))); 00064 ntesuki_assert(!(flags & is_success_flag<P>(pass_left))); 00065 flags |= is_fail_flag<P>(pass_left); 00066 }; 00067 00068 00069 template<osl::Player P> 00070 bool osl::ntesuki::NtesukiMove:: 00071 isCheckmateFail(int pass_left) const 00072 { 00073 return (flags & is_fail_flag<P>(pass_left)) == is_fail_flag<P>(pass_left); 00074 } 00075 00076 // ;;; Local Variables: 00077 // ;;; mode:c++ 00078 // ;;; c-basic-offset:2 00079 // ;;; End: