aboutsummaryrefslogtreecommitdiff
path: root/cpp/nissy.cpp
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2025-08-07 15:09:46 +0200
committerSebastiano Tronto <sebastiano@tronto.net>2025-08-07 15:28:01 +0200
commit5355de2921126e2b75e24abd57e17556e22a6ed0 (patch)
tree0df679e152ffb2798248982ac58ff123c6859114 /cpp/nissy.cpp
parent57a7520545134ab95f7bb0397dcbe991c906a3e9 (diff)
downloadnissy-core-5355de2921126e2b75e24abd57e17556e22a6ed0.tar.gz
nissy-core-5355de2921126e2b75e24abd57e17556e22a6ed0.zip
Added API function for solution variations
Diffstat (limited to 'cpp/nissy.cpp')
-rw-r--r--cpp/nissy.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/cpp/nissy.cpp b/cpp/nissy.cpp
index 90fcf20..6ca4884 100644
--- a/cpp/nissy.cpp
+++ b/cpp/nissy.cpp
@@ -12,6 +12,7 @@ extern "C" {
12 long long nissy_inverse(const char *, char *); 12 long long nissy_inverse(const char *, char *);
13 long long nissy_applymoves(const char *, const char *, char *); 13 long long nissy_applymoves(const char *, const char *, char *);
14 long long nissy_applytrans(const char *, const char *, char *); 14 long long nissy_applytrans(const char *, const char *, char *);
15 long long nissy_variations(const char *, const char *, size_t, char*);
15 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,
16 long long, const char *, char *); 17 long long, const char *, char *);
17 long long nissy_solverinfo(const char *, char *); 18 long long nissy_solverinfo(const char *, char *);
@@ -44,6 +45,7 @@ namespace nissy {
44 const error error::INVALID_MOVES{-20}; 45 const error error::INVALID_MOVES{-20};
45 const error error::INVALID_TRANS{-30}; 46 const error error::INVALID_TRANS{-30};
46 const error error::INVALID_SOLVER{-50}; 47 const error error::INVALID_SOLVER{-50};
48 const error error::INVALID_VARIATION{-51};
47 const error error::NULL_POINTER{-60}; 49 const error error::NULL_POINTER{-60};
48 const error error::BUFFER_SIZE{-61}; 50 const error error::BUFFER_SIZE{-61};
49 const error error::DATA{-70}; 51 const error error::DATA{-70};
@@ -62,10 +64,42 @@ namespace nissy {
62 constexpr size_t TRANSFORMATION = 12; 64 constexpr size_t TRANSFORMATION = 12;
63 constexpr size_t SOLVE_STATS = 10; 65 constexpr size_t SOLVE_STATS = 10;
64 constexpr size_t DATAID = 255; 66 constexpr size_t DATAID = 255;
67 constexpr size_t MOVES = 1000;
65 } 68 }
66 69
67 bool error::ok() const { return value >= 0; } 70 bool error::ok() const { return value >= 0; }
68 71
72 variation::variation(const std::string& str) : name{str} {}
73
74 variation::variations_result
75 variation::find_variations(const std::string& moves)
76 {
77 variation::variations_result result;
78
79 const size_t len = 3 * size::MOVES * 16;
80 result.solutions.resize(len);
81
82 auto err = nissy_variations(moves.c_str(), name.c_str(), len,
83 result.solutions.data());
84
85 int size = result.solutions.find_first_of('\0');
86 result.solutions.resize(size);
87 result.err = error{err};
88
89 return result;
90 }
91
92 std::variant<variation, error>
93 variation::get(const std::string& name) {
94 char result[10];
95 variation s(name);
96
97 if (nissy_variations("", name.c_str(), 10, result) < 0)
98 return error::INVALID_VARIATION;
99 else
100 return s;
101 }
102
69 cube::cube() {} 103 cube::cube() {}
70 104
71 error cube::move(const std::string& moves) 105 error cube::move(const std::string& moves)

Generated with cgit - Back to sebastiano.tronto.net