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