boardMask.cc
Go to the documentation of this file.
00001 /* boardMask.cc
00002  */
00003 #include "osl/container/boardMask.h"
00004 #include "osl/centering5x3.h"
00005 #include <iostream>
00006 
00007 #ifndef MINIMAL
00008 std::ostream& osl::container::operator<<(std::ostream& os, const BoardMask& mask)
00009 {
00010   for(int y=1; y<=9; ++y) {
00011     for(int x=9; x>=1; --x) {
00012       const Square p(x,y);
00013       os << mask.test(p);
00014     }
00015     os << std::endl;
00016   }
00017   return os;
00018 }
00019 #endif
00020 
00021 osl::container::
00022 BoardMaskTable5x5::BoardMaskTable5x5()
00023 {
00024   for (int cx=1; cx<=9; ++cx) {
00025     for (int cy=1; cy<=9; ++cy) {
00026       const int min_x = std::max(1, cx - 2);
00027       const int max_x = std::min(9, cx + 2);
00028       const int min_y = std::max(1, cy - 2);
00029       const int max_y = std::min(9, cy + 2);
00030       BoardMask mask;
00031       mask.clear();
00032       for (int x=min_x; x<=max_x; ++x) {
00033         for (int y=min_y; y<=max_y; ++y) {
00034           mask.set(Square(x,y));
00035         }
00036       }
00037       data[Square(cx,cy).index()] = mask;
00038     }
00039   }
00040 }
00041 
00042 osl::container::
00043 BoardMaskTable3x3::BoardMaskTable3x3()
00044 {
00045   for (int cx=1; cx<=9; ++cx) {
00046     for (int cy=1; cy<=9; ++cy) {
00047       const int min_x = std::max(1, cx - 1);
00048       const int max_x = std::min(9, cx + 1);
00049       const int min_y = std::max(1, cy - 1);
00050       const int max_y = std::min(9, cy + 1);
00051       BoardMask mask;
00052       mask.clear();
00053       for (int x=min_x; x<=max_x; ++x) {
00054         for (int y=min_y; y<=max_y; ++y) {
00055           mask.set(Square(x,y));
00056         }
00057       }
00058       data[Square(cx,cy).index()] = mask;
00059     }
00060   }
00061 }
00062 
00063 osl::container::
00064 BoardMaskTable5x3Center::BoardMaskTable5x3Center()
00065 {
00066   for (int cx=1; cx<=9; ++cx) {
00067     for (int cy=1; cy<=9; ++cy) {
00068       const Square center = Centering5x3::adjustCenter(Square(cx, cy));
00069       const int min_x = std::max(1, center.x() - 2);
00070       const int max_x = std::min(9, center.x() + 2);
00071       const int min_y = std::max(1, center.y() - 1);
00072       const int max_y = std::min(9, center.y() + 1);
00073       BoardMask mask;
00074       mask.clear();
00075       for (int x=min_x; x<=max_x; ++x) {
00076         for (int y=min_y; y<=max_y; ++y) {
00077           mask.set(Square(x,y));
00078         }
00079       }
00080       data[Square(cx,cy).index()] = mask;
00081     }
00082   }
00083 }
00084 
00085 // ;;; Local Variables:
00086 // ;;; mode:c++
00087 // ;;; c-basic-offset:2
00088 // ;;; End:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines