mobilityTable.cc
Go to the documentation of this file.
00001 /* mobilityTable.cc
00002  */
00003 #include "osl/mobility/mobilityTable.h"
00004 #include "osl/ptypeTable.h"
00005 #include "osl/boardTable.h"
00006 
00007 osl::mobility::MobilityTable::MobilityTable(osl::state::SimpleState const& state)
00008 {
00009   for(int num=32;num<=39;num++){
00010     osl::Piece p=state.pieceOf(num);
00011     if(!p.isOnBoard()) continue;
00012     int moveMask=Ptype_Table.getMoveMask(p.ptype());
00013     for(int i=0;i<8;i++){
00014       Direction d=static_cast<Direction>(i);
00015       if(p.owner()==WHITE) d=inverse(d);
00016       d=shortToLong(d);
00017       if((moveMask&dirToMask(d))==0) continue;
00018       Offset o=Board_Table.getOffsetForBlack(static_cast<Direction>(i));
00019       Square pos=p.square()+o;
00020       for(;state.pieceAt(pos).isEmpty();pos+=o) ;
00021       if(state.pieceAt(pos)==Piece::EDGE()) pos-=o;
00022       this->set(static_cast<Direction>(i),num,pos);
00023     }
00024   }
00025 }
00026 
00027 std::ostream& osl::mobility::operator<<(std::ostream& os,osl::mobility::MobilityContent const& mc)
00028 {
00029   os << "[";
00030   for(int i=0;i<7;i++) os << mc.get(static_cast<Direction>(i)) << ",";
00031   return os <<  mc.get(static_cast<Direction>(7)) << "]";
00032 }
00033 
00034 std::ostream& osl::mobility::operator<<(std::ostream& os,osl::mobility::MobilityTable const& mt)
00035 {
00036   os << "MobilityTable(\n";
00037   for(int num=32;num<=39;num++){
00038     os << "num=" << num << ",[";
00039     for(int i=0;i<8;i++){
00040       Direction d=static_cast<Direction>(i);
00041       os << " " << mt.get(d,num);
00042     }
00043     os << "]\n";
00044   }
00045   return os << ")" << std::endl;
00046 }
00047 
00048 bool osl::mobility::operator==(MobilityTable const& mt1, MobilityTable const& mt2)
00049 {
00050   for(int num=32;num<=39;num++){
00051     for(int i=0;i<8;i++){
00052       Direction d=static_cast<Direction>(i);
00053       if(mt1.get(d,num)!=mt2.get(d,num) ) return false;
00054     }
00055   }
00056   return true;
00057 }
00058 
00059 /* ------------------------------------------------------------------------- */
00060 // ;;; Local Variables:
00061 // ;;; mode:c++
00062 // ;;; c-basic-offset:2
00063 // ;;; End:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines