aboutsummaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2025-04-22 09:00:15 +0200
committerSebastiano Tronto <sebastiano@tronto.net>2025-04-22 09:00:15 +0200
commit8b72e391c7185e3da0dfbf0ab60068ac37e4d5cc (patch)
treeb79d8154f16a0dadd8d8265d32b8bd95e96263aa /cpp
parent510a7471348788fccba6b7c4b9f7b7cc9aee6ba9 (diff)
downloadnissy-core-8b72e391c7185e3da0dfbf0ab60068ac37e4d5cc.tar.gz
nissy-core-8b72e391c7185e3da0dfbf0ab60068ac37e4d5cc.zip
Removed old scripts and updated public API
Diffstat (limited to 'cpp')
-rw-r--r--cpp/examples/move.cpp17
-rw-r--r--cpp/examples/move_convert.cpp24
-rw-r--r--cpp/nissy.cpp66
-rw-r--r--cpp/nissy.h7
4 files changed, 40 insertions, 74 deletions
diff --git a/cpp/examples/move.cpp b/cpp/examples/move.cpp
new file mode 100644
index 0000000..970a65d
--- /dev/null
+++ b/cpp/examples/move.cpp
@@ -0,0 +1,17 @@
1/* A simple example showing how to move a cube and print it in H48 format. */
2
3#include "../nissy.h"
4#include <iostream>
5
6int main() {
7 nissy::cube c;
8 if (!c.move("R' U' F").ok()) {
9 std::cout << "Error moving the cube!" << std::endl;
10 return 1;
11 }
12
13 auto str = c.to_string();
14 std::cout << "Cube after R' U' F:" << std::endl << str << std::endl;
15
16 return 0;
17}
diff --git a/cpp/examples/move_convert.cpp b/cpp/examples/move_convert.cpp
deleted file mode 100644
index 11398df..0000000
--- a/cpp/examples/move_convert.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
1/* A simple example showing how to move a cube and print it in H48 format. */
2
3#include "../nissy.h"
4#include <iostream>
5
6int main() {
7 nissy::cube c;
8 if (!c.move("R' U' F").ok()) {
9 std::cout << "Error moving the cube!" << std::endl;
10 return 1;
11 }
12
13 auto string_or_error = c.to_string("H48");
14 if (std::holds_alternative<nissy::error>(string_or_error)) {
15 std::cout << "Error converting cube!" << std::endl;
16 return 1;
17 }
18
19 auto str = std::get<std::string>(string_or_error);
20 std::cout << "Cube in H48 format after R' U' F:" << std::endl
21 << str << std::endl;
22
23 return 0;
24}
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
diff --git a/cpp/nissy.h b/cpp/nissy.h
index 4b9c1c9..2eb0f42 100644
--- a/cpp/nissy.h
+++ b/cpp/nissy.h
@@ -38,7 +38,6 @@ namespace nissy {
38 static const error UNSOLVABLE_CUBE; 38 static const error UNSOLVABLE_CUBE;
39 static const error INVALID_MOVES; 39 static const error INVALID_MOVES;
40 static const error INVALID_TRANS; 40 static const error INVALID_TRANS;
41 static const error INVALID_FORMAT;
42 static const error INVALID_SOLVER; 41 static const error INVALID_SOLVER;
43 static const error NULL_POINTER; 42 static const error NULL_POINTER;
44 static const error BUFFER_SIZE; 43 static const error BUFFER_SIZE;
@@ -55,13 +54,9 @@ namespace nissy {
55 void invert(); 54 void invert();
56 void compose(const cube&); 55 void compose(const cube&);
57 std::string to_string() const; 56 std::string to_string() const;
58 std::variant<std::string, error> to_string(
59 const std::string& format) const;
60 57
61 static std::variant<cube, error> from_string( 58 static std::variant<cube, error> from_string(
62 const std::string&); 59 const std::string&);
63 static std::variant<cube, error> from_string(
64 const std::string& str, const std::string& format);
65 static std::variant<cube, error> get( 60 static std::variant<cube, error> get(
66 long long ep, long long eo, long long cp, long long co); 61 long long ep, long long eo, long long cp, long long co);
67 static std::variant<cube, error> get( 62 static std::variant<cube, error> get(
@@ -69,7 +64,7 @@ namespace nissy {
69 const std::string& options); 64 const std::string& options);
70 65
71 private: 66 private:
72 std::string m_b32{"ABCDEFGH=ABCDEFGHIJKL"}; 67 std::string m_str{"ABCDEFGH=ABCDEFGHIJKL=A"};
73 }; 68 };
74 69
75 class solver { 70 class solver {

Generated with cgit - Back to sebastiano.tronto.net