aboutsummaryrefslogtreecommitdiff
path: root/src
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
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/arch/avx2.h12
-rw-r--r--src/arch/common.h14
-rw-r--r--src/arch/neon.h10
-rw-r--r--src/arch/portable.h10
-rw-r--r--src/core/cube.h8
-rw-r--r--src/core/moves.h30
-rw-r--r--src/core/transform.h17
-rw-r--r--src/nissy.c32
-rw-r--r--src/nissy.h33
-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
-rw-r--r--src/solvers/dispatch.h4
-rw-r--r--src/solvers/distribution.h14
-rw-r--r--src/solvers/h48/coordinate.h8
-rw-r--r--src/solvers/h48/distribution_h48.h6
-rw-r--r--src/solvers/h48/gendata_cocsep.h21
-rw-r--r--src/solvers/h48/gendata_eoesep.h62
-rw-r--r--src/solvers/h48/gendata_h48.h36
-rw-r--r--src/solvers/h48/map.h28
-rw-r--r--src/solvers/h48/solve.h68
-rw-r--r--src/solvers/h48/utils.h10
-rw-r--r--src/solvers/solutions.h82
-rw-r--r--src/solvers/tables.h26
-rw-r--r--src/utils/compilers.h17
-rw-r--r--src/utils/dbg_log.h3
-rw-r--r--src/utils/math.h6
-rw-r--r--src/utils/wrapthread.h4
32 files changed, 381 insertions, 353 deletions
diff --git a/src/arch/avx2.h b/src/arch/avx2.h
index 15ce02a..801419e 100644
--- a/src/arch/avx2.h
+++ b/src/arch/avx2.h
@@ -37,11 +37,11 @@ popcount_u32(uint32_t x)
37STATIC_INLINE int 37STATIC_INLINE int
38popcount_u64(uint64_t x) 38popcount_u64(uint64_t x)
39{ 39{
40 return _mm_popcnt_u64(x); 40 return (int)_mm_popcnt_u64(x);
41} 41}
42 42
43STATIC void 43STATIC void
44pieces(cube_t cube[static 1], uint8_t c[static 8], uint8_t e[static 12]) 44pieces(cube_t cube[NON_NULL], uint8_t c[SIZE(8)], uint8_t e[SIZE(12)])
45{ 45{
46 uint8_t aux[32]; 46 uint8_t aux[32];
47 47
@@ -167,7 +167,7 @@ coord_co(cube_t c)
167} 167}
168 168
169STATIC_INLINE void 169STATIC_INLINE void
170copy_co(cube_t cube[static 1], cube_t co) 170copy_co(cube_t cube[NON_NULL], cube_t co)
171{ 171{
172 cube_t coclean; 172 cube_t coclean;
173 173
@@ -274,19 +274,19 @@ invcoord_esep(uint64_t esep)
274} 274}
275 275
276STATIC_INLINE void 276STATIC_INLINE void
277copy_corners(cube_t dest[static 1], cube_t src) 277copy_corners(cube_t dest[NON_NULL], cube_t src)
278{ 278{
279 *dest = _mm256_blend_epi32(*dest, src, 0x0F); 279 *dest = _mm256_blend_epi32(*dest, src, 0x0F);
280} 280}
281 281
282STATIC_INLINE void 282STATIC_INLINE void
283copy_edges(cube_t dest[static 1], cube_t src) 283copy_edges(cube_t dest[NON_NULL], cube_t src)
284{ 284{
285 *dest = _mm256_blend_epi32(*dest, src, 0xF0); 285 *dest = _mm256_blend_epi32(*dest, src, 0xF0);
286} 286}
287 287
288STATIC_INLINE void 288STATIC_INLINE void
289set_eo(cube_t cube[static 1], uint64_t eo) 289set_eo(cube_t cube[NON_NULL], uint64_t eo)
290{ 290{
291 uint64_t eo12, eotop, eobot; 291 uint64_t eo12, eotop, eobot;
292 __m256i veo; 292 __m256i veo;
diff --git a/src/arch/common.h b/src/arch/common.h
index 2b95fe3..a7c4a3b 100644
--- a/src/arch/common.h
+++ b/src/arch/common.h
@@ -15,7 +15,7 @@
15STATIC_INLINE int popcount_u32(uint32_t); 15STATIC_INLINE int popcount_u32(uint32_t);
16STATIC_INLINE int popcount_u64(uint64_t); 16STATIC_INLINE int popcount_u64(uint64_t);
17 17
18STATIC void pieces(cube_t [static 1], uint8_t [static 8], uint8_t [static 12]); 18STATIC void pieces(cube_t [NON_NULL], uint8_t [SIZE(8)], uint8_t [SIZE(12)]);
19STATIC_INLINE bool equal(cube_t, cube_t); 19STATIC_INLINE bool equal(cube_t, cube_t);
20STATIC_INLINE cube_t invertco(cube_t); 20STATIC_INLINE cube_t invertco(cube_t);
21STATIC_INLINE cube_t compose_edges(cube_t, cube_t); 21STATIC_INLINE cube_t compose_edges(cube_t, cube_t);
@@ -35,12 +35,12 @@ STATIC_INLINE cube_t invcoord_epudsep(uint64_t);
35 35
36STATIC_INLINE bool is_eo_even(cube_t); 36STATIC_INLINE bool is_eo_even(cube_t);
37 37
38STATIC_INLINE void copy_corners(cube_t [static 1], cube_t); 38STATIC_INLINE void copy_corners(cube_t [NON_NULL], cube_t);
39STATIC_INLINE void copy_co(cube_t [static 1], cube_t); 39STATIC_INLINE void copy_co(cube_t [NON_NULL], cube_t);
40STATIC_INLINE void copy_edges(cube_t [static 1], cube_t); 40STATIC_INLINE void copy_edges(cube_t [NON_NULL], cube_t);
41STATIC_INLINE void set_eo(cube_t [static 1], uint64_t); 41STATIC_INLINE void set_eo(cube_t [NON_NULL], uint64_t);
42 42
43STATIC_INLINE void invcoord_esep_array(uint64_t, uint64_t, uint8_t[static 12]); 43STATIC_INLINE void invcoord_esep_array(uint64_t, uint64_t, uint8_t[SIZE(12)]);
44STATIC_INLINE cube_t invcoord_eoesep(uint64_t); 44STATIC_INLINE cube_t invcoord_eoesep(uint64_t);
45STATIC_INLINE uint64_t coord_epudsep_array(const uint8_t [8]); 45STATIC_INLINE uint64_t coord_epudsep_array(const uint8_t [8]);
46STATIC_INLINE void invcoord_epudsep_array(uint64_t, uint8_t [8]); 46STATIC_INLINE void invcoord_epudsep_array(uint64_t, uint8_t [8]);
@@ -53,7 +53,7 @@ STATIC_INLINE uint64_t coord_epe(cube_t);
53STATIC_INLINE cube_t invcoord_epe(uint64_t); 53STATIC_INLINE cube_t invcoord_epe(uint64_t);
54 54
55STATIC_INLINE void 55STATIC_INLINE void
56invcoord_esep_array(uint64_t set1, uint64_t set2, uint8_t mem[static 12]) 56invcoord_esep_array(uint64_t set1, uint64_t set2, uint8_t mem[SIZE(12)])
57{ 57{
58 uint64_t bit1, bit2, i, j, jj, k, l, s, v, w, is1; 58 uint64_t bit1, bit2, i, j, jj, k, l, s, v, w, is1;
59 uint8_t slice[3] = {0}; 59 uint8_t slice[3] = {0};
diff --git a/src/arch/neon.h b/src/arch/neon.h
index 725e589..501b722 100644
--- a/src/arch/neon.h
+++ b/src/arch/neon.h
@@ -59,7 +59,7 @@ popcount_u64(uint64_t x)
59} 59}
60 60
61STATIC void 61STATIC void
62pieces(cube_t cube[static 1], uint8_t c[static 8], uint8_t e[static 12]) 62pieces(cube_t cube[NON_NULL], uint8_t c[SIZE(8)], uint8_t e[SIZE(12)])
63{ 63{
64 // First 8 bytes of the corner vector are copied from the c array 64 // First 8 bytes of the corner vector are copied from the c array
65 vst1_u8(c, cube->corner); 65 vst1_u8(c, cube->corner);
@@ -244,7 +244,7 @@ coord_co(cube_t c)
244} 244}
245 245
246STATIC_INLINE void 246STATIC_INLINE void
247copy_co(cube_t cube[static 1], cube_t co) 247copy_co(cube_t cube[NON_NULL], cube_t co)
248{ 248{
249 uint8x8_t coclean; 249 uint8x8_t coclean;
250 250
@@ -340,19 +340,19 @@ coord_esep(cube_t c)
340} 340}
341 341
342STATIC_INLINE void 342STATIC_INLINE void
343copy_corners(cube_t dst[static 1], cube_t src) 343copy_corners(cube_t dst[NON_NULL], cube_t src)
344{ 344{
345 dst->corner = src.corner; 345 dst->corner = src.corner;
346} 346}
347 347
348STATIC_INLINE void 348STATIC_INLINE void
349copy_edges(cube_t dst[static 1], cube_t src) 349copy_edges(cube_t dst[NON_NULL], cube_t src)
350{ 350{
351 dst->edge = src.edge; 351 dst->edge = src.edge;
352} 352}
353 353
354STATIC_INLINE void 354STATIC_INLINE void
355set_eo(cube_t cube[static 1], uint64_t eo) 355set_eo(cube_t cube[NON_NULL], uint64_t eo)
356{ 356{
357 // Temp array to store the NEON vector 357 // Temp array to store the NEON vector
358 uint8_t mem[16]; 358 uint8_t mem[16];
diff --git a/src/arch/portable.h b/src/arch/portable.h
index 162ed1a..f1491f0 100644
--- a/src/arch/portable.h
+++ b/src/arch/portable.h
@@ -46,7 +46,7 @@ popcount_u64(uint64_t x)
46} 46}
47 47
48STATIC void 48STATIC void
49pieces(cube_t cube[static 1], uint8_t c[static 8], uint8_t e[static 12]) 49pieces(cube_t cube[NON_NULL], uint8_t c[SIZE(8)], uint8_t e[SIZE(12)])
50{ 50{
51 memcpy(c, cube->corner, 8); 51 memcpy(c, cube->corner, 8);
52 memcpy(e, cube->edge, 12); 52 memcpy(e, cube->edge, 12);
@@ -166,7 +166,7 @@ inverse(cube_t cube)
166} 166}
167 167
168STATIC_INLINE void 168STATIC_INLINE void
169copy_co(cube_t cube[static 1], cube_t co) 169copy_co(cube_t cube[NON_NULL], cube_t co)
170{ 170{
171 uint8_t c; 171 uint8_t c;
172 size_t i; 172 size_t i;
@@ -291,19 +291,19 @@ invcoord_esep(uint64_t esep)
291} 291}
292 292
293STATIC_INLINE void 293STATIC_INLINE void
294copy_corners(cube_t dest[static 1], cube_t src) 294copy_corners(cube_t dest[NON_NULL], cube_t src)
295{ 295{
296 memcpy(&dest->corner, src.corner, sizeof(src.corner)); 296 memcpy(&dest->corner, src.corner, sizeof(src.corner));
297} 297}
298 298
299STATIC_INLINE void 299STATIC_INLINE void
300copy_edges(cube_t dest[static 1], cube_t src) 300copy_edges(cube_t dest[NON_NULL], cube_t src)
301{ 301{
302 memcpy(&dest->edge, src.edge, sizeof(src.edge)); 302 memcpy(&dest->edge, src.edge, sizeof(src.edge));
303} 303}
304 304
305STATIC_INLINE void 305STATIC_INLINE void
306set_eo(cube_t cube[static 1], uint64_t eo) 306set_eo(cube_t cube[NON_NULL], uint64_t eo)
307{ 307{
308 uint8_t i, sum, flip; 308 uint8_t i, sum, flip;
309 309
diff --git a/src/core/cube.h b/src/core/cube.h
index 9e79dda..1c21ce1 100644
--- a/src/core/cube.h
+++ b/src/core/cube.h
@@ -1,6 +1,6 @@
1STATIC bool cube_true(cube_t); 1STATIC bool cube_true(cube_t);
2 2
3STATIC cube_t cubefromarray(uint8_t [static 8], uint8_t [static 12]); 3STATIC cube_t cubefromarray(uint8_t [SIZE(8)], uint8_t [SIZE(12)]);
4STATIC bool isconsistent(oriented_cube_t); 4STATIC bool isconsistent(oriented_cube_t);
5STATIC bool issolvable(oriented_cube_t); 5STATIC bool issolvable(oriented_cube_t);
6STATIC bool issolved(oriented_cube_t); 6STATIC bool issolved(oriented_cube_t);
@@ -10,7 +10,7 @@ STATIC void getcube_fix(long long *, long long *,
10STATIC cube_t getcube(uint64_t, uint64_t, uint64_t, uint64_t); 10STATIC cube_t getcube(uint64_t, uint64_t, uint64_t, uint64_t);
11 11
12STATIC oriented_cube_t readcube(const char *); 12STATIC oriented_cube_t readcube(const char *);
13STATIC int64_t writecube(oriented_cube_t, size_t n, char [n]); 13STATIC int64_t writecube(oriented_cube_t, size_t n, char *);
14STATIC uint8_t readco(const char *); 14STATIC uint8_t readco(const char *);
15STATIC uint8_t readcp(const char *); 15STATIC uint8_t readcp(const char *);
16STATIC uint8_t readeo(const char *); 16STATIC uint8_t readeo(const char *);
@@ -29,7 +29,7 @@ cube_true(cube_t cube)
29} 29}
30 30
31STATIC cube_t 31STATIC cube_t
32cubefromarray(uint8_t c[static 8], uint8_t e[static 12]) 32cubefromarray(uint8_t c[SIZE(8)], uint8_t e[SIZE(12)])
33{ 33{
34 return STATIC_CUBE( 34 return STATIC_CUBE(
35 c[0], c[1], c[2], c[3], c[4], c[5], c[6], c[7], 35 c[0], c[1], c[2], c[3], c[4], c[5], c[6], c[7],
@@ -304,7 +304,7 @@ readcube(const char *buf)
304} 304}
305 305
306STATIC int64_t 306STATIC int64_t
307writecube(oriented_cube_t cube, size_t buf_size, char buf[buf_size]) 307writecube(oriented_cube_t cube, size_t buf_size, char *buf)
308{ 308{
309 int i; 309 int i;
310 uint8_t corner[8], edge[12]; 310 uint8_t corner[8], edge[12];
diff --git a/src/core/moves.h b/src/core/moves.h
index 6169c6e..9f1f7cc 100644
--- a/src/core/moves.h
+++ b/src/core/moves.h
@@ -4,15 +4,15 @@
4STATIC uint8_t readmove(char); 4STATIC uint8_t readmove(char);
5STATIC int64_t readmoves(const char *, 5STATIC int64_t readmoves(const char *,
6 size_t, size_t, size_t *, size_t *, uint8_t *, uint8_t *); 6 size_t, size_t, size_t *, size_t *, uint8_t *, uint8_t *);
7STATIC int64_t readmoves_struct(const char *, moves_struct_t [static 1]); 7STATIC int64_t readmoves_struct(const char *, moves_struct_t [NON_NULL]);
8STATIC int64_t countmoves(const char *); 8STATIC int64_t countmoves(const char *);
9STATIC bool moves_struct_equal( 9STATIC bool moves_struct_equal(
10 const moves_struct_t [static 1], const moves_struct_t [static 1]); 10 const moves_struct_t [NON_NULL], const moves_struct_t [NON_NULL]);
11STATIC long long comparemoves(const char *, const char *); 11STATIC long long comparemoves(const char *, const char *);
12STATIC uint8_t readmodifier(char); 12STATIC uint8_t readmodifier(char);
13STATIC int64_t writemoves(size_t, const uint8_t *, size_t, char *); 13STATIC int64_t writemoves(size_t, const uint8_t *, size_t, char *);
14STATIC int64_t writemoves_struct( 14STATIC int64_t writemoves_struct(
15 const moves_struct_t [static 1], size_t, char *); 15 const moves_struct_t [NON_NULL], size_t, char *);
16 16
17STATIC_INLINE bool allowednextmove(uint8_t, uint8_t); 17STATIC_INLINE bool allowednextmove(uint8_t, uint8_t);
18STATIC bool allowedmoves(size_t, const uint8_t *); 18STATIC bool allowedmoves(size_t, const uint8_t *);
@@ -36,9 +36,9 @@ STATIC bool are_lastmoves_singlecw(size_t, const uint8_t*);
36 36
37STATIC int64_t move_variations(const char *, const char *, size_t, char *); 37STATIC int64_t move_variations(const char *, const char *, size_t, char *);
38STATIC int64_t move_variations_lastqt( 38STATIC int64_t move_variations_lastqt(
39 const moves_struct_t [static 1], size_t, char *); 39 const moves_struct_t [NON_NULL], size_t, char *);
40STATIC int64_t move_variations_unniss( 40STATIC int64_t move_variations_unniss(
41 const moves_struct_t [static 1], size_t, char *); 41 const moves_struct_t [NON_NULL], size_t, char *);
42 42
43#define FOREACH_READMOVE(ARG_BUF, ARG_MOVE, ARG_C, ARG_MAX, \ 43#define FOREACH_READMOVE(ARG_BUF, ARG_MOVE, ARG_C, ARG_MAX, \
44 RET_ERROR, ARG_ACTION) \ 44 RET_ERROR, ARG_ACTION) \
@@ -167,7 +167,7 @@ readmoves(
167} 167}
168 168
169STATIC int64_t 169STATIC int64_t
170readmoves_struct(const char *moves, moves_struct_t ret[static 1]) 170readmoves_struct(const char *moves, moves_struct_t ret[NON_NULL])
171{ 171{
172 return readmoves(moves, NISSY_SIZE_MOVES, NISSY_SIZE_MOVES, 172 return readmoves(moves, NISSY_SIZE_MOVES, NISSY_SIZE_MOVES,
173 &ret->nnormal, &ret->ninverse, ret->normal, ret->inverse); 173 &ret->nnormal, &ret->ninverse, ret->normal, ret->inverse);
@@ -190,8 +190,8 @@ countmoves(const char *buf)
190 190
191STATIC bool 191STATIC bool
192moves_struct_equal( 192moves_struct_equal(
193 const moves_struct_t ms1[static 1], 193 const moves_struct_t ms1[NON_NULL],
194 const moves_struct_t ms2[static 1] 194 const moves_struct_t ms2[NON_NULL]
195) 195)
196{ 196{
197 size_t i; 197 size_t i;
@@ -281,7 +281,7 @@ writemoves_error:
281 281
282STATIC int64_t 282STATIC int64_t
283writemoves_struct( 283writemoves_struct(
284 const moves_struct_t moves[static 1], 284 const moves_struct_t moves[NON_NULL],
285 size_t buf_size, 285 size_t buf_size,
286 char *buf 286 char *buf
287) 287)
@@ -612,7 +612,7 @@ move_variations(
612 612
613STATIC int64_t 613STATIC int64_t
614move_variations_lastqt( 614move_variations_lastqt(
615 const moves_struct_t s[static 1], 615 const moves_struct_t s[NON_NULL],
616 size_t result_size, 616 size_t result_size,
617 char *result 617 char *result
618) 618)
@@ -623,10 +623,10 @@ move_variations_lastqt(
623 size_t u; 623 size_t u;
624 moves_struct_t ss; 624 moves_struct_t ss;
625 625
626 in1 = s->nnormal-1; 626 in1 = (uint8_t)(s->nnormal-1);
627 in2 = s->nnormal-2; 627 in2 = (uint8_t)(s->nnormal-2);
628 ii1 = s->ninverse-1; 628 ii1 = (uint8_t)(s->ninverse-1);
629 ii2 = s->ninverse-2; 629 ii2 = (uint8_t)(s->ninverse-2);
630 630
631 n1 = in1 >= 0 ? s->normal[in1] : UINT8_ERROR; 631 n1 = in1 >= 0 ? s->normal[in1] : UINT8_ERROR;
632 n2 = in2 >= 0 ? s->normal[in2] : UINT8_ERROR; 632 n2 = in2 >= 0 ? s->normal[in2] : UINT8_ERROR;
@@ -686,7 +686,7 @@ lastqt_error:
686 686
687STATIC int64_t 687STATIC int64_t
688move_variations_unniss( 688move_variations_unniss(
689 const moves_struct_t s[static 1], 689 const moves_struct_t s[NON_NULL],
690 size_t result_size, 690 size_t result_size,
691 char *result 691 char *result
692) 692)
diff --git a/src/core/transform.h b/src/core/transform.h
index f19c44f..af4634e 100644
--- a/src/core/transform.h
+++ b/src/core/transform.h
@@ -17,9 +17,9 @@
17 invertco(compose(compose(TRANS_CUBE_ ## T, c), \ 17 invertco(compose(compose(TRANS_CUBE_ ## T, c), \
18 TRANS_CUBE_ ## T ## _INVERSE)) 18 TRANS_CUBE_ ## T ## _INVERSE))
19 19
20STATIC uint8_t readtrans(const char [static NISSY_SIZE_TRANSFORMATION]); 20STATIC uint8_t readtrans(const char [SIZE(NISSY_SIZE_TRANSFORMATION)]);
21STATIC uint8_t readrotation(const char [static 2]); 21STATIC uint8_t readrotation(const char [SIZE(2)]);
22STATIC void writetrans(uint8_t, char [static NISSY_SIZE_TRANSFORMATION]); 22STATIC void writetrans(uint8_t, char [SIZE(NISSY_SIZE_TRANSFORMATION)]);
23 23
24STATIC cube_t transform_edges(cube_t, uint8_t); 24STATIC cube_t transform_edges(cube_t, uint8_t);
25STATIC cube_t transform_corners(cube_t, uint8_t); 25STATIC cube_t transform_corners(cube_t, uint8_t);
@@ -29,7 +29,7 @@ STATIC_INLINE uint8_t inverse_trans(uint8_t);
29STATIC uint64_t symmetry_mask(cube_t); 29STATIC uint64_t symmetry_mask(cube_t);
30 30
31STATIC uint8_t 31STATIC uint8_t
32readtrans(const char buf[static NISSY_SIZE_TRANSFORMATION]) 32readtrans(const char buf[SIZE(NISSY_SIZE_TRANSFORMATION)])
33{ 33{
34 uint8_t t; 34 uint8_t t;
35 35
@@ -41,7 +41,7 @@ readtrans(const char buf[static NISSY_SIZE_TRANSFORMATION])
41} 41}
42 42
43STATIC uint8_t 43STATIC uint8_t
44readrotation(const char buf[static 2]) 44readrotation(const char buf[SIZE(2)])
45{ 45{
46 char trans_str[NISSY_SIZE_TRANSFORMATION]; 46 char trans_str[NISSY_SIZE_TRANSFORMATION];
47 47
@@ -53,7 +53,7 @@ readrotation(const char buf[static 2])
53} 53}
54 54
55STATIC void 55STATIC void
56writetrans(uint8_t t, char buf[static NISSY_SIZE_TRANSFORMATION]) 56writetrans(uint8_t t, char buf[SIZE(NISSY_SIZE_TRANSFORMATION)])
57{ 57{
58 if (t >= 48) 58 if (t >= 48)
59 memcpy(buf, "error trans", 11); 59 memcpy(buf, "error trans", 11);
@@ -407,12 +407,13 @@ inverse_trans(uint8_t t)
407STATIC uint64_t 407STATIC uint64_t
408symmetry_mask(cube_t cube) 408symmetry_mask(cube_t cube)
409{ 409{
410 uint64_t t, ret; 410 uint64_t ret;
411 uint8_t t;
411 cube_t transformed; 412 cube_t transformed;
412 413
413 for (t = 0, ret = 0; t < NTRANS; t++) { 414 for (t = 0, ret = 0; t < NTRANS; t++) {
414 transformed = transform(cube, t); 415 transformed = transform(cube, t);
415 ret |= ((uint64_t)equal(cube, transformed)) << t; 416 ret |= ((uint64_t)equal(cube, transformed)) << (uint64_t)t;
416 } 417 }
417 418
418 return ret; 419 return ret;
diff --git a/src/nissy.c b/src/nissy.c
index 594bdc4..0811861 100644
--- a/src/nissy.c
+++ b/src/nissy.c
@@ -12,8 +12,8 @@
12#include "core/core.h" 12#include "core/core.h"
13#include "solvers/solvers.h" 13#include "solvers/solvers.h"
14 14
15STATIC long long write_result(oriented_cube_t, char [static NISSY_SIZE_CUBE]); 15STATIC long long write_result(oriented_cube_t, char [SIZE(NISSY_SIZE_CUBE)]);
16STATIC long long nissy_dataid(const char *, char [static NISSY_SIZE_DATAID]); 16STATIC long long nissy_dataid(const char *, char [SIZE(NISSY_SIZE_DATAID)]);
17STATIC long long nissy_gendata_unsafe( 17STATIC long long nissy_gendata_unsafe(
18 const char *, unsigned long long, unsigned char *); 18 const char *, unsigned long long, unsigned char *);
19 19
@@ -28,7 +28,7 @@ struct {
28}; 28};
29 29
30STATIC long long 30STATIC long long
31write_result(oriented_cube_t cube, char result[static NISSY_SIZE_CUBE]) 31write_result(oriented_cube_t cube, char result[SIZE(NISSY_SIZE_CUBE)])
32{ 32{
33 writecube(cube, NISSY_SIZE_CUBE, result); 33 writecube(cube, NISSY_SIZE_CUBE, result);
34 34
@@ -42,8 +42,8 @@ write_result(oriented_cube_t cube, char result[static NISSY_SIZE_CUBE])
42 42
43long long 43long long
44nissy_inverse( 44nissy_inverse(
45 const char cube[static NISSY_SIZE_CUBE], 45 const char cube[],
46 char result[static NISSY_SIZE_CUBE] 46 char result[]
47) 47)
48{ 48{
49 oriented_cube_t c, res; 49 oriented_cube_t c, res;
@@ -77,9 +77,9 @@ nissy_inverse_error:
77 77
78long long 78long long
79nissy_applymoves( 79nissy_applymoves(
80 const char cube[static NISSY_SIZE_CUBE], 80 const char cube[],
81 const char *moves, 81 const char *moves,
82 char result[static NISSY_SIZE_CUBE] 82 char result[]
83) 83)
84{ 84{
85 oriented_cube_t c, res; 85 oriented_cube_t c, res;
@@ -116,9 +116,9 @@ nissy_applymoves_error:
116 116
117long long 117long long
118nissy_applytrans( 118nissy_applytrans(
119 const char cube[static NISSY_SIZE_CUBE], 119 const char cube[],
120 const char transformation[static NISSY_SIZE_TRANSFORMATION], 120 const char transformation[],
121 char result[static NISSY_SIZE_CUBE] 121 char result[]
122) 122)
123{ 123{
124 oriented_cube_t c, res; 124 oriented_cube_t c, res;
@@ -181,7 +181,7 @@ nissy_getcube(
181 long long co, 181 long long co,
182 long long orient, 182 long long orient,
183 const char *options, 183 const char *options,
184 char result[static NISSY_SIZE_CUBE] 184 char result[]
185) 185)
186{ 186{
187 int i; 187 int i;
@@ -197,7 +197,7 @@ nissy_getcube(
197 getcube_options[i].fix(&ep, &eo, &cp, &co, &orient); 197 getcube_options[i].fix(&ep, &eo, &cp, &co, &orient);
198 198
199 oc.cube = getcube(ep, eo, cp, co); 199 oc.cube = getcube(ep, eo, cp, co);
200 oc.orientation = orient; 200 oc.orientation = (uint8_t)orient;
201 201
202 if (!isconsistent(oc)) { 202 if (!isconsistent(oc)) {
203 LOG("[getcube] Error: could not get cube with ep=%lld, " 203 LOG("[getcube] Error: could not get cube with ep=%lld, "
@@ -210,7 +210,7 @@ nissy_getcube(
210} 210}
211 211
212STATIC long long 212STATIC long long
213nissy_dataid(const char *solver, char dataid[static NISSY_SIZE_DATAID]) 213nissy_dataid(const char *solver, char dataid[SIZE(NISSY_SIZE_DATAID)])
214{ 214{
215 solver_dispatch_t dispatch; 215 solver_dispatch_t dispatch;
216 216
@@ -226,7 +226,7 @@ nissy_dataid(const char *solver, char dataid[static NISSY_SIZE_DATAID])
226long long 226long long
227nissy_solverinfo( 227nissy_solverinfo(
228 const char *solver, 228 const char *solver,
229 char dataid[static NISSY_SIZE_DATAID] 229 char dataid[]
230) 230)
231{ 231{
232 long long err; 232 long long err;
@@ -295,7 +295,7 @@ nissy_checkdata(
295 295
296long long 296long long
297nissy_solve( 297nissy_solve(
298 const char cube[static NISSY_SIZE_CUBE], 298 const char cube[],
299 const char *solver, 299 const char *solver,
300 unsigned nissflag, 300 unsigned nissflag,
301 unsigned minmoves, 301 unsigned minmoves,
@@ -307,7 +307,7 @@ nissy_solve(
307 const unsigned char *data, 307 const unsigned char *data,
308 unsigned sols_size, 308 unsigned sols_size,
309 char *sols, 309 char *sols,
310 long long stats[static NISSY_SIZE_SOLVE_STATS], 310 long long stats[],
311 int (*poll_status)(void *), 311 int (*poll_status)(void *),
312 void *poll_status_data 312 void *poll_status_data
313) 313)
diff --git a/src/nissy.h b/src/nissy.h
index c85072a..c7edf88 100644
--- a/src/nissy.h
+++ b/src/nissy.h
@@ -149,7 +149,9 @@ Compute the inverse of the given cube.
149 149
150Parameters: 150Parameters:
151 cube - The cube to be inverted. 151 cube - The cube to be inverted.
152 Required size: NISSY_SIZE_CUBE.
152 result - The return parameter for the resulting cube. 153 result - The return parameter for the resulting cube.
154 Required size: NISSY_SIZE_CUBE.
153 155
154Return values: 156Return values:
155 NISSY_OK - The cube was inverted succesfully. 157 NISSY_OK - The cube was inverted succesfully.
@@ -161,8 +163,8 @@ Return values:
161*/ 163*/
162long long 164long long
163nissy_inverse( 165nissy_inverse(
164 const char cube[static NISSY_SIZE_CUBE], 166 const char cube[], /* NISSY_SIZE_CUBE */
165 char result[static NISSY_SIZE_CUBE] 167 char result[] /* NISSY_SIZE_CUBE */
166); 168);
167 169
168/* 170/*
@@ -170,8 +172,10 @@ Apply the given sequence of moves on the given cube.
170 172
171Parameters: 173Parameters:
172 cube - The cube to move. 174 cube - The cube to move.
175 Required size: NISSY_SIZE_CUBE.
173 moves - The moves to apply to the cube. Must be a NULL-terminated string. 176 moves - The moves to apply to the cube. Must be a NULL-terminated string.
174 result - The return parameter for the resulting cube. 177 result - The return parameter for the resulting cube.
178 Required size: NISSY_SIZE_CUBE.
175 179
176Return values: 180Return values:
177 NISSY_OK - The moves were applied succesfully. 181 NISSY_OK - The moves were applied succesfully.
@@ -184,9 +188,9 @@ Return values:
184*/ 188*/
185long long 189long long
186nissy_applymoves( 190nissy_applymoves(
187 const char cube[static NISSY_SIZE_CUBE], 191 const char cube[], /* NISSY_SIZE_CUBE */
188 const char *moves, 192 const char *moves,
189 char result[static NISSY_SIZE_CUBE] 193 char result[] /* NISSY_SIZE_CUBE */
190); 194);
191 195
192/* 196/*
@@ -194,8 +198,11 @@ Apply the single given transformation to the given cube.
194 198
195Parameters: 199Parameters:
196 cube - The cube to be transformed. 200 cube - The cube to be transformed.
201 Required size: NISSY_SIZE_CUBE.
197 transformation - The transformation in "(rotation|mirrored) __" format. 202 transformation - The transformation in "(rotation|mirrored) __" format.
203 Required size: NISSY_SIZE_TRANSFORMATION.
198 result - The return parameter for the resulting cube. 204 result - The return parameter for the resulting cube.
205 Required size: NISSY_SIZE_CUBE.
199 206
200Return values: 207Return values:
201 NISSY_OK - The transformation was performed succesfully. 208 NISSY_OK - The transformation was performed succesfully.
@@ -206,9 +213,9 @@ Return values:
206*/ 213*/
207long long 214long long
208nissy_applytrans( 215nissy_applytrans(
209 const char cube[static NISSY_SIZE_CUBE], 216 const char cube[], /* NISSY_SIZE_CUBE */
210 const char transformation[static NISSY_SIZE_TRANSFORMATION], 217 const char transformation[], /* NISSY_SIZE_TRANSFORMATION */
211 char result[static NISSY_SIZE_CUBE] 218 char result[] /* NISSY_SIZE_CUBE */
212); 219);
213 220
214/* 221/*
@@ -256,6 +263,7 @@ Parameters:
256 orient - The orientation of the cube, 0 <= orient < 24 263 orient - The orientation of the cube, 0 <= orient < 24
257 options - Other options. 264 options - Other options.
258 result - The return parameter for the resulting cube. 265 result - The return parameter for the resulting cube.
266 Required size: NISSY_SIZE_CUBE.
259 267
260Return values: 268Return values:
261 NISSY_OK - The cube was generated succesfully. 269 NISSY_OK - The cube was generated succesfully.
@@ -270,7 +278,7 @@ nissy_getcube(
270 long long co, 278 long long co,
271 long long orient, 279 long long orient,
272 const char *options, 280 const char *options,
273 char result[static NISSY_SIZE_CUBE] 281 char result[] /* NISSY_SIZE_CUBE */
274); 282);
275 283
276/* 284/*
@@ -283,6 +291,7 @@ Parameters:
283 solvers may use equivalent data. This identifier can be used 291 solvers may use equivalent data. This identifier can be used
284 e.g. as a filename or database key to save and retrieve the 292 e.g. as a filename or database key to save and retrieve the
285 correct data for each solver, without duplication. 293 correct data for each solver, without duplication.
294 Required size: NISSY_SIZE_DATAID.
286 295
287Return values: 296Return values:
288 NISSY_ERROR_INVALID_SOLVER - The given solver is not known. 297 NISSY_ERROR_INVALID_SOLVER - The given solver is not known.
@@ -293,7 +302,7 @@ Return values:
293long long 302long long
294nissy_solverinfo( 303nissy_solverinfo(
295 const char *solver, 304 const char *solver,
296 char dataid[static NISSY_SIZE_DATAID] 305 char dataid[] /* NISSY_SIZE_DATAID */
297); 306);
298 307
299/* 308/*
@@ -350,6 +359,7 @@ Solve the given cube using the given solver and options.
350 359
351Parameters: 360Parameters:
352 cube - The cube to solver. 361 cube - The cube to solver.
362 Required size: NISSY_SIZE_CUBE.
353 solver - The name of the solver. See doc/solvers.md for a list. 363 solver - The name of the solver. See doc/solvers.md for a list.
354 nissflag - The flags for NISS (linear, inverse, mixed, or 364 nissflag - The flags for NISS (linear, inverse, mixed, or
355 combinations; see the constants at the top of this file). 365 combinations; see the constants at the top of this file).
@@ -370,6 +380,7 @@ Parameters:
370 separated by a '\n' (newline) and a '\0' (NULL character) 380 separated by a '\n' (newline) and a '\0' (NULL character)
371 terminates the list. 381 terminates the list.
372 stats - An array to store some statistics about the solve. 382 stats - An array to store some statistics about the solve.
383 Required size: NISSY_SIZE_SOLVE_STATS.
373 poll_status - A callback function that should return the current 384 poll_status - A callback function that should return the current
374 requested status for the solver (e.g. run, stop, pause, 385 requested status for the solver (e.g. run, stop, pause,
375 resume; see the constants at the top of this file). The 386 resume; see the constants at the top of this file). The
@@ -391,7 +402,7 @@ Return values:
391*/ 402*/
392long long 403long long
393nissy_solve( 404nissy_solve(
394 const char cube[static NISSY_SIZE_CUBE], 405 const char cube[], /* NISSY_SIZE_CUBE */
395 const char *solver, 406 const char *solver,
396 unsigned nissflag, 407 unsigned nissflag,
397 unsigned minmoves, 408 unsigned minmoves,
@@ -403,7 +414,7 @@ nissy_solve(
403 const unsigned char *data, 414 const unsigned char *data,
404 unsigned sols_size, 415 unsigned sols_size,
405 char *sols, 416 char *sols,
406 long long stats[static NISSY_SIZE_SOLVE_STATS], 417 long long stats[], /* NISSY_SIZE_SOLVE_STATS */
407 int (*poll_status)(void *), 418 int (*poll_status)(void *),
408 void *poll_status_data 419 void *poll_status_data
409); 420);
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;
diff --git a/src/solvers/dispatch.h b/src/solvers/dispatch.h
index 3184a28..810247f 100644
--- a/src/solvers/dispatch.h
+++ b/src/solvers/dispatch.h
@@ -1,7 +1,7 @@
1typedef struct { 1typedef struct {
2 const char *solvername; 2 const char *solvername;
3 const char *prefix; 3 const char *prefix;
4 long long (*dataid)(const char *, char [static NISSY_SIZE_DATAID]); 4 long long (*dataid)(const char *, char [SIZE(NISSY_SIZE_DATAID)]);
5 long long (*gendata)( 5 long long (*gendata)(
6 const char *, unsigned long long, unsigned char *); 6 const char *, unsigned long long, unsigned char *);
7 long long (*checkdata)( 7 long long (*checkdata)(
@@ -9,7 +9,7 @@ typedef struct {
9 long long (*solve)(oriented_cube_t, const char *, unsigned, unsigned, 9 long long (*solve)(oriented_cube_t, const char *, unsigned, unsigned,
10 unsigned, unsigned, unsigned, unsigned, unsigned long long, 10 unsigned, unsigned, unsigned, unsigned, unsigned long long,
11 const unsigned char *, unsigned, char *, 11 const unsigned char *, unsigned, char *,
12 long long [static NISSY_SIZE_SOLVE_STATS], 12 long long [SIZE(NISSY_SIZE_SOLVE_STATS)],
13 int (*)(void *), void *); 13 int (*)(void *), void *);
14} solver_dispatch_t; 14} solver_dispatch_t;
15 15
diff --git a/src/solvers/distribution.h b/src/solvers/distribution.h
index 78b9b5e..a996e3db 100644
--- a/src/solvers/distribution.h
+++ b/src/solvers/distribution.h
@@ -12,9 +12,9 @@ typedef struct {
12 12
13STATIC wrapthread_return_t getdistribution_runthread(void *); 13STATIC wrapthread_return_t getdistribution_runthread(void *);
14STATIC void getdistribution(const unsigned char *, 14STATIC void getdistribution(const unsigned char *,
15 uint64_t [static INFO_DISTRIBUTION_LEN], const tableinfo_t [static 1]); 15 uint64_t [SIZE(INFO_DISTRIBUTION_LEN)], const tableinfo_t [NON_NULL]);
16STATIC bool distribution_equal(const uint64_t [static INFO_DISTRIBUTION_LEN], 16STATIC bool distribution_equal(const uint64_t [SIZE(INFO_DISTRIBUTION_LEN)],
17 const uint64_t [static INFO_DISTRIBUTION_LEN], uint8_t); 17 const uint64_t [SIZE(INFO_DISTRIBUTION_LEN)], uint8_t);
18 18
19STATIC wrapthread_return_t 19STATIC wrapthread_return_t
20getdistribution_runthread(void *arg) 20getdistribution_runthread(void *arg)
@@ -39,8 +39,8 @@ getdistribution_runthread(void *arg)
39STATIC void 39STATIC void
40getdistribution( 40getdistribution(
41 const unsigned char *table, 41 const unsigned char *table,
42 uint64_t distr[static INFO_DISTRIBUTION_LEN], 42 uint64_t distr[SIZE(INFO_DISTRIBUTION_LEN)],
43 const tableinfo_t info[static 1] 43 const tableinfo_t info[NON_NULL]
44) { 44) {
45 getdistribution_data_t targ[THREADS]; 45 getdistribution_data_t targ[THREADS];
46 wrapthread_define_var_thread_t(thread[THREADS]); 46 wrapthread_define_var_thread_t(thread[THREADS]);
@@ -80,8 +80,8 @@ getdistribution(
80 80
81STATIC bool 81STATIC bool
82distribution_equal( 82distribution_equal(
83 const uint64_t expected[static INFO_DISTRIBUTION_LEN], 83 const uint64_t expected[SIZE(INFO_DISTRIBUTION_LEN)],
84 const uint64_t actual[static INFO_DISTRIBUTION_LEN], 84 const uint64_t actual[SIZE(INFO_DISTRIBUTION_LEN)],
85 uint8_t maxvalue 85 uint8_t maxvalue
86) 86)
87{ 87{
diff --git a/src/solvers/h48/coordinate.h b/src/solvers/h48/coordinate.h
index a7f0087..695efc3 100644
--- a/src/solvers/h48/coordinate.h
+++ b/src/solvers/h48/coordinate.h
@@ -1,13 +1,13 @@
1STATIC_INLINE uint64_t coord_h48( 1STATIC_INLINE uint64_t coord_h48(
2 cube_t, const uint32_t [static COCSEP_TABLESIZE], uint8_t); 2 cube_t, const uint32_t [SIZE(COCSEP_TABLESIZE)], uint8_t);
3STATIC_INLINE uint64_t coord_h48_edges(cube_t, uint64_t, uint8_t, uint8_t); 3STATIC_INLINE uint64_t coord_h48_edges(cube_t, uint64_t, uint8_t, uint8_t);
4STATIC_INLINE cube_t invcoord_h48( 4STATIC_INLINE cube_t invcoord_h48(
5 uint64_t, const cube_t [static COCSEP_CLASSES], uint8_t); 5 uint64_t, const cube_t [SIZE(COCSEP_CLASSES)], uint8_t);
6 6
7STATIC_INLINE uint64_t 7STATIC_INLINE uint64_t
8coord_h48( 8coord_h48(
9 cube_t c, 9 cube_t c,
10 const uint32_t cocsepdata[static COCSEP_TABLESIZE], 10 const uint32_t cocsepdata[SIZE(COCSEP_TABLESIZE)],
11 uint8_t h 11 uint8_t h
12) 12)
13{ 13{
@@ -47,7 +47,7 @@ returned cube is a transformed cube of one that gives the correct value.
47STATIC_INLINE cube_t 47STATIC_INLINE cube_t
48invcoord_h48( 48invcoord_h48(
49 uint64_t i, 49 uint64_t i,
50 const cube_t crep[static COCSEP_CLASSES], 50 const cube_t crep[SIZE(COCSEP_CLASSES)],
51 uint8_t h 51 uint8_t h
52) 52)
53{ 53{
diff --git a/src/solvers/h48/distribution_h48.h b/src/solvers/h48/distribution_h48.h
index 80c946e..2cb50aa 100644
--- a/src/solvers/h48/distribution_h48.h
+++ b/src/solvers/h48/distribution_h48.h
@@ -6,7 +6,7 @@ to have some duplication than to make these functions needlessly generic.
6 6
7STATIC wrapthread_return_t getdistribution_h48_runthread(void *); 7STATIC wrapthread_return_t getdistribution_h48_runthread(void *);
8STATIC void getdistribution_h48(const unsigned char *, 8STATIC void getdistribution_h48(const unsigned char *,
9 uint64_t [static INFO_DISTRIBUTION_LEN], const tableinfo_t [static 1]); 9 uint64_t [SIZE(INFO_DISTRIBUTION_LEN)], const tableinfo_t [NON_NULL]);
10 10
11STATIC wrapthread_return_t 11STATIC wrapthread_return_t
12getdistribution_h48_runthread(void *arg) 12getdistribution_h48_runthread(void *arg)
@@ -39,8 +39,8 @@ getdistribution_h48_runthread(void *arg)
39STATIC void 39STATIC void
40getdistribution_h48( 40getdistribution_h48(
41 const unsigned char *table, 41 const unsigned char *table,
42 uint64_t distr[static INFO_DISTRIBUTION_LEN], 42 uint64_t distr[SIZE(INFO_DISTRIBUTION_LEN)],
43 const tableinfo_t info[static 1] 43 const tableinfo_t info[NON_NULL]
44) { 44) {
45 getdistribution_data_t targ[THREADS]; 45 getdistribution_data_t targ[THREADS];
46 wrapthread_define_var_thread_t(thread[THREADS]); 46 wrapthread_define_var_thread_t(thread[THREADS]);
diff --git a/src/solvers/h48/gendata_cocsep.h b/src/solvers/h48/gendata_cocsep.h
index db7ac95..f83207b 100644
--- a/src/solvers/h48/gendata_cocsep.h
+++ b/src/solvers/h48/gendata_cocsep.h
@@ -1,13 +1,13 @@
1STATIC size_t gendata_cocsep(unsigned char *, uint64_t *, cube_t *); 1STATIC size_t gendata_cocsep(unsigned char *, uint64_t *, cube_t *);
2STATIC uint32_t gendata_cocsep_dfs(cocsep_dfs_arg_t [static 1]); 2STATIC uint32_t gendata_cocsep_dfs(cocsep_dfs_arg_t [NON_NULL]);
3 3
4STATIC_INLINE bool gendata_cocsep_get_visited( 4STATIC_INLINE bool gendata_cocsep_get_visited(
5 const uint8_t [static COCSEP_VISITEDSIZE], uint64_t); 5 const uint8_t [SIZE(COCSEP_VISITEDSIZE)], uint64_t);
6STATIC_INLINE void gendata_cocsep_set_visited( 6STATIC_INLINE void gendata_cocsep_set_visited(
7 uint8_t [static COCSEP_VISITEDSIZE], uint64_t); 7 uint8_t [SIZE(COCSEP_VISITEDSIZE)], uint64_t);
8 8
9STATIC_INLINE int8_t get_h48_cdata( 9STATIC_INLINE int8_t get_h48_cdata(
10 cube_t, const uint32_t [static COCSEP_TABLESIZE], uint32_t *); 10 cube_t, const uint32_t [SIZE(COCSEP_TABLESIZE)], uint32_t *);
11 11
12STATIC size_t 12STATIC size_t
13gendata_cocsep( 13gendata_cocsep(
@@ -79,11 +79,10 @@ gendata_cocsep_return_size:
79} 79}
80 80
81STATIC uint32_t 81STATIC uint32_t
82gendata_cocsep_dfs(cocsep_dfs_arg_t arg[static 1]) 82gendata_cocsep_dfs(cocsep_dfs_arg_t arg[NON_NULL])
83{ 83{
84 uint8_t m; 84 uint8_t m, t;
85 uint32_t cc, class, ttrep, depth, olddepth, tinv; 85 uint32_t cc, class, ttrep, depth, olddepth, tinv;
86 uint64_t t;
87 uint64_t i, j; 86 uint64_t i, j;
88 cube_t d; 87 cube_t d;
89 cocsep_dfs_arg_t nextarg; 88 cocsep_dfs_arg_t nextarg;
@@ -105,7 +104,7 @@ gendata_cocsep_dfs(cocsep_dfs_arg_t arg[static 1])
105 d = transform_corners(arg->cube, t); 104 d = transform_corners(arg->cube, t);
106 j = coord_cocsep(d); 105 j = coord_cocsep(d);
107 if (i == j && arg->selfsim != NULL) 106 if (i == j && arg->selfsim != NULL)
108 arg->selfsim[*arg->n] |= UINT64_C(1) << t; 107 arg->selfsim[*arg->n] |= UINT64_C(1) << (uint64_t)t;
109 if (COCLASS(arg->buf32[j]) != UINT32_C(0xFFFF)) 108 if (COCLASS(arg->buf32[j]) != UINT32_C(0xFFFF))
110 continue; 109 continue;
111 gendata_cocsep_set_visited(arg->visited, j); 110 gendata_cocsep_set_visited(arg->visited, j);
@@ -135,7 +134,7 @@ gendata_cocsep_dfs(cocsep_dfs_arg_t arg[static 1])
135 134
136STATIC_INLINE bool 135STATIC_INLINE bool
137gendata_cocsep_get_visited( 136gendata_cocsep_get_visited(
138 const uint8_t a[static COCSEP_VISITEDSIZE], 137 const uint8_t a[SIZE(COCSEP_VISITEDSIZE)],
139 uint64_t i 138 uint64_t i
140) 139)
141{ 140{
@@ -144,7 +143,7 @@ gendata_cocsep_get_visited(
144 143
145STATIC_INLINE void 144STATIC_INLINE void
146gendata_cocsep_set_visited( 145gendata_cocsep_set_visited(
147 uint8_t a[static COCSEP_VISITEDSIZE], 146 uint8_t a[SIZE(COCSEP_VISITEDSIZE)],
148 uint64_t i 147 uint64_t i
149) 148)
150{ 149{
@@ -154,7 +153,7 @@ gendata_cocsep_set_visited(
154STATIC_INLINE int8_t 153STATIC_INLINE int8_t
155get_h48_cdata( 154get_h48_cdata(
156 cube_t cube, 155 cube_t cube,
157 const uint32_t cocsepdata[static COCSEP_TABLESIZE], 156 const uint32_t cocsepdata[SIZE(COCSEP_TABLESIZE)],
158 uint32_t *cdata 157 uint32_t *cdata
159) 158)
160{ 159{
diff --git a/src/solvers/h48/gendata_eoesep.h b/src/solvers/h48/gendata_eoesep.h
index e9a2794..81bbd43 100644
--- a/src/solvers/h48/gendata_eoesep.h
+++ b/src/solvers/h48/gendata_eoesep.h
@@ -1,25 +1,25 @@
1STATIC uint64_t coord_eoesep_sym(cube_t, const uint32_t [static ESEP_MAX]); 1STATIC uint64_t coord_eoesep_sym(cube_t, const uint32_t [SIZE(ESEP_MAX)]);
2STATIC size_t gendata_esep_classes( 2STATIC size_t gendata_esep_classes(
3 uint32_t [static ESEP_MAX], uint16_t [static ESEP_CLASSES]); 3 uint32_t [SIZE(ESEP_MAX)], uint16_t [SIZE(ESEP_CLASSES)]);
4STATIC size_t gendata_eoesep(unsigned char *, uint8_t); 4STATIC size_t gendata_eoesep(unsigned char *, uint8_t);
5STATIC uint32_t gendata_eoesep_bfs(uint8_t, uint8_t [static EOESEP_BUF], 5STATIC uint32_t gendata_eoesep_bfs(uint8_t, uint8_t [SIZE(EOESEP_BUF)],
6 uint32_t [static ESEP_MAX], uint16_t [static ESEP_CLASSES]); 6 uint32_t [SIZE(ESEP_MAX)], uint16_t [SIZE(ESEP_CLASSES)]);
7STATIC uint32_t gendata_eoesep_fromnew(uint8_t, uint8_t [static EOESEP_BUF], 7STATIC uint32_t gendata_eoesep_fromnew(uint8_t, uint8_t [SIZE(EOESEP_BUF)],
8 uint32_t [static ESEP_MAX], uint16_t [static ESEP_CLASSES]); 8 uint32_t [SIZE(ESEP_MAX)], uint16_t [SIZE(ESEP_CLASSES)]);
9STATIC uint32_t gendata_eoesep_fromdone(uint8_t, uint8_t [static EOESEP_BUF], 9STATIC uint32_t gendata_eoesep_fromdone(uint8_t, uint8_t [SIZE(EOESEP_BUF)],
10 uint32_t [static ESEP_MAX], uint16_t [static ESEP_CLASSES]); 10 uint32_t [SIZE(ESEP_MAX)], uint16_t [SIZE(ESEP_CLASSES)]);
11STATIC uint32_t gendata_eoesep_marksim(uint64_t, uint8_t, 11STATIC uint32_t gendata_eoesep_marksim(uint64_t, uint8_t,
12 uint8_t [static EOESEP_BUF], uint32_t [static ESEP_MAX]); 12 uint8_t [SIZE(EOESEP_BUF)], uint32_t [SIZE(ESEP_MAX)]);
13STATIC bool gendata_eoesep_next(cube_t, uint8_t, 13STATIC bool gendata_eoesep_next(cube_t, uint8_t,
14 uint8_t [static EOESEP_BUF], uint32_t [static ESEP_MAX]); 14 uint8_t [SIZE(EOESEP_BUF)], uint32_t [SIZE(ESEP_MAX)]);
15STATIC uint8_t get_eoesep_pval( 15STATIC uint8_t get_eoesep_pval(
16 const uint8_t [static DIV_ROUND_UP(EOESEP_TABLESIZE, 2)], uint64_t); 16 const uint8_t [SIZE(DIV_ROUND_UP(EOESEP_TABLESIZE, 2))], uint64_t);
17STATIC uint8_t get_eoesep_pval_cube(const unsigned char *, cube_t); 17STATIC uint8_t get_eoesep_pval_cube(const unsigned char *, cube_t);
18STATIC void set_eoesep_pval( 18STATIC void set_eoesep_pval(
19 uint8_t [static DIV_ROUND_UP(EOESEP_TABLESIZE, 2)], uint64_t, uint8_t); 19 uint8_t [SIZE(DIV_ROUND_UP(EOESEP_TABLESIZE, 2))], uint64_t, uint8_t);
20 20
21STATIC uint64_t 21STATIC uint64_t
22coord_eoesep_sym(cube_t c, const uint32_t esep_classes[static ESEP_MAX]) 22coord_eoesep_sym(cube_t c, const uint32_t esep_classes[SIZE(ESEP_MAX)])
23{ 23{
24 uint8_t ttrep; 24 uint8_t ttrep;
25 uint32_t edata, class; 25 uint32_t edata, class;
@@ -36,8 +36,8 @@ coord_eoesep_sym(cube_t c, const uint32_t esep_classes[static ESEP_MAX])
36 36
37STATIC size_t 37STATIC size_t
38gendata_esep_classes( 38gendata_esep_classes(
39 uint32_t esep_classes[static ESEP_MAX], 39 uint32_t esep_classes[SIZE(ESEP_MAX)],
40 uint16_t rep[static ESEP_CLASSES] 40 uint16_t rep[SIZE(ESEP_CLASSES)]
41) 41)
42{ 42{
43 bool visited[ESEP_MAX]; 43 bool visited[ESEP_MAX];
@@ -59,7 +59,7 @@ gendata_esep_classes(
59 esep_classes[j] = cl | ti; 59 esep_classes[j] = cl | ti;
60 visited[j] = true; 60 visited[j] = true;
61 } 61 }
62 rep[class] = i; 62 rep[class] = (uint16_t)i;
63 class++; 63 class++;
64 } 64 }
65 65
@@ -121,8 +121,8 @@ STATIC uint32_t
121gendata_eoesep_bfs( 121gendata_eoesep_bfs(
122 uint8_t d, 122 uint8_t d,
123 uint8_t buf8[EOESEP_BUF], 123 uint8_t buf8[EOESEP_BUF],
124 uint32_t esep_classes[static ESEP_MAX], 124 uint32_t esep_classes[SIZE(ESEP_MAX)],
125 uint16_t rep[static ESEP_CLASSES] 125 uint16_t rep[SIZE(ESEP_CLASSES)]
126) 126)
127{ 127{
128 if (d < 9) 128 if (d < 9)
@@ -135,12 +135,13 @@ STATIC uint32_t
135gendata_eoesep_fromdone( 135gendata_eoesep_fromdone(
136 uint8_t d, 136 uint8_t d,
137 uint8_t buf8[EOESEP_BUF], 137 uint8_t buf8[EOESEP_BUF],
138 uint32_t esep_classes[static ESEP_MAX], 138 uint32_t esep_classes[SIZE(ESEP_MAX)],
139 uint16_t rep[static ESEP_CLASSES] 139 uint16_t rep[SIZE(ESEP_CLASSES)]
140) 140)
141{ 141{
142 uint8_t pval; 142 uint8_t pval;
143 uint64_t i, esep, eo, coord, done; 143 uint32_t done;
144 uint64_t i, esep, eo, coord;
144 145
145 done = 0; 146 done = 0;
146 for (i = 0; i < ESEP_CLASSES; i++) { 147 for (i = 0; i < ESEP_CLASSES; i++) {
@@ -164,12 +165,13 @@ STATIC uint32_t
164gendata_eoesep_fromnew( 165gendata_eoesep_fromnew(
165 uint8_t d, 166 uint8_t d,
166 uint8_t buf8[EOESEP_BUF], 167 uint8_t buf8[EOESEP_BUF],
167 uint32_t esep_classes[static ESEP_MAX], 168 uint32_t esep_classes[SIZE(ESEP_MAX)],
168 uint16_t rep[static ESEP_CLASSES] 169 uint16_t rep[SIZE(ESEP_CLASSES)]
169) 170)
170{ 171{
171 uint8_t pval; 172 uint8_t pval;
172 uint64_t i, esep, eo, coord, done; 173 uint32_t done;
174 uint64_t i, esep, eo, coord;
173 cube_t c; 175 cube_t c;
174 176
175 done = 0; 177 done = 0;
@@ -196,8 +198,8 @@ STATIC uint32_t
196gendata_eoesep_marksim( 198gendata_eoesep_marksim(
197 uint64_t i, 199 uint64_t i,
198 uint8_t d, 200 uint8_t d,
199 uint8_t buf8[static EOESEP_BUF], 201 uint8_t buf8[SIZE(EOESEP_BUF)],
200 uint32_t esep_classes[static ESEP_MAX] 202 uint32_t esep_classes[SIZE(ESEP_MAX)]
201) 203)
202{ 204{
203 uint8_t t, m, pval; 205 uint8_t t, m, pval;
@@ -227,8 +229,8 @@ STATIC bool
227gendata_eoesep_next( 229gendata_eoesep_next(
228 cube_t c, 230 cube_t c,
229 uint8_t d, 231 uint8_t d,
230 uint8_t buf8[static EOESEP_BUF], 232 uint8_t buf8[SIZE(EOESEP_BUF)],
231 uint32_t esep_classes[static ESEP_MAX] 233 uint32_t esep_classes[SIZE(ESEP_MAX)]
232) 234)
233{ 235{
234 uint8_t m, t, pval; 236 uint8_t m, t, pval;
@@ -251,7 +253,7 @@ gendata_eoesep_next(
251 253
252STATIC uint8_t 254STATIC uint8_t
253get_eoesep_pval( 255get_eoesep_pval(
254 const uint8_t table[static DIV_ROUND_UP(EOESEP_TABLESIZE, 2)], 256 const uint8_t table[SIZE(DIV_ROUND_UP(EOESEP_TABLESIZE, 2))],
255 uint64_t i 257 uint64_t i
256) 258)
257{ 259{
@@ -270,7 +272,7 @@ get_eoesep_pval_cube(const unsigned char *data, cube_t c)
270 272
271STATIC void 273STATIC void
272set_eoesep_pval( 274set_eoesep_pval(
273 uint8_t table[static DIV_ROUND_UP(EOESEP_TABLESIZE, 2)], 275 uint8_t table[SIZE(DIV_ROUND_UP(EOESEP_TABLESIZE, 2))],
274 uint64_t i, 276 uint64_t i,
275 uint8_t val 277 uint8_t val
276) 278)
diff --git a/src/solvers/h48/gendata_h48.h b/src/solvers/h48/gendata_h48.h
index b37bcfb..53b1fad 100644
--- a/src/solvers/h48/gendata_h48.h
+++ b/src/solvers/h48/gendata_h48.h
@@ -1,15 +1,15 @@
1STATIC long long gendata_h48_dispatch( 1STATIC long long gendata_h48_dispatch(
2 const char *, unsigned long long, unsigned char *); 2 const char *, unsigned long long, unsigned char *);
3STATIC uint64_t gendata_h48short(gendata_h48short_arg_t [static 1]); 3STATIC uint64_t gendata_h48short(gendata_h48short_arg_t [NON_NULL]);
4STATIC int64_t gendata_h48(gendata_h48_arg_t [static 1]); 4STATIC int64_t gendata_h48(gendata_h48_arg_t [NON_NULL]);
5STATIC void gendata_h48_maintable(gendata_h48_arg_t [static 1]); 5STATIC void gendata_h48_maintable(gendata_h48_arg_t [NON_NULL]);
6STATIC wrapthread_return_t gendata_h48_runthread(void *); 6STATIC wrapthread_return_t gendata_h48_runthread(void *);
7 7
8STATIC_INLINE void gendata_h48_mark(gendata_h48_mark_t [static 1]); 8STATIC_INLINE void gendata_h48_mark(gendata_h48_mark_t [NON_NULL]);
9STATIC_INLINE bool gendata_h48_dfs_stop( 9STATIC_INLINE bool gendata_h48_dfs_stop(
10 cube_t, int8_t, h48_dfs_arg_t [static 1]); 10 cube_t, int8_t, h48_dfs_arg_t [NON_NULL]);
11STATIC void gendata_h48_dfs(h48_dfs_arg_t [static 1]); 11STATIC void gendata_h48_dfs(h48_dfs_arg_t [NON_NULL]);
12STATIC tableinfo_t makeinfo_h48(gendata_h48_arg_t [static 1]); 12STATIC tableinfo_t makeinfo_h48(gendata_h48_arg_t [NON_NULL]);
13 13
14STATIC const uint32_t *get_cocsepdata_constptr(const unsigned char *); 14STATIC const uint32_t *get_cocsepdata_constptr(const unsigned char *);
15STATIC const unsigned char *get_h48data_constptr(const unsigned char *); 15STATIC const unsigned char *get_h48data_constptr(const unsigned char *);
@@ -19,7 +19,7 @@ STATIC_INLINE void set_h48_pval(unsigned char *, uint64_t, uint8_t);
19STATIC_INLINE uint8_t get_h48_pvalmin(const unsigned char *, uint64_t); 19STATIC_INLINE uint8_t get_h48_pvalmin(const unsigned char *, uint64_t);
20STATIC_INLINE void set_h48_pvalmin(unsigned char *, uint64_t, uint8_t); 20STATIC_INLINE void set_h48_pvalmin(unsigned char *, uint64_t, uint8_t);
21STATIC_INLINE uint8_t get_h48_pval_and_min( 21STATIC_INLINE uint8_t get_h48_pval_and_min(
22 const unsigned char *, uint64_t, uint8_t [static 1]); 22 const unsigned char *, uint64_t, uint8_t [NON_NULL]);
23 23
24STATIC long long 24STATIC long long
25gendata_h48_dispatch( 25gendata_h48_dispatch(
@@ -43,7 +43,7 @@ gendata_h48_dispatch(
43} 43}
44 44
45STATIC uint64_t 45STATIC uint64_t
46gendata_h48short(gendata_h48short_arg_t arg[static 1]) 46gendata_h48short(gendata_h48short_arg_t arg[NON_NULL])
47{ 47{
48 uint8_t i, m; 48 uint8_t i, m;
49 uint64_t coord; 49 uint64_t coord;
@@ -77,7 +77,7 @@ gendata_h48short(gendata_h48short_arg_t arg[static 1])
77} 77}
78 78
79STATIC int64_t 79STATIC int64_t
80gendata_h48(gendata_h48_arg_t arg[static 1]) 80gendata_h48(gendata_h48_arg_t arg[NON_NULL])
81{ 81{
82 uint64_t size, cocsepsize, h48size, eoesepsize; 82 uint64_t size, cocsepsize, h48size, eoesepsize;
83 long long r; 83 long long r;
@@ -149,7 +149,7 @@ gendata_h48(gendata_h48_arg_t arg[static 1])
149} 149}
150 150
151STATIC void 151STATIC void
152gendata_h48_maintable(gendata_h48_arg_t arg[static 1]) 152gendata_h48_maintable(gendata_h48_arg_t arg[NON_NULL])
153{ 153{
154 /* 154 /*
155 * A good base value for the h48 tables have few positions with value 155 * A good base value for the h48 tables have few positions with value
@@ -264,7 +264,7 @@ gendata_h48_maintable(gendata_h48_arg_t arg[static 1])
264 velocity = count; 264 velocity = count;
265 265
266 /* We plan to log 10 times */ 266 /* We plan to log 10 times */
267 sleeptime = (100*(nshort-velocity)) / velocity; 267 sleeptime = (int)((100*(nshort-velocity)) / velocity);
268 268
269 done = count; 269 done = count;
270 while (nshort - done > (velocity * sleeptime) / 1000) { 270 while (nshort - done > (velocity * sleeptime) / 1000) {
@@ -320,7 +320,7 @@ gendata_h48_runthread(void *arg)
320 mutex = H48_LINE(coord) % CHUNKS; 320 mutex = H48_LINE(coord) % CHUNKS;
321 wrapthread_mutex_lock(dfsarg->table_mutex[mutex]); 321 wrapthread_mutex_lock(dfsarg->table_mutex[mutex]);
322 set_h48_pval(dfsarg->table, coordext, 0); 322 set_h48_pval(dfsarg->table, coordext, 0);
323 set_h48_pvalmin(dfsarg->table, coordmin, kv.val); 323 set_h48_pvalmin(dfsarg->table, coordmin, (uint8_t)kv.val);
324 wrapthread_mutex_unlock(dfsarg->table_mutex[mutex]); 324 wrapthread_mutex_unlock(dfsarg->table_mutex[mutex]);
325 } else { 325 } else {
326 dfsarg->cube = invcoord_h48(kv.key, dfsarg->crep, 11); 326 dfsarg->cube = invcoord_h48(kv.key, dfsarg->crep, 11);
@@ -332,7 +332,7 @@ gendata_h48_runthread(void *arg)
332} 332}
333 333
334STATIC void 334STATIC void
335gendata_h48_dfs(h48_dfs_arg_t arg[static 1]) 335gendata_h48_dfs(h48_dfs_arg_t arg[NON_NULL])
336{ 336{
337 int8_t d; 337 int8_t d;
338 uint8_t m[4]; 338 uint8_t m[4];
@@ -411,7 +411,7 @@ gendata_h48_dfs(h48_dfs_arg_t arg[static 1])
411} 411}
412 412
413STATIC_INLINE void 413STATIC_INLINE void
414gendata_h48_mark(gendata_h48_mark_t arg[static 1]) 414gendata_h48_mark(gendata_h48_mark_t arg[NON_NULL])
415{ 415{
416 uint8_t oldval, newval, v; 416 uint8_t oldval, newval, v;
417 uint64_t coord, coordext, coordmin; 417 uint64_t coord, coordext, coordmin;
@@ -435,7 +435,7 @@ gendata_h48_mark(gendata_h48_mark_t arg[static 1])
435} 435}
436 436
437STATIC_INLINE bool 437STATIC_INLINE bool
438gendata_h48_dfs_stop(cube_t cube, int8_t d, h48_dfs_arg_t arg[static 1]) 438gendata_h48_dfs_stop(cube_t cube, int8_t d, h48_dfs_arg_t arg[NON_NULL])
439{ 439{
440 uint64_t val; 440 uint64_t val;
441 uint64_t coord, coordext; 441 uint64_t coord, coordext;
@@ -463,7 +463,7 @@ gendata_h48_dfs_stop(cube_t cube, int8_t d, h48_dfs_arg_t arg[static 1])
463} 463}
464 464
465STATIC tableinfo_t 465STATIC tableinfo_t
466makeinfo_h48(gendata_h48_arg_t arg[static 1]) 466makeinfo_h48(gendata_h48_arg_t arg[NON_NULL])
467{ 467{
468 tableinfo_t info; 468 tableinfo_t info;
469 469
@@ -533,7 +533,7 @@ STATIC_INLINE uint8_t
533get_h48_pval_and_min( 533get_h48_pval_and_min(
534 const unsigned char *table, 534 const unsigned char *table,
535 uint64_t coord_noext, 535 uint64_t coord_noext,
536 uint8_t pval_min[static 1] 536 uint8_t pval_min[NON_NULL]
537) 537)
538{ 538{
539 uint64_t iext, imin; 539 uint64_t iext, imin;
diff --git a/src/solvers/h48/map.h b/src/solvers/h48/map.h
index b603ee3..c9cfb06 100644
--- a/src/solvers/h48/map.h
+++ b/src/solvers/h48/map.h
@@ -1,13 +1,13 @@
1STATIC void h48map_create(h48map_t [static 1], uint64_t, uint64_t); 1STATIC void h48map_create(h48map_t [NON_NULL], uint64_t, uint64_t);
2STATIC void h48map_clear(h48map_t [static 1]); 2STATIC void h48map_clear(h48map_t [NON_NULL]);
3STATIC void h48map_destroy(h48map_t [static 1]); 3STATIC void h48map_destroy(h48map_t [NON_NULL]);
4STATIC uint64_t h48map_lookup(h48map_t [static 1], uint64_t); 4STATIC uint64_t h48map_lookup(h48map_t [NON_NULL], uint64_t);
5STATIC void h48map_insertmin(h48map_t [static 1], uint64_t, uint64_t); 5STATIC void h48map_insertmin(h48map_t [NON_NULL], uint64_t, uint64_t);
6STATIC uint64_t h48map_value(h48map_t [static 1], uint64_t); 6STATIC uint64_t h48map_value(h48map_t [NON_NULL], uint64_t);
7STATIC kvpair_t h48map_nextkvpair(h48map_t [static 1], uint64_t [static 1]); 7STATIC kvpair_t h48map_nextkvpair(h48map_t [NON_NULL], uint64_t [NON_NULL]);
8 8
9STATIC void 9STATIC void
10h48map_create(h48map_t map[static 1], uint64_t capacity, uint64_t randomizer) 10h48map_create(h48map_t map[NON_NULL], uint64_t capacity, uint64_t randomizer)
11{ 11{
12 map->capacity = capacity; 12 map->capacity = capacity;
13 map->randomizer = randomizer; 13 map->randomizer = randomizer;
@@ -17,20 +17,20 @@ h48map_create(h48map_t map[static 1], uint64_t capacity, uint64_t randomizer)
17} 17}
18 18
19STATIC void 19STATIC void
20h48map_clear(h48map_t map[static 1]) 20h48map_clear(h48map_t map[NON_NULL])
21{ 21{
22 memset(map->table, 0xFF, map->capacity * sizeof(uint64_t)); 22 memset(map->table, 0xFF, map->capacity * sizeof(uint64_t));
23 map->n = 0; 23 map->n = 0;
24} 24}
25 25
26STATIC void 26STATIC void
27h48map_destroy(h48map_t map[static 1]) 27h48map_destroy(h48map_t map[NON_NULL])
28{ 28{
29 free(map->table); 29 free(map->table);
30} 30}
31 31
32STATIC_INLINE uint64_t 32STATIC_INLINE uint64_t
33h48map_lookup(h48map_t map[static 1], uint64_t x) 33h48map_lookup(h48map_t map[NON_NULL], uint64_t x)
34{ 34{
35 uint64_t hash, i; 35 uint64_t hash, i;
36 36
@@ -44,7 +44,7 @@ h48map_lookup(h48map_t map[static 1], uint64_t x)
44} 44}
45 45
46STATIC_INLINE void 46STATIC_INLINE void
47h48map_insertmin(h48map_t map[static 1], uint64_t key, uint64_t val) 47h48map_insertmin(h48map_t map[NON_NULL], uint64_t key, uint64_t val)
48{ 48{
49 uint64_t i, oldval, min; 49 uint64_t i, oldval, min;
50 50
@@ -57,13 +57,13 @@ h48map_insertmin(h48map_t map[static 1], uint64_t key, uint64_t val)
57} 57}
58 58
59STATIC_INLINE uint64_t 59STATIC_INLINE uint64_t
60h48map_value(h48map_t map[static 1], uint64_t key) 60h48map_value(h48map_t map[NON_NULL], uint64_t key)
61{ 61{
62 return map->table[h48map_lookup(map, key)] >> MAP_KEYSHIFT; 62 return map->table[h48map_lookup(map, key)] >> MAP_KEYSHIFT;
63} 63}
64 64
65STATIC kvpair_t 65STATIC kvpair_t
66h48map_nextkvpair(h48map_t map[static 1], uint64_t p[static 1]) 66h48map_nextkvpair(h48map_t map[NON_NULL], uint64_t p[NON_NULL])
67{ 67{
68 kvpair_t kv; 68 kvpair_t kv;
69 uint64_t pair; 69 uint64_t pair;
diff --git a/src/solvers/h48/solve.h b/src/solvers/h48/solve.h
index 4fd0aea..ebc5208 100644
--- a/src/solvers/h48/solve.h
+++ b/src/solvers/h48/solve.h
@@ -64,27 +64,27 @@ typedef struct {
64STATIC long long solve_h48_dispatch(oriented_cube_t, const char *, unsigned, 64STATIC long long solve_h48_dispatch(oriented_cube_t, const char *, unsigned,
65 unsigned, unsigned, unsigned, unsigned, unsigned, unsigned long long, 65 unsigned, unsigned, unsigned, unsigned, unsigned, unsigned long long,
66 const unsigned char *, unsigned, char *, 66 const unsigned char *, unsigned, char *,
67 long long [static NISSY_SIZE_SOLVE_STATS], int (*)(void *), void *); 67 long long [SIZE(NISSY_SIZE_SOLVE_STATS)], int (*)(void *), void *);
68STATIC_INLINE void h48_prune_pipeline(dfsarg_solve_h48_t [static 1], 68STATIC_INLINE void h48_prune_pipeline(dfsarg_solve_h48_t [NON_NULL],
69 h48_prune_t [static NMOVES], uint8_t, bool); 69 h48_prune_t [SIZE(NMOVES)], uint8_t, bool);
70STATIC_INLINE uint8_t h48_prune_lookup( 70STATIC_INLINE uint8_t h48_prune_lookup(
71 uint64_t, cube_t, dfsarg_solve_h48_t [static 1]); 71 uint64_t, cube_t, dfsarg_solve_h48_t [NON_NULL]);
72STATIC_INLINE uint8_t h48_prune_lookup_nocoord( 72STATIC_INLINE uint8_t h48_prune_lookup_nocoord(
73 cube_t, dfsarg_solve_h48_t [static 1]); 73 cube_t, dfsarg_solve_h48_t [NON_NULL]);
74STATIC_INLINE void h48_prune_restore_normal(const h48_prune_t [static 1], 74STATIC_INLINE void h48_prune_restore_normal(const h48_prune_t [NON_NULL],
75 dfsarg_solve_h48_t [static 1], uint8_t); 75 dfsarg_solve_h48_t [NON_NULL], uint8_t);
76STATIC_INLINE void h48_prune_restore_inverse(const h48_prune_t [static 1], 76STATIC_INLINE void h48_prune_restore_inverse(const h48_prune_t [NON_NULL],
77 dfsarg_solve_h48_t [static 1], uint8_t); 77 dfsarg_solve_h48_t [NON_NULL], uint8_t);
78STATIC int64_t solve_h48_maketasks( 78STATIC int64_t solve_h48_maketasks(
79 dfsarg_solve_h48_t [static 1], dfsarg_solve_h48_maketasks_t [static 1], 79 dfsarg_solve_h48_t [NON_NULL], dfsarg_solve_h48_maketasks_t [NON_NULL],
80 solve_h48_task_t [static H48_STARTING_CUBES], int [static 1]); 80 solve_h48_task_t [SIZE(H48_STARTING_CUBES)], int [NON_NULL]);
81STATIC wrapthread_return_t solve_h48_runthread(void *); 81STATIC wrapthread_return_t solve_h48_runthread(void *);
82STATIC int64_t solve_h48_dfs(dfsarg_solve_h48_t [static 1]); 82STATIC int64_t solve_h48_dfs(dfsarg_solve_h48_t [NON_NULL]);
83STATIC void solve_h48_log_solutions(solution_list_t [static 1], size_t); 83STATIC void solve_h48_log_solutions(solution_list_t [NON_NULL], size_t);
84STATIC int solve_h48_compare_tasks(const void *, const void *); 84STATIC int solve_h48_compare_tasks(const void *, const void *);
85STATIC int64_t solve_h48(oriented_cube_t, uint8_t, uint8_t, uint64_t, uint8_t, 85STATIC int64_t solve_h48(oriented_cube_t, uint8_t, uint8_t, uint64_t, uint8_t,
86 uint8_t, uint64_t, const unsigned char *, size_t, char *, 86 uint8_t, uint64_t, const unsigned char *, size_t, char *,
87 long long [static NISSY_SIZE_SOLVE_STATS], int (*)(void *), void *); 87 long long [SIZE(NISSY_SIZE_SOLVE_STATS)], int (*)(void *), void *);
88 88
89STATIC long long solve_h48_dispatch( 89STATIC long long solve_h48_dispatch(
90 oriented_cube_t oc, 90 oriented_cube_t oc,
@@ -99,7 +99,7 @@ STATIC long long solve_h48_dispatch(
99 const unsigned char *data, 99 const unsigned char *data,
100 unsigned sols_size, 100 unsigned sols_size,
101 char *sols, 101 char *sols,
102 long long stats[static NISSY_SIZE_SOLVE_STATS], 102 long long stats[SIZE(NISSY_SIZE_SOLVE_STATS)],
103 int (*poll_status)(void *), 103 int (*poll_status)(void *),
104 void *poll_status_data 104 void *poll_status_data
105) 105)
@@ -111,7 +111,8 @@ STATIC long long solve_h48_dispatch(
111 if (err != NISSY_OK) 111 if (err != NISSY_OK)
112 return err; 112 return err;
113 113
114 return solve_h48(oc, minmoves, maxmoves, maxsols, optimal, threads, 114 return solve_h48(oc, (uint8_t)minmoves, (uint8_t)maxmoves,
115 (uint8_t)maxsols, (uint8_t)optimal, (uint8_t)threads,
115 data_size, data, sols_size, sols, stats, 116 data_size, data, sols_size, sols, stats,
116 poll_status, poll_status_data); 117 poll_status, poll_status_data);
117} 118}
@@ -120,7 +121,7 @@ STATIC_INLINE uint8_t
120h48_prune_lookup( 121h48_prune_lookup(
121 uint64_t coord, 122 uint64_t coord,
122 cube_t cube, 123 cube_t cube,
123 dfsarg_solve_h48_t arg[static 1] 124 dfsarg_solve_h48_t arg[NON_NULL]
124) 125)
125{ 126{
126 uint8_t p, pmin, pe; 127 uint8_t p, pmin, pe;
@@ -139,7 +140,7 @@ h48_prune_lookup(
139STATIC_INLINE uint8_t 140STATIC_INLINE uint8_t
140h48_prune_lookup_nocoord( 141h48_prune_lookup_nocoord(
141 cube_t cube, 142 cube_t cube,
142 dfsarg_solve_h48_t arg[static 1] 143 dfsarg_solve_h48_t arg[NON_NULL]
143) 144)
144{ 145{
145 uint32_t cdata; 146 uint32_t cdata;
@@ -152,8 +153,8 @@ h48_prune_lookup_nocoord(
152 153
153STATIC_INLINE void 154STATIC_INLINE void
154h48_prune_pipeline( 155h48_prune_pipeline(
155 dfsarg_solve_h48_t arg[static 1], 156 dfsarg_solve_h48_t arg[NON_NULL],
156 h48_prune_t prune[static NMOVES], 157 h48_prune_t prune[SIZE(NMOVES)],
157 uint8_t target, 158 uint8_t target,
158 bool normal 159 bool normal
159) 160)
@@ -252,8 +253,8 @@ h48_prune_pipeline(
252 253
253STATIC_INLINE void 254STATIC_INLINE void
254h48_prune_restore_normal( 255h48_prune_restore_normal(
255 const h48_prune_t prune[static 1], 256 const h48_prune_t prune[NON_NULL],
256 dfsarg_solve_h48_t arg[static 1], 257 dfsarg_solve_h48_t arg[NON_NULL],
257 uint8_t target 258 uint8_t target
258) 259)
259{ 260{
@@ -276,8 +277,8 @@ h48_prune_restore_normal(
276 277
277STATIC_INLINE void 278STATIC_INLINE void
278h48_prune_restore_inverse( 279h48_prune_restore_inverse(
279 const h48_prune_t prune[static 1], 280 const h48_prune_t prune[NON_NULL],
280 dfsarg_solve_h48_t arg[static 1], 281 dfsarg_solve_h48_t arg[NON_NULL],
281 uint8_t target 282 uint8_t target
282) 283)
283{ 284{
@@ -299,7 +300,7 @@ h48_prune_restore_inverse(
299} 300}
300 301
301STATIC int64_t 302STATIC int64_t
302solve_h48_dfs(dfsarg_solve_h48_t arg[static 1]) 303solve_h48_dfs(dfsarg_solve_h48_t arg[NON_NULL])
303{ 304{
304 int64_t ret, n; 305 int64_t ret, n;
305 uint8_t m, nm, nn, ni, target; 306 uint8_t m, nm, nn, ni, target;
@@ -343,7 +344,7 @@ solve_h48_dfs(dfsarg_solve_h48_t arg[static 1])
343 backup_inverse = arg->inverse; 344 backup_inverse = arg->inverse;
344 345
345 ret = 0; 346 ret = 0;
346 if (popcount_u32(mm_normal) <= popcount_u32(mm_inverse)) { 347 if (popcount_u64(mm_normal) <= popcount_u64(mm_inverse)) {
347 h48_prune_pipeline(arg, prune, target, true); 348 h48_prune_pipeline(arg, prune, target, true);
348 arg->solution_moves->nmoves++; 349 arg->solution_moves->nmoves++;
349 for (m = 0; m < NMOVES; m++) { 350 for (m = 0; m < NMOVES; m++) {
@@ -450,14 +451,13 @@ solve_h48_runthread_end:
450 451
451STATIC int64_t 452STATIC int64_t
452solve_h48_maketasks( 453solve_h48_maketasks(
453 dfsarg_solve_h48_t solve_arg[static 1], 454 dfsarg_solve_h48_t solve_arg[NON_NULL],
454 dfsarg_solve_h48_maketasks_t mtarg[static 1], 455 dfsarg_solve_h48_maketasks_t mtarg[NON_NULL],
455 solve_h48_task_t tasks[static H48_STARTING_CUBES], 456 solve_h48_task_t tasks[SIZE(H48_STARTING_CUBES)],
456 int ntasks[static 1] 457 int ntasks[NON_NULL]
457) 458)
458{ 459{
459 int r; 460 int64_t r, appret;
460 int64_t appret;
461 uint8_t m, t; 461 uint8_t m, t;
462 uint64_t mm; 462 uint64_t mm;
463 cube_t backup_cube; 463 cube_t backup_cube;
@@ -524,7 +524,7 @@ solve_h48_maketasks(
524} 524}
525 525
526STATIC void 526STATIC void
527solve_h48_log_solutions(solution_list_t s[static 1], size_t e) 527solve_h48_log_solutions(solution_list_t s[NON_NULL], size_t e)
528{ 528{
529 size_t i; 529 size_t i;
530 char b; 530 char b;
@@ -561,7 +561,7 @@ solve_h48(
561 const unsigned char *data, 561 const unsigned char *data,
562 size_t solutions_size, 562 size_t solutions_size,
563 char *solutions, 563 char *solutions,
564 long long stats[static NISSY_SIZE_SOLVE_STATS], 564 long long stats[SIZE(NISSY_SIZE_SOLVE_STATS)],
565 int (*poll_status)(void *), 565 int (*poll_status)(void *),
566 void *poll_status_data 566 void *poll_status_data
567) 567)
diff --git a/src/solvers/h48/utils.h b/src/solvers/h48/utils.h
index 27fb2e5..6d91108 100644
--- a/src/solvers/h48/utils.h
+++ b/src/solvers/h48/utils.h
@@ -4,11 +4,11 @@
4#define H48_HMAX UINT8_C(7) 4#define H48_HMAX UINT8_C(7)
5#endif 5#endif
6 6
7long long parse_h48h(const char *, uint8_t [static 1]); 7long long parse_h48h(const char *, uint8_t [NON_NULL]);
8STATIC long long dataid_h48(const char *, char [static NISSY_SIZE_DATAID]); 8STATIC long long dataid_h48(const char *, char [SIZE(NISSY_SIZE_DATAID)]);
9 9
10long long 10long long
11parse_h48h(const char *buf, uint8_t h[static 1]) 11parse_h48h(const char *buf, uint8_t h[NON_NULL])
12{ 12{
13 char format_error_msg[100]; 13 char format_error_msg[100];
14 sprintf(format_error_msg, "[H48] Error parsing H48 solver: must be in " 14 sprintf(format_error_msg, "[H48] Error parsing H48 solver: must be in "
@@ -29,7 +29,7 @@ parse_h48h(const char *buf, uint8_t h[static 1])
29 goto parse_h48h_error; 29 goto parse_h48h_error;
30 } 30 }
31 31
32 *h = atoi(buf); 32 *h = (uint8_t)atoi(buf);
33 if (*h > H48_HMAX) { 33 if (*h > H48_HMAX) {
34 LOG("[H48] Invalid value %" PRIu8 " for parameter h (must be " 34 LOG("[H48] Invalid value %" PRIu8 " for parameter h (must be "
35 "at most %" PRIu8 ")\n", *h, H48_HMAX); 35 "at most %" PRIu8 ")\n", *h, H48_HMAX);
@@ -51,7 +51,7 @@ parse_h48h_error:
51} 51}
52 52
53STATIC long long 53STATIC long long
54dataid_h48(const char *str, char buf[static NISSY_SIZE_DATAID]) 54dataid_h48(const char *str, char buf[SIZE(NISSY_SIZE_DATAID)])
55{ 55{
56 uint8_t h; 56 uint8_t h;
57 long long err; 57 long long err;
diff --git a/src/solvers/solutions.h b/src/solvers/solutions.h
index 8817348..b7a848b 100644
--- a/src/solvers/solutions.h
+++ b/src/solvers/solutions.h
@@ -1,39 +1,39 @@
1STATIC void solution_moves_reset(solution_moves_t [static 1]); 1STATIC void solution_moves_reset(solution_moves_t [NON_NULL]);
2STATIC void solution_moves_transform(solution_moves_t [static 1], size_t, 2STATIC void solution_moves_transform(solution_moves_t [NON_NULL], size_t,
3 uint8_t); 3 uint8_t);
4STATIC void solution_moves_reorient(solution_moves_t [static 1], uint8_t); 4STATIC void solution_moves_reorient(solution_moves_t [NON_NULL], uint8_t);
5STATIC bool solution_list_init(solution_list_t [static 1], size_t, char *); 5STATIC bool solution_list_init(solution_list_t [NON_NULL], size_t, char *);
6STATIC bool solution_moves_equal( 6STATIC bool solution_moves_equal(
7 const solution_moves_t [static 1], const solution_moves_t [static 1]); 7 const solution_moves_t [NON_NULL], const solution_moves_t [NON_NULL]);
8STATIC bool last_solution_is_duplicate(const solution_list_t [static 1]); 8STATIC bool last_solution_is_duplicate(const solution_list_t [NON_NULL]);
9STATIC bool appendchar(solution_list_t [static 1], char); 9STATIC bool appendchar(solution_list_t [NON_NULL], char);
10STATIC bool appendnormal( 10STATIC bool appendnormal(
11 const solution_moves_t [static 1], solution_list_t [static 1]); 11 const solution_moves_t [NON_NULL], solution_list_t [NON_NULL]);
12STATIC bool appendinverse( 12STATIC bool appendinverse(
13 const solution_moves_t [static 1], solution_list_t [static 1]); 13 const solution_moves_t [NON_NULL], solution_list_t [NON_NULL]);
14STATIC void appendsolution_dfs(const solution_moves_t [static 1], size_t, 14STATIC void appendsolution_dfs(const solution_moves_t [NON_NULL], size_t,
15 const uint64_t *, size_t, uint8_t *, const solution_settings_t [static 1], 15 const uint64_t *, size_t, uint8_t *, const solution_settings_t [NON_NULL],
16 solution_list_t [static 1], 16 solution_list_t [NON_NULL],
17 solution_moves_t [static NTRANS * SOLUTION_MAXLEN], int64_t [static 1]); 17 solution_moves_t [SIZE(NTRANS * SOLUTION_MAXLEN)], int64_t [NON_NULL]);
18STATIC int64_t appendsolution(const solution_moves_t [static 1], 18STATIC int64_t appendsolution(const solution_moves_t [NON_NULL],
19 size_t, const uint64_t *, const solution_settings_t [static 1], 19 size_t, const uint64_t *, const solution_settings_t [NON_NULL],
20 solution_list_t [static 1]); 20 solution_list_t [NON_NULL]);
21STATIC bool solutions_done(const solution_list_t [static 1], 21STATIC bool solutions_done(const solution_list_t [NON_NULL],
22 const solution_settings_t [static 1], int8_t depth); 22 const solution_settings_t [NON_NULL], int8_t depth);
23 23
24STATIC void 24STATIC void
25solution_moves_reset(solution_moves_t sol[static 1]) 25solution_moves_reset(solution_moves_t sol[NON_NULL])
26{ 26{
27 sol->nmoves = 0; 27 sol->nmoves = 0;
28 sol->npremoves = 0; 28 sol->npremoves = 0;
29} 29}
30 30
31STATIC void 31STATIC void
32solution_moves_transform(solution_moves_t moves[static 1], size_t z, uint8_t t) 32solution_moves_transform(solution_moves_t moves[NON_NULL], size_t z, uint8_t t)
33{ 33{
34 uint8_t i; 34 uint8_t i;
35 35
36 for (i = z; i < moves->nmoves; i++) 36 for (i = (uint8_t)z; i < moves->nmoves; i++)
37 moves->moves[i] = transform_move(moves->moves[i], t); 37 moves->moves[i] = transform_move(moves->moves[i], t);
38 38
39 for (i = 0; i < moves->npremoves; i++) 39 for (i = 0; i < moves->npremoves; i++)
@@ -41,7 +41,7 @@ solution_moves_transform(solution_moves_t moves[static 1], size_t z, uint8_t t)
41} 41}
42 42
43STATIC void 43STATIC void
44solution_moves_reorient(solution_moves_t moves[static 1], uint8_t or) 44solution_moves_reorient(solution_moves_t moves[NON_NULL], uint8_t or)
45{ 45{
46 uint8_t i; 46 uint8_t i;
47 47
@@ -55,7 +55,7 @@ solution_moves_reorient(solution_moves_t moves[static 1], uint8_t or)
55} 55}
56 56
57STATIC bool 57STATIC bool
58solution_list_init(solution_list_t sols[static 1], size_t n, char *buf) 58solution_list_init(solution_list_t sols[NON_NULL], size_t n, char *buf)
59{ 59{
60 if (n == 0) 60 if (n == 0)
61 return false; 61 return false;
@@ -72,8 +72,8 @@ solution_list_init(solution_list_t sols[static 1], size_t n, char *buf)
72 72
73STATIC bool 73STATIC bool
74solution_moves_equal( 74solution_moves_equal(
75 const solution_moves_t a[static 1], 75 const solution_moves_t a[NON_NULL],
76 const solution_moves_t b[static 1] 76 const solution_moves_t b[NON_NULL]
77) 77)
78{ 78{
79 uint8_t i; 79 uint8_t i;
@@ -93,7 +93,7 @@ solution_moves_equal(
93} 93}
94 94
95STATIC bool 95STATIC bool
96last_solution_is_duplicate(const solution_list_t l[static 1]) 96last_solution_is_duplicate(const solution_list_t l[NON_NULL])
97{ 97{
98 size_t i, j; 98 size_t i, j;
99 99
@@ -119,7 +119,7 @@ last_solution_is_duplicate(const solution_list_t l[static 1])
119} 119}
120 120
121STATIC bool 121STATIC bool
122appendchar(solution_list_t solutions[static 1], char c) 122appendchar(solution_list_t solutions[NON_NULL], char c)
123{ 123{
124 if (solutions->size <= solutions->used) 124 if (solutions->size <= solutions->used)
125 return false; 125 return false;
@@ -131,8 +131,8 @@ appendchar(solution_list_t solutions[static 1], char c)
131 131
132STATIC bool 132STATIC bool
133appendnormal( 133appendnormal(
134 const solution_moves_t moves[static 1], 134 const solution_moves_t moves[NON_NULL],
135 solution_list_t list[static 1] 135 solution_list_t list[NON_NULL]
136) 136)
137{ 137{
138 int64_t strl; 138 int64_t strl;
@@ -150,8 +150,8 @@ appendnormal(
150 150
151STATIC bool 151STATIC bool
152appendinverse( 152appendinverse(
153 const solution_moves_t moves[static 1], 153 const solution_moves_t moves[NON_NULL],
154 solution_list_t list[static 1] 154 solution_list_t list[NON_NULL]
155) 155)
156{ 156{
157 int64_t strl; 157 int64_t strl;
@@ -172,15 +172,15 @@ appendinverse(
172 172
173STATIC void 173STATIC void
174appendsolution_dfs( 174appendsolution_dfs(
175 const solution_moves_t moves[static 1], 175 const solution_moves_t moves[NON_NULL],
176 size_t ntmask, 176 size_t ntmask,
177 const uint64_t *tmask, 177 const uint64_t *tmask,
178 size_t itm, 178 size_t itm,
179 uint8_t *tt, 179 uint8_t *tt,
180 const solution_settings_t settings[static 1], 180 const solution_settings_t settings[NON_NULL],
181 solution_list_t list[static 1], 181 solution_list_t list[NON_NULL],
182 solution_moves_t tsol[static NTRANS * SOLUTION_MAXLEN], 182 solution_moves_t tsol[SIZE(NTRANS * SOLUTION_MAXLEN)],
183 int64_t r[static 1] 183 int64_t r[NON_NULL]
184) 184)
185{ 185{
186 /* 186 /*
@@ -276,11 +276,11 @@ appendsolution_dfs_error_buffer:
276 276
277STATIC int64_t 277STATIC int64_t
278appendsolution( 278appendsolution(
279 const solution_moves_t moves[static 1], 279 const solution_moves_t moves[NON_NULL],
280 size_t ntmask, 280 size_t ntmask,
281 const uint64_t *tmask, 281 const uint64_t *tmask,
282 const solution_settings_t settings[static 1], 282 const solution_settings_t settings[NON_NULL],
283 solution_list_t list[static 1] 283 solution_list_t list[NON_NULL]
284) 284)
285{ 285{
286 int64_t r; 286 int64_t r;
@@ -329,8 +329,8 @@ appendsolution_error_solution_length:
329 329
330STATIC bool 330STATIC bool
331solutions_done( 331solutions_done(
332 const solution_list_t list[static 1], 332 const solution_list_t list[NON_NULL],
333 const solution_settings_t settings[static 1], 333 const solution_settings_t settings[NON_NULL],
334 int8_t depth 334 int8_t depth
335) 335)
336{ 336{
diff --git a/src/solvers/tables.h b/src/solvers/tables.h
index b7a1079..3db1d1e 100644
--- a/src/solvers/tables.h
+++ b/src/solvers/tables.h
@@ -1,17 +1,17 @@
1STATIC uint64_t read_unaligned_u64( 1STATIC uint64_t read_unaligned_u64(
2 const unsigned char [static sizeof(uint64_t)]); 2 const unsigned char [SIZE(sizeof(uint64_t))]);
3STATIC void write_unaligned_u64( 3STATIC void write_unaligned_u64(
4 unsigned char [static sizeof(uint64_t)], uint64_t); 4 unsigned char [SIZE(sizeof(uint64_t))], uint64_t);
5STATIC int64_t readtableinfo( 5STATIC int64_t readtableinfo(
6 size_t, const unsigned char *, tableinfo_t [static 1]); 6 size_t, const unsigned char *, tableinfo_t [NON_NULL]);
7STATIC int64_t readtableinfo_n( 7STATIC int64_t readtableinfo_n(
8 size_t, const unsigned char *, uint8_t, tableinfo_t [static 1]); 8 size_t, const unsigned char *, uint8_t, tableinfo_t [NON_NULL]);
9STATIC int64_t writetableinfo( 9STATIC int64_t writetableinfo(
10 const tableinfo_t [static 1], size_t, unsigned char *); 10 const tableinfo_t [NON_NULL], size_t, unsigned char *);
11STATIC void append_name(tableinfo_t [static 1], const char *); 11STATIC void append_name(tableinfo_t [NON_NULL], const char *);
12 12
13STATIC uint64_t 13STATIC uint64_t
14read_unaligned_u64(const unsigned char buf[static sizeof(uint64_t)]) 14read_unaligned_u64(const unsigned char buf[SIZE(sizeof(uint64_t))])
15{ 15{
16 uint64_t ret; 16 uint64_t ret;
17 17
@@ -21,7 +21,7 @@ read_unaligned_u64(const unsigned char buf[static sizeof(uint64_t)])
21} 21}
22 22
23STATIC void 23STATIC void
24write_unaligned_u64(unsigned char buf[static sizeof(uint64_t)], uint64_t x) 24write_unaligned_u64(unsigned char buf[SIZE(sizeof(uint64_t))], uint64_t x)
25{ 25{
26 memcpy(buf, &x, sizeof(uint64_t)); 26 memcpy(buf, &x, sizeof(uint64_t));
27} 27}
@@ -30,7 +30,7 @@ STATIC int64_t
30readtableinfo( 30readtableinfo(
31 size_t buf_size, 31 size_t buf_size,
32 const unsigned char *buf, 32 const unsigned char *buf,
33 tableinfo_t info[static 1] 33 tableinfo_t info[NON_NULL]
34) 34)
35{ 35{
36 size_t i; 36 size_t i;
@@ -75,7 +75,7 @@ readtableinfo_n(
75 size_t buf_size, 75 size_t buf_size,
76 const unsigned char *buf, 76 const unsigned char *buf,
77 uint8_t n, 77 uint8_t n,
78 tableinfo_t info[static 1] 78 tableinfo_t info[NON_NULL]
79) 79)
80{ 80{
81 int64_t ret; 81 int64_t ret;
@@ -89,7 +89,7 @@ readtableinfo_n(
89 89
90STATIC int64_t 90STATIC int64_t
91writetableinfo( 91writetableinfo(
92 const tableinfo_t info[static 1], 92 const tableinfo_t info[NON_NULL],
93 size_t data_size, 93 size_t data_size,
94 unsigned char *buf 94 unsigned char *buf
95) 95)
@@ -138,9 +138,9 @@ writetableinfo(
138} 138}
139 139
140STATIC void 140STATIC void
141append_name(tableinfo_t info[static 1], const char *str) 141append_name(tableinfo_t info[NON_NULL], const char *str)
142{ 142{
143 int i, j; 143 size_t i, j;
144 144
145 for (i = 0, j = strlen(info->solver); str[i] != '\0'; i++, j++) 145 for (i = 0, j = strlen(info->solver); str[i] != '\0'; i++, j++)
146 info->solver[j] = str[i]; 146 info->solver[j] = str[i];
diff --git a/src/utils/compilers.h b/src/utils/compilers.h
index a7d6df5..1b175bb 100644
--- a/src/utils/compilers.h
+++ b/src/utils/compilers.h
@@ -1,13 +1,24 @@
1#if defined(__GNUC__) 1#if defined(__GNUC__)
2 2
3#define unused __attribute__((unused)) 3#define UNUSED __attribute__((unused))
4#define SIZE(x) static (x)
5#define NON_NULL SIZE(1)
4 6
5#elif defined(__clang__) 7#elif defined(__clang__)
6 8
7#define unused __attribute__((unused)) 9#define UNUSED __attribute__((unused))
10#define SIZE(x) static (x)
11#define NON_NULL SIZE(1)
8 12
9#else 13#else
10 14
11#define unused 15/*
16For example MSVC, which is not fully C11 compliant (e.g. it does not support
17a[static N] notation for array parameters).
18*/
19
20#define UNUSED
21#define SIZE(x)
22#define NON_NULL
12 23
13#endif 24#endif
diff --git a/src/utils/dbg_log.h b/src/utils/dbg_log.h
index d737ff2..08d42a3 100644
--- a/src/utils/dbg_log.h
+++ b/src/utils/dbg_log.h
@@ -7,8 +7,7 @@ void write_wrapper(void (*)(const char *, void *), const char *, ...);
7void 7void
8write_wrapper(void (*write)(const char *, void *), const char *str, ...) 8write_wrapper(void (*write)(const char *, void *), const char *str, ...)
9{ 9{
10 static const size_t len = 1000; 10 char message[1000];
11 char message[len];
12 va_list args; 11 va_list args;
13 12
14 va_start(args, str); 13 va_start(args, str);
diff --git a/src/utils/math.h b/src/utils/math.h
index f2176b6..0c56861 100644
--- a/src/utils/math.h
+++ b/src/utils/math.h
@@ -73,10 +73,10 @@ indextoperm(uint64_t p, size_t n, uint8_t *r)
73 73
74 /* Find k-th unused number */ 74 /* Find k-th unused number */
75 for (j = 0, c = 0; c <= k; j++) 75 for (j = 0, c = 0; c <= k; j++)
76 c += 1 - ((used & (1<<j)) >> j); 76 c += UINT64_C(1) - ((used & (UINT64_C(1)<<j)) >> j);
77 77
78 r[i] = j-1; 78 r[i] = (uint8_t)(j-1);
79 used |= 1 << (j-1); 79 used |= UINT64_C(1) << (j-1);
80 p %= factorial[n-i-1]; 80 p %= factorial[n-i-1];
81 } 81 }
82 82
diff --git a/src/utils/wrapthread.h b/src/utils/wrapthread.h
index 4ac72a6..9578293 100644
--- a/src/utils/wrapthread.h
+++ b/src/utils/wrapthread.h
@@ -61,8 +61,8 @@
61 #define wrapthread_return_t int 61 #define wrapthread_return_t int
62 #define wrapthread_return_val 0 62 #define wrapthread_return_val 0
63 63
64 #define wrapthread_define_var_thread_t(x) unused char x 64 #define wrapthread_define_var_thread_t(x) UNUSED char x
65 #define wrapthread_define_var_mutex_t(x) unused char x 65 #define wrapthread_define_var_mutex_t(x) UNUSED char x
66 #define wrapthread_define_struct_thread_t(x) char x 66 #define wrapthread_define_struct_thread_t(x) char x
67 #define wrapthread_define_struct_mutex_t(x) char x 67 #define wrapthread_define_struct_mutex_t(x) char x
68 68

Generated with cgit - Back to sebastiano.tronto.net