aboutsummaryrefslogtreecommitdiff
path: root/src/solvers/coord/multisolve.h
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/multisolve.h
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 '')
-rw-r--r--src/solvers/coord/multisolve.h32
1 files changed, 16 insertions, 16 deletions
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,

Generated with cgit - Back to sebastiano.tronto.net