This is Plane.h in view mode; [Download] [Up]
/* One Plane of the Cube */ const CubeInt NumCubes = PlaneSize+2; enum {BASE, CEIL=(NumCubes-1)}; /* Sometimes only half */ #import "Cubicle.h" class Plane { Cubicle* cubes[NumCubes]; CubeInt size; public: CubeAxis axis; Plane(CubeAxis newAxis=0) { axis = newAxis; size = 0; cubes[BASE] = cubes[CEIL] = (Cubicle*)0; } Plane& addCube(Cubicle *newCube) { cubes[++size] = newCube; return *this; } Plane& swap() { /* Reorder Plane into a loop */ Cubicle* tempCube = cubes[size]; cubes[size] = cubes[size-1]; cubes[size-1] = tempCube; return *this; } Plane& setFace(CubeFace newFace) { for (int c=1; c <= size; c++) { (*cubes[c])[axis] = newFace; } return *this; } CubeInt test() { CubeInt c = size; CubeFace testFace = (*cubes[c--])[axis]; while(c) { if (!(testFace == (*cubes[c--])[axis])) return c; } return c; } Plane& rotate(CubeDir dir,CubeAxis around=XYZTMAX) { if (getDir(dir)) { cubes[BASE] = new Cubicle(*cubes[size]); for (int c=size; c >= 1; c--) { *cubes[c] = *cubes[c-1]; cubes[c]->rotate(axis,around); } delete cubes[BASE]; cubes[BASE] = (Cubicle*)0; } else { cubes[size+1] = new Cubicle(*cubes[1]); for (int c=1; c <= size; c++) { *cubes[c] = *cubes[c+1]; cubes[c]->rotate(axis,around); } delete cubes[size+1]; cubes[size+1] = (Cubicle*)0; } return *this; } CubeFace face(CubeInt c, int a) { if (a < 0) a = axis; return (*cubes[c+1])[(CubeAxis)a]; } CubeFace operator[](CubeInt c) {return (*cubes[c+1])[axis];} };
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.