| 33 | | Symmetries::Symmetries(int sizeX, int sizeY) { |
|---|
| 34 | | |
|---|
| 35 | | } |
|---|
| 36 | | |
|---|
| 37 | | void Symmetries::set(int i, int j, int k, int l, int cs) {} |
|---|
| 38 | | |
|---|
| 39 | | int Symmetries::getX(int i, int j) {} |
|---|
| 40 | | |
|---|
| 41 | | int Symmetries::getY(int i, int j) {} |
|---|
| 42 | | |
|---|
| 43 | | char Symmetries::getCS(int i, int j) {} |
|---|
| 44 | | |
|---|
| 45 | | bool Symmetries::has_key(int i, int j) {} |
|---|
| | 33 | Symmetries::Symmetries(int sX, int sY) { |
|---|
| | 34 | sizeX = sX; |
|---|
| | 35 | sizeY = sY; |
|---|
| | 36 | dataX = new int[sizeX*sizeY]; |
|---|
| | 37 | dataY = new int[sizeX*sizeY]; |
|---|
| | 38 | dataCS = new int[sizeX*sizeY]; |
|---|
| | 39 | for(int i=0; i<sizeX*sizeY; i++) { |
|---|
| | 40 | dataX[i] = -1; |
|---|
| | 41 | dataY[i] = -1; |
|---|
| | 42 | dataCS[i] = -1; |
|---|
| | 43 | } |
|---|
| | 44 | } |
|---|
| | 45 | |
|---|
| | 46 | Symmetries::~Symmetries() { |
|---|
| | 47 | delete [] dataX; |
|---|
| | 48 | delete [] dataY; |
|---|
| | 49 | delete [] dataCS; |
|---|
| | 50 | } |
|---|
| | 51 | |
|---|
| | 52 | Symmetries::Symmetries(const Symmetries& s) { |
|---|
| | 53 | sizeX = s.sizeX; |
|---|
| | 54 | // FIXME |
|---|
| | 55 | } |
|---|
| | 56 | |
|---|
| | 57 | |
|---|
| | 58 | void Symmetries::set(int i, int j, int k, int l, int cs) { |
|---|
| | 59 | if (0 <= i && i < sizeX && 0 <= j && j < sizeY) { |
|---|
| | 60 | dataX[i + j*sizeX] = k; |
|---|
| | 61 | dataY[i + j*sizeX] = l; |
|---|
| | 62 | dataCS[i + j*sizeX] = cs; |
|---|
| | 63 | } |
|---|
| | 64 | else printf("Error Symmetries\n"); // FIXME |
|---|
| | 65 | } |
|---|
| | 66 | |
|---|
| | 67 | int Symmetries::getX(int i, int j) { |
|---|
| | 68 | if (0 <= i && i < sizeX && 0 <= j && j < sizeY) return dataX[i + j*sizeX]; |
|---|
| | 69 | else printf("Error Symmetries\n"); // FIXME |
|---|
| | 70 | return -1; |
|---|
| | 71 | } |
|---|
| | 72 | |
|---|
| | 73 | int Symmetries::getY(int i, int j) { |
|---|
| | 74 | if (0 <= i && i < sizeX && 0 <= j && j < sizeY) return dataY[i + j*sizeX]; |
|---|
| | 75 | else printf("Error Symmetries\n"); // FIXME |
|---|
| | 76 | return -1; |
|---|
| | 77 | } |
|---|
| | 78 | |
|---|
| | 79 | int Symmetries::getCS(int i, int j) { |
|---|
| | 80 | if (0 <= i && i < sizeX && 0 <= j && j < sizeY) return dataCS[i + j*sizeX]; |
|---|
| | 81 | else printf("Error Symmetries\n"); // FIXME |
|---|
| | 82 | return -1; |
|---|
| | 83 | } |
|---|
| | 84 | |
|---|
| | 85 | int Symmetries::has_key(int i, int j) { |
|---|
| | 86 | if (0 <= i && i < sizeX && 0 <= j && j < sizeY) { |
|---|
| | 87 | if (dataX[i + j*sizeX] == -1) return 0; |
|---|
| | 88 | else return 1; |
|---|
| | 89 | } |
|---|
| | 90 | else printf("Error Symmetries\n"); // FIXME |
|---|
| | 91 | return 0; |
|---|
| | 92 | } |
|---|
| 165 | | |
|---|
| 166 | | // FIXME: need copy constructor?! |
|---|
| | 215 | Pattern::~Pattern() { |
|---|
| | 216 | if (initialPos) delete [] initialPos; |
|---|
| | 217 | if (finalPos) delete [] finalPos; |
|---|
| | 218 | if (contList) delete [] contList; |
|---|
| | 219 | if (bits) delete [] bits; |
|---|
| | 220 | } |
|---|
| | 221 | |
|---|
| | 222 | Pattern::Pattern(const Pattern& p) { |
|---|
| | 223 | left = p.left; |
|---|
| | 224 | right = p.right; |
|---|
| | 225 | top = p.top; |
|---|
| | 226 | bottom = p.bottom; |
|---|
| | 227 | sizeX = p.sizeX; |
|---|
| | 228 | sizeY = p.sizeY; |
|---|
| | 229 | flip = p.flip; |
|---|
| | 230 | colorSwitch = p.colorSwitch; |
|---|
| | 231 | moveOne = p.moveOne; |
|---|
| | 232 | moveTwo = p.moveTwo; |
|---|
| | 233 | |
|---|
| | 234 | initialPos = new char[sizeX*sizeY]; |
|---|
| | 235 | finalPos = new char[sizeX*sizeY]; |
|---|
| | 236 | for(int i=0; i<sizeX*sizeY; i++) { |
|---|
| | 237 | initialPos[i] = p.initialPos[i]; |
|---|
| | 238 | finalPos[i] = p.finalPos[i]; |
|---|
| | 239 | } |
|---|
| | 240 | lenContList = p.lenContList; |
|---|
| | 241 | if (lenContList) { |
|---|
| | 242 | contList = new char[lenContList*4]; |
|---|
| | 243 | for(int i = 0; i < lenContList*4; i++) contList[i] = p.contList[i]; |
|---|
| | 244 | } |
|---|
| | 245 | else contList = 0; |
|---|
| | 246 | } |
|---|
| | 247 | |
|---|
| | 248 | Pattern& Pattern::operator=(const Pattern& p) { |
|---|
| | 249 | if (&p != this) { |
|---|
| | 250 | left = p.left; |
|---|
| | 251 | right = p.right; |
|---|
| | 252 | top = p.top; |
|---|
| | 253 | bottom = p.bottom; |
|---|
| | 254 | sizeX = p.sizeX; |
|---|
| | 255 | sizeY = p.sizeY; |
|---|
| | 256 | flip = p.flip; |
|---|
| | 257 | colorSwitch = p.colorSwitch; |
|---|
| | 258 | moveOne = p.moveOne; |
|---|
| | 259 | moveTwo = p.moveTwo; |
|---|
| | 260 | |
|---|
| | 261 | if (initialPos) delete [] initialPos; |
|---|
| | 262 | if (finalPos) delete [] finalPos; |
|---|
| | 263 | if (contList) delete [] contList; |
|---|
| | 264 | if (bits) delete [] bits; |
|---|
| | 265 | |
|---|
| | 266 | initialPos = new char[sizeX*sizeY]; |
|---|
| | 267 | finalPos = new char[sizeX*sizeY]; |
|---|
| | 268 | for(int i=0; i<sizeX*sizeY; i++) { |
|---|
| | 269 | initialPos[i] = p.initialPos[i]; |
|---|
| | 270 | finalPos[i] = p.finalPos[i]; |
|---|
| | 271 | } |
|---|
| | 272 | lenContList = p.lenContList; |
|---|
| | 273 | if (lenContList) { |
|---|
| | 274 | contList = new char[lenContList*4]; |
|---|
| | 275 | for(int i = 0; i < lenContList*4; i++) contList[i] = p.contList[i]; |
|---|
| | 276 | } |
|---|
| | 277 | else contList = 0; |
|---|
| | 278 | |
|---|
| | 279 | for(int i=0; i<4; i++) { |
|---|
| | 280 | bits[i] = ...; // FIXME |
|---|
| | 281 | } |
|---|
| | 282 | } |
|---|
| | 283 | return *this; |
|---|
| | 284 | } |
|---|
| 258 | | newInitialPos[flipsX(f,i,j,boardsize-1,boardsize-1) + pattern.sizeX*flipsY(f,i,j,boardsize-1,boardsize-1)] = |
|---|
| 259 | | pattern.getInitial(i, j); |
|---|
| | 376 | newInitialPos[flipsX(f,i,j,boardsize-1,boardsize-1) + pattern.sizeX*flipsY(f,i,j,boardsize-1,boardsize-1)] = pattern.getInitial(i, j); |
|---|
| 361 | | if ((i,j) != Pattern.flips[s](i,j,self.pattern.sizeX-1,self.pattern.sizeY-1) \ |
|---|
| 362 | | && !symm1.has_key(Pattern.flips[s](i,j,self.pattern.sizeX-1,self.pattern.sizeY-1))) |
|---|
| 363 | | symm1[(i,j)] = (Pattern.flips[s](i,j,self.pattern.sizeX-1,self.pattern.sizeY-1), c); |
|---|
| | 481 | int fX = flipsX(s, i, j, pattern.sizeX-1, pattern.sizeY-1); |
|---|
| | 482 | int fY = flipsY(s, i, j, pattern.sizeX-1, pattern.sizeY-1); |
|---|
| | 483 | if (((i != fX || j != fY) && !symm1.has_key(fX, fY)) |
|---|
| | 484 | symm1.set(i,j, fX, fY, c); |
|---|
| 432 | | int xxN = self_symmetries.getX(xx,yy); |
|---|
| 433 | | int yyN = self_symmetries.getY(xx,yy); |
|---|
| 434 | | int cSymm = self_symmetries.getCS(xx,yy); |
|---|
| | 553 | int xxN = symmetries.getX(xx,yy); |
|---|
| | 554 | int yyN = symmetries.getY(xx,yy); |
|---|
| | 555 | int cSymm = symmetries.getCS(xx,yy); |
|---|
| 476 | | int xx1 = self_symmetries.getX(xx,yy); |
|---|
| 477 | | int yy1 = self_symmetries.getY(xx,yy); |
|---|
| 478 | | int cSymm1 = self_symmetries.getCS(xx,yy); |
|---|
| | 597 | int xx1 = symmetries.getX(xx,yy); |
|---|
| | 598 | int yy1 = symmetries.getY(xx,yy); |
|---|
| | 599 | int cSymm1 = symmetries.getCS(xx,yy); |
|---|