aboutsummaryrefslogtreecommitdiff
path: root/cpp/nissy.h
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2025-04-09 16:49:51 +0200
committerSebastiano Tronto <sebastiano@tronto.net>2025-04-09 16:49:51 +0200
commitf7d6bec5a3b79425dab88043a10efad80e26fcb4 (patch)
tree1a7b4c448069d8883e7dcd771b8383d05bf42c07 /cpp/nissy.h
parentff7cee6df128cbf6b05c57585fd9b8ca8f3665f4 (diff)
downloadnissy-core-f7d6bec5a3b79425dab88043a10efad80e26fcb4.tar.gz
nissy-core-f7d6bec5a3b79425dab88043a10efad80e26fcb4.zip
Add an opinionated C++20 adapter
Diffstat (limited to '')
-rw-r--r--cpp/nissy.h133
1 files changed, 133 insertions, 0 deletions
diff --git a/cpp/nissy.h b/cpp/nissy.h
new file mode 100644
index 0000000..e336c7a
--- /dev/null
+++ b/cpp/nissy.h
@@ -0,0 +1,133 @@
1/*
2C++20 header file for nissy.
3*/
4
5#ifndef NISSY_H
6#define NISSY_H
7
8#include <array>
9#include <functional>
10#include <optional>
11#include <ranges>
12#include <string>
13#include <string_view>
14#include <variant>
15#include <vector>
16
17namespace nissy {
18 /* Some constants for size for I/O buffers */
19 namespace size {
20 constexpr size_t B32 = 22;
21 constexpr size_t H48 = 88;
22 constexpr size_t CUBE_MAX = H48;
23 constexpr size_t TRANSFORMATION = 12;
24 constexpr size_t SOLVE_STATS = 10;
25 constexpr size_t DATAID = 255;
26 }
27
28 /* Some structs definitions for better type safety */
29 struct nissflag_t { unsigned value; };
30 struct error_t { long long value; };
31 struct cube_t { std::string value; };
32 struct moves_t { std::string value; };
33 struct trans_t { std::string value; };
34 struct cube_format_t { std::string value; };
35 struct solver_t { std::string value; };
36 struct solver_data_t { std::vector<std::byte> value; };
37 struct solve_result_t {
38 std::vector<std::string> solutions;
39 std::array<long long, size::SOLVE_STATS> stats;
40 };
41
42 /* Flags for NISS options */
43 namespace nissflag {
44 constexpr nissflag_t NORMAL{1};
45 constexpr nissflag_t INVERSE{2};
46 constexpr nissflag_t MIXED{4};
47 constexpr nissflag_t LINEAR{NORMAL.value | INVERSE.value};
48 constexpr nissflag_t ALL{LINEAR.value | MIXED.value};
49 }
50
51 /* Error codes */
52 namespace error {
53 constexpr error_t UNSOLVABLE{-1};
54 constexpr error_t INVALID_CUBE{-10};
55 constexpr error_t UNSOLVABLE_CUBE{-11};
56 constexpr error_t INVALID_MOVES{-20};
57 constexpr error_t INVALID_TRANS{-30};
58 constexpr error_t INVALID_FORMAT{-40};
59 constexpr error_t INVALID_SOLVER{-50};
60 constexpr error_t NULL_POINTER{-60};
61 constexpr error_t BUFFER_SIZE{-61};
62 constexpr error_t DATA{-70};
63 constexpr error_t OPTIONS{-80};
64 constexpr error_t UNKNOWN{-999};
65 }
66
67 /* Cube constants */
68 namespace cube {
69 const cube_t SOLVED{"ABCDEFGH=ABCDEFGHIJKL"};
70 }
71
72 std::variant<cube_t, error_t> inverse(
73 const cube_t& cube
74 );
75
76 std::variant<cube_t, error_t> applymoves(
77 const cube_t& cube,
78 const moves_t& moves
79 );
80
81 std::variant<cube_t, error_t> applytrans(
82 const cube_t& cube,
83 const trans_t& trans
84 );
85
86 std::variant<std::string, error_t> convert(
87 const cube_format_t& format_in,
88 const cube_format_t& format_out,
89 const std::string& cube_string
90 );
91
92 std::variant<cube_t, error_t> getcube(
93 long long ep,
94 long long eo,
95 long long cp,
96 long long co,
97 const std::string& options
98 );
99
100 std::variant<std::pair<size_t, std::string>, error_t> solverinfo(
101 const solver_t& solver
102 );
103
104 std::variant<solver_data_t, error_t> gendata(
105 const solver_t& solver
106 );
107
108 std::optional<error_t> checkdata(
109 const solver_data_t& data
110 );
111
112 std::variant<solve_result_t, error_t> solve(
113 const cube_t& cube,
114 const solver_t& solver,
115 nissflag_t niss,
116 unsigned minmoves,
117 unsigned maxmoves,
118 unsigned maxsolutions,
119 int optimal,
120 int threads,
121 const solver_data_t& data
122 );
123
124 std::variant<unsigned, error_t> countmoves(
125 const moves_t& moves
126 );
127
128 void setlogger(
129 std::function<void(std::string&)> log
130 );
131}
132
133#endif

Generated with cgit - Back to sebastiano.tronto.net