-
Notifications
You must be signed in to change notification settings - Fork 0
/
CubieCube.h
66 lines (51 loc) · 1.45 KB
/
CubieCube.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
//
// Created by youdonghai on 14/10/16.
//
#ifndef CUBE_CUBIECUBE_H
#define CUBE_CUBIECUBE_H
#include <stdint.h>
#include "CubeDefine.h"
class CubieCube {
public:
static void init();
static void initMoveCube();
static CubieCube *moveCube[6];
CubieCube();
uint16_t getTwist();
void setTwist(uint16_t);
uint16_t getFlip();
void setFlip(uint16_t flip);
uint16_t getUDSlicePosition();
uint8_t getFRtoBRPermutations();
uint16_t getURtoDBPermutations();
uint16_t getFRtoBR();
void setFRtoBR(uint16_t idx);
uint32_t getURtoDB();
void setURtoDB(uint32_t idx, bool over_write_FRtoBR=true);
uint16_t getCornerPermutation();
void setCornerPermutation(uint16_t idx);
// only use in phase2
uint16_t getURtoDBPermutation();
void setURtoDBPermutation(uint16_t idx);
void rotateLeft(Edge *ea, int l, int r);
void rotateLeft(Corner *ca, int l, int r);
void rotateRight(Edge *ea, int l, int r);
void rotateRight(Corner *ca, int l, int r);
int Cnk(int n, int k);
int verify();
uint8_t cornerParity();
uint8_t edgeParity();
/**
* (A*B)(x).c=A(B(x).c).c
* (A*B)(x).o=A(B(x).c).o+B(x).o
*/
void cornerMultiply(CubieCube *c);
void edgeMultiply(CubieCube *c);
// 8 corner permutation and orientation
Corner cp[8];
uint8_t co[8];
// 12 edge permutation adn orientation
Edge ep[12];
uint8_t eo[12];
};
#endif //CUBE_CUBIECUBE_H