From 8b94d135429a9f3253cc7f25a1453b412065c4a0 Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Sun, 18 May 2025 08:48:13 +0200 Subject: Refactor solver dispatch and checkdata --- src/solvers/coord/gendata.h | 35 ++++++++--------------------------- src/solvers/coord/solve.h | 35 +++++++++++++++++++---------------- src/solvers/coord/utils.h | 12 +++++++----- 3 files changed, 34 insertions(+), 48 deletions(-) (limited to 'src/solvers/coord') diff --git a/src/solvers/coord/gendata.h b/src/solvers/coord/gendata.h index 7a974f8..1b65f49 100644 --- a/src/solvers/coord/gendata.h +++ b/src/solvers/coord/gendata.h @@ -1,5 +1,6 @@ STATIC size_t gendata_coord(const coord_t [static 1], unsigned char *); -STATIC int64_t gendata_coord_dispatch(const char *, unsigned char *); +STATIC long long gendata_coord_dispatch(const char *, unsigned long long, + unsigned char *); STATIC tableinfo_t genptable_coord( const coord_t [static 1], const unsigned char *, unsigned char *); STATIC bool switch_to_fromnew(uint64_t, uint64_t, uint64_t); @@ -7,15 +8,17 @@ STATIC uint64_t genptable_coord_fillneighbors(const coord_t [static 1], const unsigned char *, uint64_t, uint8_t, unsigned char *); STATIC uint64_t genptable_coord_fillfromnew(const coord_t [static 1], const unsigned char *, uint64_t, uint8_t, unsigned char *); -STATIC void getdistribution_coord(const unsigned char *, const char *, - uint64_t [static INFO_DISTRIBUTION_LEN]); STATIC uint8_t get_coord_pval( const coord_t [static 1], const unsigned char *, uint64_t); STATIC void set_coord_pval( const coord_t [static 1], unsigned char *, uint64_t, uint8_t); -STATIC int64_t -gendata_coord_dispatch(const char *coordstr, unsigned char *buf) +STATIC long long +gendata_coord_dispatch( + const char *coordstr, + unsigned long long bufsize, + unsigned char *buf +) { coord_t *coord; @@ -249,28 +252,6 @@ genptable_coord_fillfromnew( return tot; } -STATIC void -getdistribution_coord( - const unsigned char *table, - const char *coord, - uint64_t distr[static INFO_DISTRIBUTION_LEN] -) -{ - uint8_t v; - uint64_t i; - coord_t *c; - - memset(distr, 0, INFO_DISTRIBUTION_LEN * sizeof(uint64_t)); - - if((c = parse_coord(strlen(coord), coord)) == NULL) - return; - - for (i = 0; i < c->max; i++) { - v = get_coord_pval(c, table, i); - distr[v]++; - } -} - STATIC uint8_t get_coord_pval( const coord_t coord[static 1], diff --git a/src/solvers/coord/solve.h b/src/solvers/coord/solve.h index 8eb3e9d..df0f6ff 100644 --- a/src/solvers/coord/solve.h +++ b/src/solvers/coord/solve.h @@ -13,11 +13,13 @@ typedef struct { } dfsarg_solve_coord_t; STATIC int64_t solve_coord(oriented_cube_t, coord_t [static 1], uint8_t, - uint8_t, uint8_t, uint8_t, uint64_t, uint8_t, uint8_t, uint64_t, - const unsigned char *, size_t n, char [n], int (*)(void *), void *); -STATIC int64_t solve_coord_dispatch(oriented_cube_t, const char *, uint8_t, - uint8_t, uint8_t, uint64_t, uint8_t, uint8_t, uint64_t, - const unsigned char *, size_t n, char [n], int (*)(void *), void *); + uint8_t, uint8_t, uint8_t, uint64_t, uint8_t, uint8_t, uint64_t n, + const unsigned char [n], size_t m, char [m], int (*)(void *), void *); +STATIC long long solve_coord_dispatch(oriented_cube_t, const char *, unsigned, + unsigned, unsigned, unsigned, unsigned, unsigned, unsigned long long n, + const unsigned char [n], unsigned m, char [m], + long long [static NISSY_SIZE_SOLVE_STATS], + int (*)(void *), void *); STATIC bool coord_solution_admissible(const dfsarg_solve_coord_t [static 1]); STATIC bool solve_coord_dfs_stop(const dfsarg_solve_coord_t [static 1]); STATIC bool coord_continue_onnormal(const dfsarg_solve_coord_t [static 1]); @@ -198,20 +200,21 @@ solve_coord_dfs(dfsarg_solve_coord_t arg[static 1]) return ret; } -STATIC int64_t +STATIC long long solve_coord_dispatch( oriented_cube_t oc, const char *coord_and_axis, - uint8_t nissflag, - uint8_t minmoves, - uint8_t maxmoves, - uint64_t maxsolutions, - uint8_t optimal, - uint8_t threads, - uint64_t data_size, - const unsigned char *data, - size_t solutions_size, + unsigned nissflag, + unsigned minmoves, + unsigned maxmoves, + unsigned maxsolutions, + unsigned optimal, + unsigned threads, + unsigned long long data_size, + const unsigned char data[data_size], + unsigned solutions_size, char sols[solutions_size], + long long stats[static NISSY_SIZE_SOLVE_STATS], int (*poll_status)(void *), void *poll_status_data ) @@ -250,7 +253,7 @@ solve_coord( uint8_t optimal, uint8_t threads, uint64_t data_size, - const unsigned char *data, + const unsigned char data[data_size], size_t solutions_size, char sols[solutions_size], int (*poll_status)(void *), diff --git a/src/solvers/coord/utils.h b/src/solvers/coord/utils.h index ef3f817..aa4d74c 100644 --- a/src/solvers/coord/utils.h +++ b/src/solvers/coord/utils.h @@ -2,7 +2,7 @@ STATIC coord_t *parse_coord(size_t n, const char [n]); STATIC uint8_t parse_axis(size_t n, const char [n]); STATIC void parse_coord_and_axis( size_t n, const char [n], coord_t **, uint8_t *); -STATIC int64_t dataid_coord(const char *, char [static NISSY_SIZE_DATAID]); +STATIC long long dataid_coord(const char *, char [static NISSY_SIZE_DATAID]); STATIC coord_t * parse_coord(size_t n, const char coord[n]) @@ -38,20 +38,22 @@ parse_coord_and_axis( uint8_t *axis ) { + const char *s; size_t i; + s = str + 6; for (i = 0; i < n; i++) - if (str[i] == '_') + if (s[i] == '_') break; if (coord != NULL) - *coord = parse_coord(i, str); + *coord = parse_coord(i, s); if (axis != NULL) - *axis = i == n ? UINT8_ERROR : parse_axis(n-i-1, str+i+1); + *axis = i == n ? UINT8_ERROR : parse_axis(n-i-1, s+i+1); } -STATIC int64_t +STATIC long long dataid_coord(const char *ca, char dataid[static NISSY_SIZE_DATAID]) { coord_t *c; -- cgit v1.3