aboutsummaryrefslogtreecommitdiff
path: root/src/solvers/coord
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2026-04-06 15:55:33 +0200
committerSebastiano Tronto <sebastiano@tronto.net>2026-04-06 15:55:33 +0200
commitfc41f7917531693680b5baf71ffe38c47333fe84 (patch)
treea6e62232e05e7779034c5f9d1bf743b6f1c198e3 /src/solvers/coord
parentfe534f1497da6447153064d7bba00243000f803b (diff)
downloadnissy-core-fc41f7917531693680b5baf71ffe38c47333fe84.tar.gz
nissy-core-fc41f7917531693680b5baf71ffe38c47333fe84.zip
Make the project build with Microsoft's broken C compiler.
MSVC is not fully C11-compliant, even when compiling with /std:c11. Some changes were needed to make the codebase compatible. Notably, the notation a[static N] and a[n] for function parameters of array type is not supported, so that had to be hidden behind a macro. Atomic types are also an experimental feature, apparently, but at least they work with the correct compiler flag. One thing that MSVC does well, however, is warning on integer conversions on /W4 level. I am not sure if Clang and GCC have something similar, so I took this chance to fix some of these.
Diffstat (limited to 'src/solvers/coord')
-rw-r--r--src/solvers/coord/common.h42
-rw-r--r--src/solvers/coord/gendata.h51
-rw-r--r--src/solvers/coord/htr.h4
-rw-r--r--src/solvers/coord/multisolve.h32
-rw-r--r--src/solvers/coord/solve.h36
-rw-r--r--src/solvers/coord/types_macros.h4
-rw-r--r--src/solvers/coord/utils.h4
7 files changed, 89 insertions, 84 deletions
diff --git a/src/solvers/coord/common.h b/src/solvers/coord/common.h
index d154636..3a62e85 100644
--- a/src/solvers/coord/common.h
+++ b/src/solvers/coord/common.h
@@ -1,16 +1,16 @@
1STATIC uint64_t coord_coord_generic( 1STATIC uint64_t coord_coord_generic(
2 const coord_t [static 1], cube_t, const unsigned char *); 2 const coord_t [NON_NULL], cube_t, const unsigned char *);
3STATIC cube_t coord_cube_generic( 3STATIC cube_t coord_cube_generic(
4 const coord_t [static 1], uint64_t, const unsigned char *); 4 const coord_t [NON_NULL], uint64_t, const unsigned char *);
5STATIC bool coord_isnasty_generic( 5STATIC bool coord_isnasty_generic(
6 const coord_t [static 1], uint64_t, const unsigned char *); 6 const coord_t [NON_NULL], uint64_t, const unsigned char *);
7STATIC size_t coord_gendata_generic(const coord_t [static 1], unsigned char *); 7STATIC size_t coord_gendata_generic(const coord_t [NON_NULL], unsigned char *);
8 8
9STATIC bool solution_lastqt_cw(const solution_moves_t [static 1]); 9STATIC bool solution_lastqt_cw(const solution_moves_t [NON_NULL]);
10STATIC bool coord_can_switch(const coord_t [static 1], const unsigned char *, 10STATIC bool coord_can_switch(const coord_t [NON_NULL], const unsigned char *,
11 size_t, const uint8_t *); 11 size_t, const uint8_t *);
12STATIC bool coord_is_solved( 12STATIC bool coord_is_solved(
13 const coord_t [static 1], uint64_t, const unsigned char *); 13 const coord_t [NON_NULL], uint64_t, const unsigned char *);
14 14
15STATIC cube_t coordinate_merge_ce(cube_t, cube_t); 15STATIC cube_t coordinate_merge_ce(cube_t, cube_t);
16STATIC cube_t coordinate_merge_ec(cube_t, cube_t); 16STATIC cube_t coordinate_merge_ec(cube_t, cube_t);
@@ -18,7 +18,7 @@ STATIC cube_t coordinate_merge_cpco(cube_t, cube_t);
18 18
19STATIC uint64_t 19STATIC uint64_t
20coord_coord_generic( 20coord_coord_generic(
21 const coord_t coord[static 1], 21 const coord_t coord[NON_NULL],
22 cube_t c, 22 cube_t c,
23 const unsigned char *data 23 const unsigned char *data
24) 24)
@@ -36,7 +36,7 @@ coord_coord_generic(
36 36
37STATIC cube_t 37STATIC cube_t
38coord_cube_generic( 38coord_cube_generic(
39 const coord_t coord[static 1], 39 const coord_t coord[NON_NULL],
40 uint64_t i, 40 uint64_t i,
41 const unsigned char *data 41 const unsigned char *data
42) 42)
@@ -54,7 +54,7 @@ coord_cube_generic(
54 54
55STATIC bool 55STATIC bool
56coord_isnasty_generic( 56coord_isnasty_generic(
57 const coord_t coord[static 1], 57 const coord_t coord[NON_NULL],
58 uint64_t i, 58 uint64_t i,
59 const unsigned char *data 59 const unsigned char *data
60) 60)
@@ -73,11 +73,12 @@ coord_isnasty_generic(
73 73
74STATIC size_t 74STATIC size_t
75coord_gendata_generic( 75coord_gendata_generic(
76 const coord_t coord[static 1], 76 const coord_t coord[NON_NULL],
77 unsigned char *data 77 unsigned char *data
78) 78)
79{ 79{
80 uint64_t i, j, n, t, nasty; 80 uint64_t i, j, n, nasty;
81 uint8_t t;
81 unsigned char *datanoinfo; 82 unsigned char *datanoinfo;
82 uint32_t *classttrep, *rep; 83 uint32_t *classttrep, *rep;
83 size_t coord_datasize; 84 size_t coord_datasize;
@@ -122,16 +123,17 @@ coord_gendata_generic(
122 } 123 }
123 124
124 for (t = 0; t < NTRANS; t++) { 125 for (t = 0; t < NTRANS; t++) {
125 if (!((UINT64_C(1) << t) & coord->trans_mask)) 126 if (!((UINT64_C(1) << (uint64_t)t) & coord->trans_mask))
126 continue; 127 continue;
127 128
128 j = coord->sym.coord(transform(c, t)); 129 j = coord->sym.coord(transform(c, t));
129 classttrep[j] = 130 classttrep[j] = (uint32_t)(
130 (n << COORD_CLASS_SHIFT) | 131 (n << COORD_CLASS_SHIFT) |
131 (nasty << COORD_ISNASTY_SHIFT) | 132 (nasty << COORD_ISNASTY_SHIFT) |
132 (inverse_trans(t) << COORD_TTREP_SHIFT); 133 (inverse_trans(t) << COORD_TTREP_SHIFT)
134 );
133 } 135 }
134 rep[n++] = i; 136 rep[n++] = (uint32_t)i;
135 } 137 }
136 138
137 writetableinfo(&info, coord_datasize, data); 139 writetableinfo(&info, coord_datasize, data);
@@ -144,21 +146,21 @@ coord_gendata_generic(
144} 146}
145 147
146STATIC bool 148STATIC bool
147solution_lastqt_cw(const solution_moves_t s[static 1]) 149solution_lastqt_cw(const solution_moves_t s[NON_NULL])
148{ 150{
149 return are_lastmoves_singlecw(s->nmoves, s->moves) && 151 return are_lastmoves_singlecw(s->nmoves, s->moves) &&
150 are_lastmoves_singlecw(s->npremoves, s->premoves); 152 are_lastmoves_singlecw(s->npremoves, s->premoves);
151} 153}
152 154
153STATIC bool 155STATIC bool
154solution_always_valid(const solution_moves_t s[static 1]) 156solution_always_valid(const solution_moves_t s[NON_NULL])
155{ 157{
156 return true; 158 return true;
157} 159}
158 160
159STATIC bool 161STATIC bool
160coord_can_switch( 162coord_can_switch(
161 const coord_t coord[static 1], 163 const coord_t coord[NON_NULL],
162 const unsigned char *data, 164 const unsigned char *data,
163 size_t n, 165 size_t n,
164 const uint8_t *moves 166 const uint8_t *moves
@@ -192,7 +194,7 @@ coord_can_switch(
192 194
193STATIC bool 195STATIC bool
194coord_is_solved( 196coord_is_solved(
195 const coord_t coord[static 1], 197 const coord_t coord[NON_NULL],
196 uint64_t i, 198 uint64_t i,
197 const unsigned char *data 199 const unsigned char *data
198) 200)
diff --git a/src/solvers/coord/gendata.h b/src/solvers/coord/gendata.h
index cbc8774..edf6ce6 100644
--- a/src/solvers/coord/gendata.h
+++ b/src/solvers/coord/gendata.h
@@ -1,21 +1,21 @@
1STATIC size_t gendata_coord(const coord_t [static 1], unsigned char *); 1STATIC size_t gendata_coord(const coord_t [NON_NULL], unsigned char *);
2STATIC size_t gendata_multicoord( 2STATIC size_t gendata_multicoord(
3 const multicoord_t [static 1], unsigned char *); 3 const multicoord_t [NON_NULL], unsigned char *);
4STATIC long long gendata_coord_dispatch(const char *, unsigned long long, 4STATIC long long gendata_coord_dispatch(const char *, unsigned long long,
5 unsigned char *); 5 unsigned char *);
6STATIC tableinfo_t genptable_coord( 6STATIC tableinfo_t genptable_coord(
7 const coord_t [static 1], const unsigned char *, unsigned char *); 7 const coord_t [NON_NULL], const unsigned char *, unsigned char *);
8STATIC uint64_t genptable_coord_init_solved( 8STATIC uint64_t genptable_coord_init_solved(
9 const coord_t [static 1], const unsigned char *, unsigned char *); 9 const coord_t [NON_NULL], const unsigned char *, unsigned char *);
10STATIC bool switch_to_fromnew(uint64_t, uint64_t, uint64_t); 10STATIC bool switch_to_fromnew(uint64_t, uint64_t, uint64_t);
11STATIC uint64_t genptable_coord_fillneighbors(const coord_t [static 1], 11STATIC uint64_t genptable_coord_fillneighbors(const coord_t [NON_NULL],
12 const unsigned char *, uint64_t, uint8_t, unsigned char *); 12 const unsigned char *, uint64_t, uint8_t, unsigned char *);
13STATIC uint64_t genptable_coord_fillfromnew(const coord_t [static 1], 13STATIC uint64_t genptable_coord_fillfromnew(const coord_t [NON_NULL],
14 const unsigned char *, uint64_t, uint8_t, unsigned char *); 14 const unsigned char *, uint64_t, uint8_t, unsigned char *);
15STATIC uint8_t get_coord_pval( 15STATIC uint8_t get_coord_pval(
16 const coord_t [static 1], const unsigned char *, uint64_t); 16 const coord_t [NON_NULL], const unsigned char *, uint64_t);
17STATIC void set_coord_pval( 17STATIC void set_coord_pval(
18 const coord_t [static 1], unsigned char *, uint64_t, uint8_t); 18 const coord_t [NON_NULL], unsigned char *, uint64_t, uint8_t);
19 19
20STATIC long long 20STATIC long long
21gendata_coord_dispatch( 21gendata_coord_dispatch(
@@ -40,7 +40,7 @@ gendata_coord_dispatch(
40} 40}
41 41
42STATIC size_t 42STATIC size_t
43gendata_coord(const coord_t coord[static 1], unsigned char *buf) 43gendata_coord(const coord_t coord[NON_NULL], unsigned char *buf)
44{ 44{
45 uint64_t coord_dsize, tablesize, ninfo; 45 uint64_t coord_dsize, tablesize, ninfo;
46 unsigned char *pruningbuf, *coord_data; 46 unsigned char *pruningbuf, *coord_data;
@@ -96,7 +96,7 @@ gendata_coord_error:
96} 96}
97 97
98STATIC size_t 98STATIC size_t
99gendata_multicoord(const multicoord_t mcoord[static 1], unsigned char *buf) 99gendata_multicoord(const multicoord_t mcoord[NON_NULL], unsigned char *buf)
100{ 100{
101 unsigned char *b; 101 unsigned char *b;
102 size_t i, s, ret; 102 size_t i, s, ret;
@@ -141,12 +141,13 @@ gendata_multicoord(const multicoord_t mcoord[static 1], unsigned char *buf)
141 141
142STATIC tableinfo_t 142STATIC tableinfo_t
143genptable_coord( 143genptable_coord(
144 const coord_t coord[static 1], 144 const coord_t coord[NON_NULL],
145 const unsigned char *data, 145 const unsigned char *data,
146 unsigned char *table 146 unsigned char *table
147) 147)
148{ 148{
149 uint64_t tablesize, i, d, tot, t, nm; 149 uint64_t tablesize, i, tot, t, nm;
150 uint8_t d;
150 tableinfo_t info; 151 tableinfo_t info;
151 152
152 tablesize = DIV_ROUND_UP(coord->max, 2); 153 tablesize = DIV_ROUND_UP(coord->max, 2);
@@ -170,7 +171,7 @@ genptable_coord(
170 171
171 tot = info.distribution[0] = 172 tot = info.distribution[0] =
172 genptable_coord_init_solved(coord, data, table); 173 genptable_coord_init_solved(coord, data, table);
173 nm = popcount_u32(coord->moves_mask_gendata); 174 nm = popcount_u64(coord->moves_mask_gendata);
174 for (d = 1; tot < coord->max && d < 15; d++) { 175 for (d = 1; tot < coord->max && d < 15; d++) {
175 t = 0; 176 t = 0;
176 if (switch_to_fromnew(tot, coord->max, nm)) { 177 if (switch_to_fromnew(tot, coord->max, nm)) {
@@ -204,7 +205,7 @@ genptable_coord(
204 205
205STATIC uint64_t 206STATIC uint64_t
206genptable_coord_init_solved( 207genptable_coord_init_solved(
207 const coord_t coord[static 1], 208 const coord_t coord[NON_NULL],
208 const unsigned char *coord_data, 209 const unsigned char *coord_data,
209 unsigned char *table 210 unsigned char *table
210) 211)
@@ -238,7 +239,7 @@ switch_to_fromnew(uint64_t done, uint64_t max, uint64_t nm)
238 239
239STATIC uint64_t 240STATIC uint64_t
240genptable_coord_fillneighbors( 241genptable_coord_fillneighbors(
241 const coord_t coord[static 1], 242 const coord_t coord[NON_NULL],
242 const unsigned char *data, 243 const unsigned char *data,
243 uint64_t i, 244 uint64_t i,
244 uint8_t d, 245 uint8_t d,
@@ -247,20 +248,21 @@ genptable_coord_fillneighbors(
247{ 248{
248 bool isnasty; 249 bool isnasty;
249 uint8_t m; 250 uint8_t m;
250 uint64_t ii, j, t, tot; 251 uint64_t ii, j, tot;
252 uint8_t t;
251 cube_t c, moved; 253 cube_t c, moved;
252 254
253 c = coord->cube(i, data); 255 c = coord->cube(i, data);
254 tot = 0; 256 tot = 0;
255 for (m = 0; m < NMOVES; m++) { 257 for (m = 0; m < NMOVES; m++) {
256 if (!((UINT32_C(1) << (uint32_t)m) & 258 if (!((UINT64_C(1) << (uint64_t)m) &
257 coord->moves_mask_gendata)) 259 coord->moves_mask_gendata))
258 continue; 260 continue;
259 moved = move(c, m); 261 moved = move(c, m);
260 ii = coord->coord(moved, data); 262 ii = coord->coord(moved, data);
261 isnasty = coord->isnasty(ii, data); 263 isnasty = coord->isnasty(ii, data);
262 for (t = 0; t < NTRANS && (t == 0 || isnasty); t++) { 264 for (t = 0; t < NTRANS && (t == 0 || isnasty); t++) {
263 if (!((UINT64_C(1) << t) & coord->trans_mask)) 265 if (!((UINT64_C(1) << (uint64_t)t) & coord->trans_mask))
264 continue; 266 continue;
265 267
266 j = coord->coord(transform(moved, t), data); 268 j = coord->coord(transform(moved, t), data);
@@ -276,7 +278,7 @@ genptable_coord_fillneighbors(
276 278
277STATIC uint64_t 279STATIC uint64_t
278genptable_coord_fillfromnew( 280genptable_coord_fillfromnew(
279 const coord_t coord[static 1], 281 const coord_t coord[NON_NULL],
280 const unsigned char *data, 282 const unsigned char *data,
281 uint64_t i, 283 uint64_t i,
282 uint8_t d, 284 uint8_t d,
@@ -285,14 +287,15 @@ genptable_coord_fillfromnew(
285{ 287{
286 bool found; 288 bool found;
287 uint8_t m; 289 uint8_t m;
288 uint64_t tot, t, ii, j, nsim, sim[NTRANS]; 290 uint64_t tot, j, ii, nsim, sim[NTRANS];
291 uint8_t t;
289 cube_t c; 292 cube_t c;
290 293
291 tot = 0; 294 tot = 0;
292 c = coord->cube(i, data); 295 c = coord->cube(i, data);
293 296
294 for (t = 0, nsim = 0; t < NTRANS; t++) { 297 for (t = 0, nsim = 0; t < NTRANS; t++) {
295 if (!((UINT64_C(1) << t) & coord->trans_mask)) 298 if (!((UINT64_C(1) << (uint64_t)t) & coord->trans_mask))
296 continue; 299 continue;
297 300
298 ii = coord->coord(transform(c, t), data); 301 ii = coord->coord(transform(c, t), data);
@@ -305,7 +308,7 @@ genptable_coord_fillfromnew(
305 for (j = 0, found = false; j < nsim && !found; j++) { 308 for (j = 0, found = false; j < nsim && !found; j++) {
306 c = coord->cube(sim[j], data); 309 c = coord->cube(sim[j], data);
307 for (m = 0; m < NMOVES; m++) { 310 for (m = 0; m < NMOVES; m++) {
308 if (!((UINT32_C(1) << (uint32_t)m) & 311 if (!((UINT64_C(1) << (uint64_t)m) &
309 coord->moves_mask_gendata)) 312 coord->moves_mask_gendata))
310 continue; 313 continue;
311 ii = coord->coord(move(c, m), data); 314 ii = coord->coord(move(c, m), data);
@@ -331,7 +334,7 @@ genptable_coord_fillfromnew(
331 334
332STATIC uint8_t 335STATIC uint8_t
333get_coord_pval( 336get_coord_pval(
334 const coord_t coord[static 1], 337 const coord_t coord[NON_NULL],
335 const unsigned char *table, 338 const unsigned char *table,
336 uint64_t i 339 uint64_t i
337) 340)
@@ -341,7 +344,7 @@ get_coord_pval(
341 344
342STATIC void 345STATIC void
343set_coord_pval( 346set_coord_pval(
344 const coord_t coord[static 1], 347 const coord_t coord[NON_NULL],
345 unsigned char *table, 348 unsigned char *table,
346 uint64_t i, 349 uint64_t i,
347 uint8_t val 350 uint8_t val
diff --git a/src/solvers/coord/htr.h b/src/solvers/coord/htr.h
index cfd451b..602625b 100644
--- a/src/solvers/coord/htr.h
+++ b/src/solvers/coord/htr.h
@@ -4,7 +4,7 @@ STATIC bool coordinate_htr_isnasty(uint64_t, const unsigned char *);
4STATIC size_t coordinate_htr_gendata(unsigned char *); 4STATIC size_t coordinate_htr_gendata(unsigned char *);
5 5
6STATIC bool htr_checkmoves(bool *, uint8_t, const uint8_t *); 6STATIC bool htr_checkmoves(bool *, uint8_t, const uint8_t *);
7STATIC bool htr_solution_prune(const solution_moves_t [static 1]); 7STATIC bool htr_solution_prune(const solution_moves_t [NON_NULL]);
8STATIC bool is_cp_htr(uint64_t, const unsigned char *); 8STATIC bool is_cp_htr(uint64_t, const unsigned char *);
9 9
10STATIC coord_t coordinate_htr = { 10STATIC coord_t coordinate_htr = {
@@ -97,7 +97,7 @@ htr_checkmoves(bool *f, uint8_t n, const uint8_t *moves)
97} 97}
98 98
99STATIC bool 99STATIC bool
100htr_solution_prune(const solution_moves_t s[static 1]) 100htr_solution_prune(const solution_moves_t s[NON_NULL])
101{ 101{
102 bool f; 102 bool f;
103 103
diff --git a/src/solvers/coord/multisolve.h b/src/solvers/coord/multisolve.h
index a45bd6a..efd287d 100644
--- a/src/solvers/coord/multisolve.h
+++ b/src/solvers/coord/multisolve.h
@@ -16,20 +16,20 @@ typedef struct {
16 const unsigned char *ptable[MAX_MULTICOORD_NCOORDS]; 16 const unsigned char *ptable[MAX_MULTICOORD_NCOORDS];
17} dfsarg_solve_multicoord_t; 17} dfsarg_solve_multicoord_t;
18 18
19STATIC int64_t solve_multicoord(oriented_cube_t, multicoord_t [static 1], 19STATIC int64_t solve_multicoord(oriented_cube_t, multicoord_t [NON_NULL],
20 uint8_t, uint8_t, uint8_t, uint64_t, uint8_t, uint8_t, uint64_t, 20 uint8_t, uint8_t, uint8_t, uint64_t, uint8_t, uint8_t, uint64_t,
21 const unsigned char *, size_t, char *, int (*)(void *), void *); 21 const unsigned char *, size_t, char *, int (*)(void *), void *);
22STATIC long long solve_multicoord_dispatch(oriented_cube_t, const char *, 22STATIC long long solve_multicoord_dispatch(oriented_cube_t, const char *,
23 unsigned, unsigned, unsigned, unsigned, unsigned, unsigned, 23 unsigned, unsigned, unsigned, unsigned, unsigned, unsigned,
24 unsigned long long, const unsigned char *, unsigned, char *, 24 unsigned long long, const unsigned char *, unsigned, char *,
25 long long [static NISSY_SIZE_SOLVE_STATS], int (*)(void *), void *); 25 long long [SIZE(NISSY_SIZE_SOLVE_STATS)], int (*)(void *), void *);
26STATIC bool multicoord_solution_admissible( 26STATIC bool multicoord_solution_admissible(
27 const dfsarg_solve_multicoord_t [static 1]); 27 const dfsarg_solve_multicoord_t [NON_NULL]);
28STATIC bool multicoord_dfs_stop(const dfsarg_solve_multicoord_t [static 1]); 28STATIC bool multicoord_dfs_stop(const dfsarg_solve_multicoord_t [NON_NULL]);
29STATIC int64_t solve_multicoord_dfs(dfsarg_solve_multicoord_t [static 1]); 29STATIC int64_t solve_multicoord_dfs(dfsarg_solve_multicoord_t [NON_NULL]);
30 30
31STATIC bool 31STATIC bool
32multicoord_solution_admissible(const dfsarg_solve_multicoord_t arg[static 1]) 32multicoord_solution_admissible(const dfsarg_solve_multicoord_t arg[NON_NULL])
33{ 33{
34 uint8_t n, i; 34 uint8_t n, i;
35 const coord_t *c; 35 const coord_t *c;
@@ -49,7 +49,7 @@ multicoord_solution_admissible(const dfsarg_solve_multicoord_t arg[static 1])
49} 49}
50 50
51STATIC bool 51STATIC bool
52multicoord_dfs_stop(const dfsarg_solve_multicoord_t arg[static 1]) 52multicoord_dfs_stop(const dfsarg_solve_multicoord_t arg[NON_NULL])
53{ 53{
54 uint8_t pval, i; 54 uint8_t pval, i;
55 uint64_t cval; 55 uint64_t cval;
@@ -69,11 +69,10 @@ multicoord_dfs_stop(const dfsarg_solve_multicoord_t arg[static 1])
69} 69}
70 70
71STATIC int64_t 71STATIC int64_t
72solve_multicoord_dfs(dfsarg_solve_multicoord_t arg[static 1]) 72solve_multicoord_dfs(dfsarg_solve_multicoord_t arg[NON_NULL])
73{ 73{
74 uint8_t m, l, i; 74 uint8_t m, l, i;
75 uint32_t mm; 75 uint64_t mm, coord;
76 uint64_t coord;
77 int64_t n, ret; 76 int64_t n, ret;
78 const coord_t *c; 77 const coord_t *c;
79 cube_t backup_cube, backup_inverse; 78 cube_t backup_cube, backup_inverse;
@@ -108,7 +107,7 @@ solve_multicoord_dfs_notsolved:
108 arg->solution_moves->nmoves++; 107 arg->solution_moves->nmoves++;
109 108
110 for (m = 0; m < NMOVES; m++) { 109 for (m = 0; m < NMOVES; m++) {
111 if (!(mm & (UINT32_C(1) << (uint32_t)m))) 110 if (!(mm & (UINT64_C(1) << (uint64_t)m)))
112 continue; 111 continue;
113 112
114 arg->solution_moves->moves[l] = m; 113 arg->solution_moves->moves[l] = m;
@@ -141,7 +140,7 @@ solve_multicoord_dispatch(
141 const unsigned char *data, 140 const unsigned char *data,
142 unsigned solutions_size, 141 unsigned solutions_size,
143 char *sols, 142 char *sols,
144 long long stats[static NISSY_SIZE_SOLVE_STATS], 143 long long stats[SIZE(NISSY_SIZE_SOLVE_STATS)],
145 int (*poll_status)(void *), 144 int (*poll_status)(void *),
146 void *poll_status_data 145 void *poll_status_data
147) 146)
@@ -163,15 +162,16 @@ solve_multicoord_dispatch(
163 return NISSY_ERROR_INVALID_SOLVER; 162 return NISSY_ERROR_INVALID_SOLVER;
164 } 163 }
165 164
166 return solve_multicoord(oc, mcoord, trans, minmoves, 165 return solve_multicoord(oc, mcoord, trans, (uint8_t)minmoves,
167 maxmoves, maxsolutions, optimal, threads, data_size, data, 166 (uint8_t)maxmoves, (uint8_t)maxsolutions, (uint8_t)optimal,
168 solutions_size, sols, poll_status, poll_status_data); 167 (uint8_t)threads, data_size, data, solutions_size, sols,
168 poll_status, poll_status_data);
169} 169}
170 170
171STATIC int64_t 171STATIC int64_t
172solve_multicoord( 172solve_multicoord(
173 oriented_cube_t oc, 173 oriented_cube_t oc,
174 multicoord_t mcoord [static 1], 174 multicoord_t mcoord [NON_NULL],
175 uint8_t trans, 175 uint8_t trans,
176 uint8_t minmoves, 176 uint8_t minmoves,
177 uint8_t maxmoves, 177 uint8_t maxmoves,
diff --git a/src/solvers/coord/solve.h b/src/solvers/coord/solve.h
index 9ea6d1a..6bb9af2 100644
--- a/src/solvers/coord/solve.h
+++ b/src/solvers/coord/solve.h
@@ -13,20 +13,20 @@ typedef struct {
13 const unsigned char *ptable; 13 const unsigned char *ptable;
14} dfsarg_solve_coord_t; 14} dfsarg_solve_coord_t;
15 15
16STATIC int64_t solve_coord(oriented_cube_t, coord_t [static 1], uint8_t, 16STATIC int64_t solve_coord(oriented_cube_t, coord_t [NON_NULL], uint8_t,
17 uint8_t, uint8_t, uint8_t, uint64_t, uint8_t, uint8_t, uint64_t, 17 uint8_t, uint8_t, uint8_t, uint64_t, uint8_t, uint8_t, uint64_t,
18 const unsigned char *, size_t, char *, int (*)(void *), void *); 18 const unsigned char *, size_t, char *, int (*)(void *), void *);
19STATIC long long solve_coord_dispatch(oriented_cube_t, const char *, unsigned, 19STATIC long long solve_coord_dispatch(oriented_cube_t, const char *, unsigned,
20 unsigned, unsigned, unsigned, unsigned, unsigned, unsigned long long, 20 unsigned, unsigned, unsigned, unsigned, unsigned, unsigned long long,
21 const unsigned char *, unsigned, char *, 21 const unsigned char *, unsigned, char *,
22 long long [static NISSY_SIZE_SOLVE_STATS], int (*)(void *), void *); 22 long long [SIZE(NISSY_SIZE_SOLVE_STATS)], int (*)(void *), void *);
23STATIC bool coord_solution_admissible(const dfsarg_solve_coord_t [static 1]); 23STATIC bool coord_solution_admissible(const dfsarg_solve_coord_t [NON_NULL]);
24STATIC bool coord_continue_onnormal(const dfsarg_solve_coord_t [static 1]); 24STATIC bool coord_continue_onnormal(const dfsarg_solve_coord_t [NON_NULL]);
25STATIC bool coord_continue_oninverse(const dfsarg_solve_coord_t [static 1]); 25STATIC bool coord_continue_oninverse(const dfsarg_solve_coord_t [NON_NULL]);
26STATIC int64_t solve_coord_dfs(dfsarg_solve_coord_t [static 1]); 26STATIC int64_t solve_coord_dfs(dfsarg_solve_coord_t [NON_NULL]);
27 27
28STATIC bool 28STATIC bool
29coord_solution_admissible(const dfsarg_solve_coord_t arg[static 1]) 29coord_solution_admissible(const dfsarg_solve_coord_t arg[NON_NULL])
30{ 30{
31 uint8_t n; 31 uint8_t n;
32 32
@@ -39,7 +39,7 @@ coord_solution_admissible(const dfsarg_solve_coord_t arg[static 1])
39} 39}
40 40
41STATIC bool 41STATIC bool
42coord_continue_onnormal(const dfsarg_solve_coord_t arg[static 1]) 42coord_continue_onnormal(const dfsarg_solve_coord_t arg[NON_NULL])
43{ 43{
44 uint8_t flag, nn, ni, swbound_n, swbound_i, pval; 44 uint8_t flag, nn, ni, swbound_n, swbound_i, pval;
45 uint64_t coord; 45 uint64_t coord;
@@ -93,7 +93,7 @@ coord_continue_onnormal(const dfsarg_solve_coord_t arg[static 1])
93} 93}
94 94
95STATIC bool 95STATIC bool
96coord_continue_oninverse(const dfsarg_solve_coord_t arg[static 1]) 96coord_continue_oninverse(const dfsarg_solve_coord_t arg[NON_NULL])
97{ 97{
98 uint8_t flag, nn, ni, swbound_n, swbound_i, pval; 98 uint8_t flag, nn, ni, swbound_n, swbound_i, pval;
99 uint64_t coord; 99 uint64_t coord;
@@ -147,12 +147,11 @@ coord_continue_oninverse(const dfsarg_solve_coord_t arg[static 1])
147} 147}
148 148
149STATIC int64_t 149STATIC int64_t
150solve_coord_dfs(dfsarg_solve_coord_t arg[static 1]) 150solve_coord_dfs(dfsarg_solve_coord_t arg[NON_NULL])
151{ 151{
152 bool lastbackup; 152 bool lastbackup;
153 uint8_t m, l, nnbackup, nibackup, nmoves; 153 uint8_t m, l, nnbackup, nibackup, nmoves;
154 uint32_t mm; 154 uint64_t mm, coord;
155 uint64_t coord;
156 int64_t n, ret; 155 int64_t n, ret;
157 cube_t backup_cube, backup_inverse; 156 cube_t backup_cube, backup_inverse;
158 157
@@ -190,7 +189,7 @@ solve_coord_dfs(dfsarg_solve_coord_t arg[static 1])
190 arg->lastisnormal = true; 189 arg->lastisnormal = true;
191 190
192 for (m = 0; m < NMOVES; m++) { 191 for (m = 0; m < NMOVES; m++) {
193 if (!(mm & (UINT32_C(1) << (uint32_t)m))) 192 if (!(mm & (UINT64_C(1) << (uint64_t)m)))
194 continue; 193 continue;
195 194
196 arg->solution_moves->moves[l] = m; 195 arg->solution_moves->moves[l] = m;
@@ -221,7 +220,7 @@ solve_coord_dfs(dfsarg_solve_coord_t arg[static 1])
221 arg->lastisnormal = false; 220 arg->lastisnormal = false;
222 221
223 for (m = 0; m < NMOVES; m++) { 222 for (m = 0; m < NMOVES; m++) {
224 if (!(mm & (UINT32_C(1) << (uint32_t)m))) 223 if (!(mm & (UINT64_C(1) << (uint64_t)m)))
225 continue; 224 continue;
226 225
227 arg->solution_moves->premoves[l] = m; 226 arg->solution_moves->premoves[l] = m;
@@ -258,7 +257,7 @@ solve_coord_dispatch(
258 const unsigned char *data, 257 const unsigned char *data,
259 unsigned solutions_size, 258 unsigned solutions_size,
260 char *sols, 259 char *sols,
261 long long stats[static NISSY_SIZE_SOLVE_STATS], 260 long long stats[SIZE(NISSY_SIZE_SOLVE_STATS)],
262 int (*poll_status)(void *), 261 int (*poll_status)(void *),
263 void *poll_status_data 262 void *poll_status_data
264) 263)
@@ -280,15 +279,16 @@ solve_coord_dispatch(
280 return NISSY_ERROR_INVALID_SOLVER; 279 return NISSY_ERROR_INVALID_SOLVER;
281 } 280 }
282 281
283 return solve_coord(oc, coord, trans, nissflag, minmoves, maxmoves, 282 return solve_coord(oc, coord, trans, (uint8_t)nissflag,
284 maxsolutions, optimal, threads, data_size, data, 283 (uint8_t)minmoves, (uint8_t)maxmoves, (uint8_t)maxsolutions,
284 (uint8_t)optimal, (uint8_t)threads, data_size, data,
285 solutions_size, sols, poll_status, poll_status_data); 285 solutions_size, sols, poll_status, poll_status_data);
286} 286}
287 287
288STATIC int64_t 288STATIC int64_t
289solve_coord( 289solve_coord(
290 oriented_cube_t oc, 290 oriented_cube_t oc,
291 coord_t coord [static 1], 291 coord_t coord [NON_NULL],
292 uint8_t trans, 292 uint8_t trans,
293 uint8_t nissflag, 293 uint8_t nissflag,
294 uint8_t minmoves, 294 uint8_t minmoves,
diff --git a/src/solvers/coord/types_macros.h b/src/solvers/coord/types_macros.h
index b75fab8..81db9d4 100644
--- a/src/solvers/coord/types_macros.h
+++ b/src/solvers/coord/types_macros.h
@@ -27,8 +27,8 @@ typedef struct {
27 uint64_t moves_mask_gendata; 27 uint64_t moves_mask_gendata;
28 uint64_t moves_mask_solve; 28 uint64_t moves_mask_solve;
29 uint64_t trans_mask; 29 uint64_t trans_mask;
30 bool (*is_admissible)(const solution_moves_t[static 1]); 30 bool (*is_admissible)(const solution_moves_t[NON_NULL]);
31 bool (*solution_prune)(const solution_moves_t[static 1]); 31 bool (*solution_prune)(const solution_moves_t[NON_NULL]);
32 bool (*is_solvable)(cube_t); 32 bool (*is_solvable)(cube_t);
33 /* if is_solved is null, coord == 0 is used */ 33 /* if is_solved is null, coord == 0 is used */
34 bool (*is_solved)(uint64_t, const unsigned char *); 34 bool (*is_solved)(uint64_t, const unsigned char *);
diff --git a/src/solvers/coord/utils.h b/src/solvers/coord/utils.h
index c8a9338..0062587 100644
--- a/src/solvers/coord/utils.h
+++ b/src/solvers/coord/utils.h
@@ -2,7 +2,7 @@ STATIC coord_t *parse_coord(size_t, const char *);
2STATIC multicoord_t *parse_multicoord(size_t, const char *); 2STATIC multicoord_t *parse_multicoord(size_t, const char *);
3STATIC void parse_coord_and_trans( 3STATIC void parse_coord_and_trans(
4 const char *, coord_t **, multicoord_t **, uint8_t *); 4 const char *, coord_t **, multicoord_t **, uint8_t *);
5STATIC long long dataid_coord(const char *, char [static NISSY_SIZE_DATAID]); 5STATIC long long dataid_coord(const char *, char [SIZE(NISSY_SIZE_DATAID)]);
6 6
7STATIC coord_t * 7STATIC coord_t *
8parse_coord(size_t n, const char *coord) 8parse_coord(size_t n, const char *coord)
@@ -60,7 +60,7 @@ parse_coord_and_trans(
60} 60}
61 61
62STATIC long long 62STATIC long long
63dataid_coord(const char *ca, char dataid[static NISSY_SIZE_DATAID]) 63dataid_coord(const char *ca, char dataid[SIZE(NISSY_SIZE_DATAID)])
64{ 64{
65 coord_t *c; 65 coord_t *c;
66 multicoord_t *mc; 66 multicoord_t *mc;

Generated with cgit - Back to sebastiano.tronto.net