diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2023-10-22 14:48:42 +0200 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2023-10-22 14:48:42 +0200 |
| commit | 0c49ed5afc2ae9e4bc4aa1af9c655bbe1f3d14b8 (patch) | |
| tree | 4e69457ed87cb06decc12889a1ded18c17610dad /doc/CUBE_INTERNAL.md | |
| parent | 259c7326f78d5495f5dc51c619932599a5279f68 (diff) | |
| download | nissy-core-0c49ed5afc2ae9e4bc4aa1af9c655bbe1f3d14b8.tar.gz nissy-core-0c49ed5afc2ae9e4bc4aa1af9c655bbe1f3d14b8.zip | |
Small change of plans, moved stuff around
Diffstat (limited to 'doc/CUBE_INTERNAL.md')
| -rw-r--r-- | doc/CUBE_INTERNAL.md | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/doc/CUBE_INTERNAL.md b/doc/CUBE_INTERNAL.md new file mode 100644 index 0000000..fd3148a --- /dev/null +++ b/doc/CUBE_INTERNAL.md | |||
| @@ -0,0 +1,24 @@ | |||
| 1 | # Internal representation of the cube | ||
| 2 | |||
| 3 | The plan (TODO) is to have multiple implementations: some that | ||
| 4 | take advantage of advanced CPU instructions (SIMD) and a fallback | ||
| 5 | "array" representation that works on any architecture. | ||
| 6 | |||
| 7 | # Array representation (fallback) | ||
| 8 | |||
| 9 | In this implementation of the cube.h interface, the cube is represented | ||
| 10 | by two arrays of 8-bit unsigned integers, one for centers and one for | ||
| 11 | corners. The 4 leas-significant digits of each bit determine the piece, | ||
| 12 | the other 4 are used for orientation or kept to 0. | ||
| 13 | |||
| 14 | Edges: | ||
| 15 | xxxopppp (x = unused, o = orientation, p = piece) | ||
| 16 | |||
| 17 | Corners: | ||
| 18 | xooxpppp (x = unused, o = orientation, p = piece) | ||
| 19 | |||
| 20 | The two bits for CO are shifted to make it possible to perform mod 3 | ||
| 21 | operations (sum, inverse) using only addition and bitwise operators. | ||
| 22 | See below for details. | ||
| 23 | |||
| 24 | The third bit is needed because x+y+1 can exceed 4. | ||
