aboutsummaryrefslogtreecommitdiff
path: root/cpp/nissy.cpp
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2025-04-22 14:17:03 +0200
committerSebastiano Tronto <sebastiano@tronto.net>2025-04-22 14:17:03 +0200
commitac652bb6fb45099008e862e3ced650299dc3ebb7 (patch)
tree12fb1c902c271fbeac41c4ee416cf1cd76b16fd7 /cpp/nissy.cpp
parent71e104d84b3538e15f27df79b151e6b49cbad1eb (diff)
parente391c4624055138f075c0e5772ccaf8ede094b5a (diff)
downloadnissy-core-ac652bb6fb45099008e862e3ced650299dc3ebb7.tar.gz
nissy-core-ac652bb6fb45099008e862e3ced650299dc3ebb7.zip
Merge branch 'master' into extend_moves
Diffstat (limited to 'cpp/nissy.cpp')
-rw-r--r--cpp/nissy.cpp66
1 files changed, 22 insertions, 44 deletions
diff --git a/cpp/nissy.cpp b/cpp/nissy.cpp
index 88df0f2..3535553 100644
--- a/cpp/nissy.cpp
+++ b/cpp/nissy.cpp
@@ -13,8 +13,6 @@ extern "C" {
13 long long nissy_inverse(const char *, char *); 13 long long nissy_inverse(const char *, char *);
14 long long nissy_applymoves(const char *, const char *, char *); 14 long long nissy_applymoves(const char *, const char *, char *);
15 long long nissy_applytrans(const char *, const char *, char *); 15 long long nissy_applytrans(const char *, const char *, char *);
16 long long nissy_convert(const char *, const char *, const char *,
17 unsigned, char *);
18 long long nissy_getcube(long long, long long, long long, long long, 16 long long nissy_getcube(long long, long long, long long, long long,
19 const char *, char *); 17 const char *, char *);
20 long long nissy_solverinfo(const char *, char *); 18 long long nissy_solverinfo(const char *, char *);
@@ -43,7 +41,6 @@ namespace nissy {
43 const error error::UNSOLVABLE_CUBE{-11}; 41 const error error::UNSOLVABLE_CUBE{-11};
44 const error error::INVALID_MOVES{-20}; 42 const error error::INVALID_MOVES{-20};
45 const error error::INVALID_TRANS{-30}; 43 const error error::INVALID_TRANS{-30};
46 const error error::INVALID_FORMAT{-40};
47 const error error::INVALID_SOLVER{-50}; 44 const error error::INVALID_SOLVER{-50};
48 const error error::NULL_POINTER{-60}; 45 const error error::NULL_POINTER{-60};
49 const error error::BUFFER_SIZE{-61}; 46 const error error::BUFFER_SIZE{-61};
@@ -52,9 +49,7 @@ namespace nissy {
52 const error error::UNKNOWN{-999}; 49 const error error::UNKNOWN{-999};
53 50
54 namespace size { 51 namespace size {
55 constexpr size_t B32 = 22; 52 constexpr size_t CUBE = 22;
56 constexpr size_t H48 = 88;
57 constexpr size_t CUBE_MAX = H48;
58 constexpr size_t TRANSFORMATION = 12; 53 constexpr size_t TRANSFORMATION = 12;
59 constexpr size_t DATAID = 255; 54 constexpr size_t DATAID = 255;
60 } 55 }
@@ -65,71 +60,54 @@ namespace nissy {
65 60
66 error cube::move(const std::string& moves) 61 error cube::move(const std::string& moves)
67 { 62 {
68 char result[size::B32]; 63 char result[size::CUBE];
69 long long err = nissy_applymoves( 64 long long err = nissy_applymoves(
70 m_b32.c_str(), moves.c_str(), result); 65 m_str.c_str(), moves.c_str(), result);
71 if (err < 0) 66 if (err < 0)
72 return error{err}; 67 return error{err};
73 m_b32 = result; 68 m_str = result;
74 return error::OK; 69 return error::OK;
75 } 70 }
76 71
77 error cube::transform(const std::string& trans) 72 error cube::transform(const std::string& trans)
78 { 73 {
79 char result[size::B32]; 74 char result[size::CUBE];
80 long long err = nissy_applytrans( 75 long long err = nissy_applytrans(
81 m_b32.c_str(), trans.c_str(), result); 76 m_str.c_str(), trans.c_str(), result);
82 if (err < 0) 77 if (err < 0)
83 return error{err}; 78 return error{err};
84 m_b32 = result; 79 m_str = result;
85 return error::OK; 80 return error::OK;
86 } 81 }
87 82
88 void cube::invert() 83 void cube::invert()
89 { 84 {
90 char result[size::B32]; 85 char result[size::CUBE];
91 nissy_inverse(m_b32.c_str(), result); 86 nissy_inverse(m_str.c_str(), result);
92 m_b32 = result; 87 m_str = result;
93 } 88 }
94 89
95 void cube::compose(const cube& other) 90 void cube::compose(const cube& other)
96 { 91 {
97 char result[size::B32]; 92 char result[size::CUBE];
98 nissy_compose( 93 nissy_compose(
99 m_b32.c_str(), other.to_string().c_str(), result); 94 m_str.c_str(), other.to_string().c_str(), result);
100 m_b32 = result; 95 m_str = result;
101 } 96 }
102 97
103 std::string cube::to_string() const { return m_b32; } 98 std::string cube::to_string() const { return m_str; }
104
105 std::variant<std::string, error>
106 cube::to_string(const std::string& format) const
107 {
108 char result[size::CUBE_MAX];
109 auto err = nissy_convert("B32", format.c_str(),
110 m_b32.c_str(), size::CUBE_MAX, result);
111 if (err < 0)
112 return error{err};
113 else
114 return result;
115 }
116 99
117 std::variant<cube, error> 100 std::variant<cube, error>
118 cube::from_string(const std::string& str) 101 cube::from_string(const std::string& str)
119 { 102 {
120 return from_string(str, "B32"); 103 /* Check that the cube is valid by making a single move */
121 } 104 char result[size::CUBE];
122 105 auto err = nissy_applymoves(str.c_str(), "U", result);
123 std::variant<cube, error>
124 cube::from_string(const std::string& str, const std::string& format)
125 {
126 char result[size::B32];
127 cube c;
128 auto err = nissy_convert(format.c_str(),
129 "B32", c.m_b32.c_str(), size::B32, result);
130 if (err < 0) 106 if (err < 0)
131 return error{err}; 107 return error{err};
132 c.m_b32 = result; 108
109 cube c;
110 c.m_str = str;
133 return c; 111 return c;
134 } 112 }
135 113
@@ -143,13 +121,13 @@ namespace nissy {
143 cube::get(long long ep, long long eo, long long cp, long long co, 121 cube::get(long long ep, long long eo, long long cp, long long co,
144 const std::string& options) 122 const std::string& options)
145 { 123 {
146 char result[size::B32]; 124 char result[size::CUBE];
147 cube c; 125 cube c;
148 auto err = nissy_getcube( 126 auto err = nissy_getcube(
149 ep, eo, cp, co, options.c_str(), result); 127 ep, eo, cp, co, options.c_str(), result);
150 if (err < 0) 128 if (err < 0)
151 return error{err}; 129 return error{err};
152 c.m_b32 = result; 130 c.m_str = result;
153 return c; 131 return c;
154 } 132 }
155 133

Generated with cgit - Back to sebastiano.tronto.net