ntesukiMove.tcc
Go to the documentation of this file.
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:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines