00001
00002
00003 #include "osl/offset.h"
00004 #include <iostream>
00005
00006 #define OFFSET_INDEX(dx,dy) ((dx*BOARD_HEIGHT + dy) - OFFSET_MIN)
00007
00012 int osl::Offset::dx() const
00013 {
00014 switch (index())
00015 {
00016 case OFFSET_INDEX(-1,-2): return -1;
00017 case OFFSET_INDEX(1,-2): return 1;
00018 case OFFSET_INDEX(-1,-1): return -1;
00019 case OFFSET_INDEX(0,-1): return 0;
00020 case OFFSET_INDEX(1,-1): return 1;
00021 case OFFSET_INDEX(-1,0): return -1;
00022 case OFFSET_INDEX(1,0): return 1;
00023 case OFFSET_INDEX(-1,1): return -1;
00024 case OFFSET_INDEX(0,1): return 0;
00025 case OFFSET_INDEX(1,1): return 1;
00026 case OFFSET_INDEX(-1,2): return -1;
00027 case OFFSET_INDEX(1,2): return 1;
00028 default:
00029 std::cerr << index() << " " << ZERO().index() << "\n";
00030 assert(0);
00031 }
00032 return 0;
00033 }
00034
00039 int osl::Offset::dy() const
00040 {
00041 switch (index())
00042 {
00043 case OFFSET_INDEX(-1,-2): return -2;
00044 case OFFSET_INDEX(1,-2): return -2;
00045 case OFFSET_INDEX(-1,-1): return -1;
00046 case OFFSET_INDEX(0,-1): return -1;
00047 case OFFSET_INDEX(1,-1): return -1;
00048 case OFFSET_INDEX(-1,0): return 0;
00049 case OFFSET_INDEX(1,0): return 0;
00050 case OFFSET_INDEX(-1,1): return 1;
00051 case OFFSET_INDEX(0,1): return 1;
00052 case OFFSET_INDEX(1,1): return 1;
00053 case OFFSET_INDEX(-1,2): return 2;
00054 case OFFSET_INDEX(1,2): return 2;
00055 default: assert(0);
00056 }
00057 return 0;
00058 }
00059
00060 std::ostream& osl::operator<<(std::ostream& os, Offset offset)
00061 {
00062 return os << "offset(" << offset.intValue() << ')';
00063 }
00064
00065
00066
00067
00068
00069