diff options
Diffstat (limited to 'src/solvers/coord')
| -rw-r--r-- | src/solvers/coord/common.h | 42 | ||||
| -rw-r--r-- | src/solvers/coord/gendata.h | 51 | ||||
| -rw-r--r-- | src/solvers/coord/htr.h | 4 | ||||
| -rw-r--r-- | src/solvers/coord/multisolve.h | 32 | ||||
| -rw-r--r-- | src/solvers/coord/solve.h | 36 | ||||
| -rw-r--r-- | src/solvers/coord/types_macros.h | 4 | ||||
| -rw-r--r-- | src/solvers/coord/utils.h | 4 |
7 files changed, 89 insertions, 84 deletions
diff --git a/src/solvers/coord/common.h b/src/solvers/coord/common.h index d154636..3a62e85 100644 --- a/src/solvers/coord/common.h +++ b/src/solvers/coord/common.h | |||
| @@ -1,16 +1,16 @@ | |||
| 1 | STATIC uint64_t coord_coord_generic( | 1 | STATIC 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 *); |
| 3 | STATIC cube_t coord_cube_generic( | 3 | STATIC 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 *); |
| 5 | STATIC bool coord_isnasty_generic( | 5 | STATIC 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 *); |
| 7 | STATIC size_t coord_gendata_generic(const coord_t [static 1], unsigned char *); | 7 | STATIC size_t coord_gendata_generic(const coord_t [NON_NULL], unsigned char *); |
| 8 | 8 | ||
| 9 | STATIC bool solution_lastqt_cw(const solution_moves_t [static 1]); | 9 | STATIC bool solution_lastqt_cw(const solution_moves_t [NON_NULL]); |
| 10 | STATIC bool coord_can_switch(const coord_t [static 1], const unsigned char *, | 10 | STATIC bool coord_can_switch(const coord_t [NON_NULL], const unsigned char *, |
| 11 | size_t, const uint8_t *); | 11 | size_t, const uint8_t *); |
| 12 | STATIC bool coord_is_solved( | 12 | STATIC 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 | ||
| 15 | STATIC cube_t coordinate_merge_ce(cube_t, cube_t); | 15 | STATIC cube_t coordinate_merge_ce(cube_t, cube_t); |
| 16 | STATIC cube_t coordinate_merge_ec(cube_t, cube_t); | 16 | STATIC 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 | ||
| 19 | STATIC uint64_t | 19 | STATIC uint64_t |
| 20 | coord_coord_generic( | 20 | coord_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 | ||
| 37 | STATIC cube_t | 37 | STATIC cube_t |
| 38 | coord_cube_generic( | 38 | coord_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 | ||
| 55 | STATIC bool | 55 | STATIC bool |
| 56 | coord_isnasty_generic( | 56 | coord_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 | ||
| 74 | STATIC size_t | 74 | STATIC size_t |
| 75 | coord_gendata_generic( | 75 | coord_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 | ||
| 146 | STATIC bool | 148 | STATIC bool |
| 147 | solution_lastqt_cw(const solution_moves_t s[static 1]) | 149 | solution_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 | ||
| 153 | STATIC bool | 155 | STATIC bool |
| 154 | solution_always_valid(const solution_moves_t s[static 1]) | 156 | solution_always_valid(const solution_moves_t s[NON_NULL]) |
| 155 | { | 157 | { |
| 156 | return true; | 158 | return true; |
| 157 | } | 159 | } |
| 158 | 160 | ||
| 159 | STATIC bool | 161 | STATIC bool |
| 160 | coord_can_switch( | 162 | coord_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 | ||
| 193 | STATIC bool | 195 | STATIC bool |
| 194 | coord_is_solved( | 196 | coord_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 @@ | |||
| 1 | STATIC size_t gendata_coord(const coord_t [static 1], unsigned char *); | 1 | STATIC size_t gendata_coord(const coord_t [NON_NULL], unsigned char *); |
| 2 | STATIC size_t gendata_multicoord( | 2 | STATIC size_t gendata_multicoord( |
| 3 | const multicoord_t [static 1], unsigned char *); | 3 | const multicoord_t [NON_NULL], unsigned char *); |
| 4 | STATIC long long gendata_coord_dispatch(const char *, unsigned long long, | 4 | STATIC long long gendata_coord_dispatch(const char *, unsigned long long, |
| 5 | unsigned char *); | 5 | unsigned char *); |
| 6 | STATIC tableinfo_t genptable_coord( | 6 | STATIC 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 *); |
| 8 | STATIC uint64_t genptable_coord_init_solved( | 8 | STATIC 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 *); |
| 10 | STATIC bool switch_to_fromnew(uint64_t, uint64_t, uint64_t); | 10 | STATIC bool switch_to_fromnew(uint64_t, uint64_t, uint64_t); |
| 11 | STATIC uint64_t genptable_coord_fillneighbors(const coord_t [static 1], | 11 | STATIC 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 *); |
| 13 | STATIC uint64_t genptable_coord_fillfromnew(const coord_t [static 1], | 13 | STATIC 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 *); |
| 15 | STATIC uint8_t get_coord_pval( | 15 | STATIC 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); |
| 17 | STATIC void set_coord_pval( | 17 | STATIC 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 | ||
| 20 | STATIC long long | 20 | STATIC long long |
| 21 | gendata_coord_dispatch( | 21 | gendata_coord_dispatch( |
| @@ -40,7 +40,7 @@ gendata_coord_dispatch( | |||
| 40 | } | 40 | } |
| 41 | 41 | ||
| 42 | STATIC size_t | 42 | STATIC size_t |
| 43 | gendata_coord(const coord_t coord[static 1], unsigned char *buf) | 43 | gendata_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 | ||
| 98 | STATIC size_t | 98 | STATIC size_t |
| 99 | gendata_multicoord(const multicoord_t mcoord[static 1], unsigned char *buf) | 99 | gendata_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 | ||
| 142 | STATIC tableinfo_t | 142 | STATIC tableinfo_t |
| 143 | genptable_coord( | 143 | genptable_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 | ||
| 205 | STATIC uint64_t | 206 | STATIC uint64_t |
| 206 | genptable_coord_init_solved( | 207 | genptable_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 | ||
| 239 | STATIC uint64_t | 240 | STATIC uint64_t |
| 240 | genptable_coord_fillneighbors( | 241 | genptable_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 | ||
| 277 | STATIC uint64_t | 279 | STATIC uint64_t |
| 278 | genptable_coord_fillfromnew( | 280 | genptable_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 | ||
| 332 | STATIC uint8_t | 335 | STATIC uint8_t |
| 333 | get_coord_pval( | 336 | get_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 | ||
| 342 | STATIC void | 345 | STATIC void |
| 343 | set_coord_pval( | 346 | set_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 *); | |||
| 4 | STATIC size_t coordinate_htr_gendata(unsigned char *); | 4 | STATIC size_t coordinate_htr_gendata(unsigned char *); |
| 5 | 5 | ||
| 6 | STATIC bool htr_checkmoves(bool *, uint8_t, const uint8_t *); | 6 | STATIC bool htr_checkmoves(bool *, uint8_t, const uint8_t *); |
| 7 | STATIC bool htr_solution_prune(const solution_moves_t [static 1]); | 7 | STATIC bool htr_solution_prune(const solution_moves_t [NON_NULL]); |
| 8 | STATIC bool is_cp_htr(uint64_t, const unsigned char *); | 8 | STATIC bool is_cp_htr(uint64_t, const unsigned char *); |
| 9 | 9 | ||
| 10 | STATIC coord_t coordinate_htr = { | 10 | STATIC coord_t coordinate_htr = { |
| @@ -97,7 +97,7 @@ htr_checkmoves(bool *f, uint8_t n, const uint8_t *moves) | |||
| 97 | } | 97 | } |
| 98 | 98 | ||
| 99 | STATIC bool | 99 | STATIC bool |
| 100 | htr_solution_prune(const solution_moves_t s[static 1]) | 100 | htr_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 | ||
| 19 | STATIC int64_t solve_multicoord(oriented_cube_t, multicoord_t [static 1], | 19 | STATIC 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 *); |
| 22 | STATIC long long solve_multicoord_dispatch(oriented_cube_t, const char *, | 22 | STATIC 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 *); |
| 26 | STATIC bool multicoord_solution_admissible( | 26 | STATIC bool multicoord_solution_admissible( |
| 27 | const dfsarg_solve_multicoord_t [static 1]); | 27 | const dfsarg_solve_multicoord_t [NON_NULL]); |
| 28 | STATIC bool multicoord_dfs_stop(const dfsarg_solve_multicoord_t [static 1]); | 28 | STATIC bool multicoord_dfs_stop(const dfsarg_solve_multicoord_t [NON_NULL]); |
| 29 | STATIC int64_t solve_multicoord_dfs(dfsarg_solve_multicoord_t [static 1]); | 29 | STATIC int64_t solve_multicoord_dfs(dfsarg_solve_multicoord_t [NON_NULL]); |
| 30 | 30 | ||
| 31 | STATIC bool | 31 | STATIC bool |
| 32 | multicoord_solution_admissible(const dfsarg_solve_multicoord_t arg[static 1]) | 32 | multicoord_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 | ||
| 51 | STATIC bool | 51 | STATIC bool |
| 52 | multicoord_dfs_stop(const dfsarg_solve_multicoord_t arg[static 1]) | 52 | multicoord_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 | ||
| 71 | STATIC int64_t | 71 | STATIC int64_t |
| 72 | solve_multicoord_dfs(dfsarg_solve_multicoord_t arg[static 1]) | 72 | solve_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 | ||
| 171 | STATIC int64_t | 171 | STATIC int64_t |
| 172 | solve_multicoord( | 172 | solve_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 | ||
| 16 | STATIC int64_t solve_coord(oriented_cube_t, coord_t [static 1], uint8_t, | 16 | STATIC 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 *); |
| 19 | STATIC long long solve_coord_dispatch(oriented_cube_t, const char *, unsigned, | 19 | STATIC 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 *); |
| 23 | STATIC bool coord_solution_admissible(const dfsarg_solve_coord_t [static 1]); | 23 | STATIC bool coord_solution_admissible(const dfsarg_solve_coord_t [NON_NULL]); |
| 24 | STATIC bool coord_continue_onnormal(const dfsarg_solve_coord_t [static 1]); | 24 | STATIC bool coord_continue_onnormal(const dfsarg_solve_coord_t [NON_NULL]); |
| 25 | STATIC bool coord_continue_oninverse(const dfsarg_solve_coord_t [static 1]); | 25 | STATIC bool coord_continue_oninverse(const dfsarg_solve_coord_t [NON_NULL]); |
| 26 | STATIC int64_t solve_coord_dfs(dfsarg_solve_coord_t [static 1]); | 26 | STATIC int64_t solve_coord_dfs(dfsarg_solve_coord_t [NON_NULL]); |
| 27 | 27 | ||
| 28 | STATIC bool | 28 | STATIC bool |
| 29 | coord_solution_admissible(const dfsarg_solve_coord_t arg[static 1]) | 29 | coord_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 | ||
| 41 | STATIC bool | 41 | STATIC bool |
| 42 | coord_continue_onnormal(const dfsarg_solve_coord_t arg[static 1]) | 42 | coord_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 | ||
| 95 | STATIC bool | 95 | STATIC bool |
| 96 | coord_continue_oninverse(const dfsarg_solve_coord_t arg[static 1]) | 96 | coord_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 | ||
| 149 | STATIC int64_t | 149 | STATIC int64_t |
| 150 | solve_coord_dfs(dfsarg_solve_coord_t arg[static 1]) | 150 | solve_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 | ||
| 288 | STATIC int64_t | 288 | STATIC int64_t |
| 289 | solve_coord( | 289 | solve_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 *); | |||
| 2 | STATIC multicoord_t *parse_multicoord(size_t, const char *); | 2 | STATIC multicoord_t *parse_multicoord(size_t, const char *); |
| 3 | STATIC void parse_coord_and_trans( | 3 | STATIC void parse_coord_and_trans( |
| 4 | const char *, coord_t **, multicoord_t **, uint8_t *); | 4 | const char *, coord_t **, multicoord_t **, uint8_t *); |
| 5 | STATIC long long dataid_coord(const char *, char [static NISSY_SIZE_DATAID]); | 5 | STATIC long long dataid_coord(const char *, char [SIZE(NISSY_SIZE_DATAID)]); |
| 6 | 6 | ||
| 7 | STATIC coord_t * | 7 | STATIC coord_t * |
| 8 | parse_coord(size_t n, const char *coord) | 8 | parse_coord(size_t n, const char *coord) |
| @@ -60,7 +60,7 @@ parse_coord_and_trans( | |||
| 60 | } | 60 | } |
| 61 | 61 | ||
| 62 | STATIC long long | 62 | STATIC long long |
| 63 | dataid_coord(const char *ca, char dataid[static NISSY_SIZE_DATAID]) | 63 | dataid_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; |
