00001 /* directionTable.cc 00002 */ 00003 #include "osl/boardTable.h" 00004 #include "osl/directionTraits.h" 00005 00006 template <osl::Direction Dir> 00007 void osl::BoardTable::setDirections(){ 00008 Offset offset=Offset(DirectionTraits<Dir>::blackDx, 00009 DirectionTraits<Dir>::blackDy); 00010 for(int i=1;i<=8;i++){ 00011 int dx=i*DirectionTraits<Dir>::blackDx; 00012 int dy=i*DirectionTraits<Dir>::blackDy; 00013 Offset32 offset32=Offset32(dx,dy); 00014 directions[offset32.index()]=Dir; 00015 short_offsets[offset32.index()]=offset; 00016 short_offsets_not_knight[offset32.index()]=offset; 00017 } 00018 } 00019 template <osl::Direction Dir> 00020 void osl::BoardTable::setKnightDirections(){ 00021 int dx=DirectionTraits<Dir>::blackDx; 00022 int dy=DirectionTraits<Dir>::blackDy; 00023 Offset32 offset32=Offset32(dx,dy); 00024 Offset offset=Offset(dx,dy); 00025 short_offsets[offset32.index()]=offset; 00026 short_offsets[(-offset32).index()]= -offset; 00027 } 00028 00029 void osl::BoardTable::init(){ 00030 directions.fill(); 00031 short_offsets_not_knight.fill(); 00032 00033 setDirections<LONG_UL>(); 00034 setDirections<LONG_U>(); 00035 setDirections<LONG_UR>(); 00036 setDirections<LONG_L>(); 00037 setDirections<LONG_R>(); 00038 setDirections<LONG_DL>(); 00039 setDirections<LONG_D>(); 00040 setDirections<LONG_DR>(); 00041 setKnightDirections<UUL>(); 00042 setKnightDirections<UUR>(); 00043 } 00044 00045 osl::BoardTable::BoardTable(){ 00046 init(); 00047 assert(! getOffset(BLACK, UL).zero()); 00048 } 00049 00050 /* ------------------------------------------------------------------------- */ 00051 // ;;; Local Variables: 00052 // ;;; mode:c++ 00053 // ;;; c-basic-offset:2 00054 // ;;; End: