diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2025-04-22 09:00:15 +0200 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2025-04-22 09:00:15 +0200 |
| commit | 8b72e391c7185e3da0dfbf0ab60068ac37e4d5cc (patch) | |
| tree | b79d8154f16a0dadd8d8265d32b8bd95e96263aa /cpp/nissy.cpp | |
| parent | 510a7471348788fccba6b7c4b9f7b7cc9aee6ba9 (diff) | |
| download | nissy-core-8b72e391c7185e3da0dfbf0ab60068ac37e4d5cc.tar.gz nissy-core-8b72e391c7185e3da0dfbf0ab60068ac37e4d5cc.zip | |
Removed old scripts and updated public API
Diffstat (limited to 'cpp/nissy.cpp')
| -rw-r--r-- | cpp/nissy.cpp | 66 |
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 | ||
