00001 #include "osl/effect/moveSignature.h" 00002 #include "osl/misc/loki.h" 00003 #include <iostream> 00004 00005 namespace osl 00006 { 00007 namespace effect 00008 { 00009 std::ostream& operator<<(std::ostream& os,const MoveSignature signature){ 00010 os << "Signature["; 00011 for(int i=7;i>=0;i--){ 00012 if((signature&(1<<i))!=0) os<< "1"; 00013 else os<< "0"; 00014 } 00015 return os << "]"; 00016 } 00017 00018 00019 template<Ptype T> 00020 void MoveSignatureTable::setSignature(){ 00021 signatures[static_cast<int>(newPtypeO(BLACK,T)-PTYPEO_MIN)]= 00022 SignatureTraits<T>::signature | getPlayerMask<BLACK>(); 00023 signatures[static_cast<int>(newPtypeO(WHITE,T)-PTYPEO_MIN)]= 00024 SignatureTraits<T>::signature | getPlayerMask<WHITE>(); 00025 } 00026 00027 template<Ptype T> 00028 void MoveSignatureTable::setSignatures(Int2Type<T>){ 00029 setSignature<T>(); 00030 setSignatures<static_cast<Ptype>(T+1)>(Int2Type<static_cast<Ptype>(T+1) >()); 00031 } 00032 00033 template<> 00034 void MoveSignatureTable::setSignatures<ROOK>(Int2Type<ROOK>){ 00035 setSignature<ROOK>(); 00036 } 00037 00038 MoveSignatureTable::MoveSignatureTable(){ 00039 setSignatures<PPAWN>(Int2Type<PPAWN>()); 00040 signatures[PTYPEO_EMPTY-PTYPEO_MIN]=signature_EMPTY; 00041 signatures[PTYPEO_EDGE-PTYPEO_MIN]=signature_EDGE; 00042 } 00043 } // namespace effect 00044 } // namespace osl