aboutsummaryrefslogtreecommitdiff
path: root/src/solvers/twostep
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2026-09-17 21:20:22 +0200
committerSebastiano Tronto <sebastiano@tronto.net>2026-09-17 21:22:36 +0200
commit2f9d00075b0d236ecd8431761bb045e6aa088001 (patch)
tree461444185e5d342725c60cff79d45bedc95a2c86 /src/solvers/twostep
parent654e6c34637c9ba344a3620014de22f8f3dfb4ca (diff)
downloadnissy-core-2f9d00075b0d236ecd8431761bb045e6aa088001.tar.gz
nissy-core-2f9d00075b0d236ecd8431761bb045e6aa088001.zip
twostep solver (wip)
Diffstat (limited to 'src/solvers/twostep')
-rw-r--r--src/solvers/twostep/twostep.h93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/solvers/twostep/twostep.h b/src/solvers/twostep/twostep.h
new file mode 100644
index 0000000..8947a50
--- /dev/null
+++ b/src/solvers/twostep/twostep.h
@@ -0,0 +1,93 @@
1#include "../coord/coord.h"
2
3STATIC long long dataid_twostep(const char *, char [SIZE(NISSY_SIZE_DATAID)]);
4STATIC long long gendata_twostep(
5 const char *, unsigned long long, unsigned char *);
6STATIC long long checkdata_twostep(
7 const char *, unsigned long long, const unsigned char *);
8STATIC long long solve_twostep(oriented_cube_t, const char *, unsigned,
9 unsigned, unsigned, unsigned, unsigned, unsigned, unsigned long long,
10 const unsigned char *, unsigned, char *,
11 long long [SIZE(NISSY_SIZE_SOLVE_STATS)], int (*)(void *), void *);
12
13STATIC long long
14dataid_twostep(const char *s, char dataid[SIZE(NISSY_SIZE_DATAID)])
15{
16 strcpy(dataid, "DR_DRFIN");
17 return NISSY_OK;
18}
19
20STATIC long long
21gendata_twostep(
22 const char *s,
23 unsigned long long bufsize,
24 unsigned char *buf
25)
26{
27 size_t r, s1, s2;
28
29 s1 = gendata_coord(&coordinate_dr, NULL);
30 s1 = DIV_ROUND_UP(s1, 8); /* Preserve 8-byte alignment */
31 s2 = gendata_multicoord(&multicoordinate_drfin, NULL);
32
33 if (buf == NULL)
34 goto gendata_twostep_return_size;
35
36 if (bufsize < s1 + s2)
37 return NISSY_ERROR_BUFFER_SIZE;
38
39 r = gendata_coord(&coordinate_dr, buf);
40 if (r == 0)
41 return NISSY_ERROR_UNKNOWN;
42
43 r = gendata_multicoord(&multicoordinate_drfin, buf + s1);
44 if (r != NISSY_OK)
45 return NISSY_ERROR_UNKNOWN;
46
47gendata_twostep_return_size:
48 return s1 + s2;
49}
50
51STATIC long long
52checkdata_twostep(
53 const char *s,
54 unsigned long long bufsize,
55 const unsigned char *buf
56)
57{
58 long long r;
59
60 LOG("[checkdata] Checking double table for two step solver\n");
61
62 r = checkdata_coord(&coordinate_dr, bufsize, buf);
63 if (r != NISSY_OK)
64 return r;
65
66 r = checkdata_multicoord(&multicoordinate_drfin, bufsize, buf);
67 if (r != NISSY_OK)
68 return r;
69
70 return NISSY_OK;
71}
72
73STATIC long long
74solve_twostep(
75 oriented_cube_t oc,
76 const char *coord_and_trans,
77 unsigned nissflag,
78 unsigned minmoves,
79 unsigned maxmoves,
80 unsigned maxsolutions,
81 unsigned optimal,
82 unsigned threads,
83 unsigned long long data_size,
84 const unsigned char *data,
85 unsigned solutions_size,
86 char *sols,
87 long long stats[SIZE(NISSY_SIZE_SOLVE_STATS)],
88 int (*poll_status)(void *),
89 void *poll_status_data
90)
91{
92//TODO
93}

Generated with cgit - Back to sebastiano.tronto.net