From d1747a694ea65a463d6e9b6f7408ae969a8bfff5 Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Thu, 7 Aug 2025 17:13:49 +0200 Subject: Added solver aliases --- src/nissy.c | 28 ++++++++++++++-------------- src/solvers/dispatch.h | 46 +++++++++++++++++++++++++++++++++++++++------- 2 files changed, 53 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/nissy.c b/src/nissy.c index 17ef960..4bfdb56 100644 --- a/src/nissy.c +++ b/src/nissy.c @@ -213,15 +213,15 @@ nissy_getcube( STATIC long long nissy_dataid(const char *solver, char dataid[static NISSY_SIZE_DATAID]) { - solver_dispatch_t *dispatch; + solver_dispatch_t dispatch; dispatch = match_solver(solver); - if (dispatch == NULL) { + if (dispatch.prefix == NULL) { LOG("[dataid] Unknown solver %s\n", solver); return NISSY_ERROR_INVALID_SOLVER; } - return dispatch->dataid(solver, dataid); + return dispatch.dataid(dispatch.solvername, dataid); } long long @@ -255,7 +255,7 @@ nissy_gendata_unsafe( unsigned char *data ) { - solver_dispatch_t *dispatch; + solver_dispatch_t dispatch; if (solver == NULL) { LOG("[gendata] Error: 'solver' argument is NULL\n"); @@ -268,12 +268,12 @@ nissy_gendata_unsafe( } dispatch = match_solver(solver); - if (dispatch == NULL) { + if (dispatch.prefix == NULL) { LOG("[gendata] Unknown solver %s\n", solver); return NISSY_ERROR_INVALID_SOLVER; } - return dispatch->gendata(solver, data_size, data); + return dispatch.gendata(dispatch.solvername, data_size, data); } long long @@ -283,15 +283,15 @@ nissy_checkdata( const unsigned char *data ) { - solver_dispatch_t *dispatch; + solver_dispatch_t dispatch; dispatch = match_solver(solver); - if (dispatch == NULL) { + if (dispatch.prefix == NULL) { LOG("[checkdata] Unknown solver %s\n", solver); return NISSY_ERROR_INVALID_SOLVER; } - return dispatch->checkdata(solver, data_size, data); + return dispatch.checkdata(dispatch.solvername, data_size, data); } long long @@ -315,7 +315,7 @@ nissy_solve( { oriented_cube_t oc; int t; - solver_dispatch_t *dispatch; + solver_dispatch_t dispatch; if (solver == NULL) { LOG("[solve] Error: 'solver' argument is NULL\n"); @@ -359,13 +359,13 @@ nissy_solve( } dispatch = match_solver(solver); - if (dispatch == NULL) { + if (dispatch.prefix == NULL) { LOG("[solve] Error: unknown solver '%s'\n", solver); return NISSY_ERROR_INVALID_SOLVER; } - return dispatch->solve(oc, solver, nissflag, minmoves, maxmoves, - maxsols, optimal, t, data_size, data, sols_size, sols, stats, - poll_status, poll_status_data); + return dispatch.solve(oc, dispatch.solvername, nissflag, minmoves, + maxmoves, maxsols, optimal, t, data_size, data, sols_size, sols, + stats, poll_status, poll_status_data); } long long diff --git a/src/solvers/dispatch.h b/src/solvers/dispatch.h index 013468c..7e647ce 100644 --- a/src/solvers/dispatch.h +++ b/src/solvers/dispatch.h @@ -1,4 +1,5 @@ typedef struct { + const char *solvername; const char *prefix; long long (*dataid)(const char *, char [static NISSY_SIZE_DATAID]); long long (*gendata)( @@ -12,7 +13,7 @@ typedef struct { int (*)(void *), void *); } solver_dispatch_t; -STATIC solver_dispatch_t *match_solver(const char *); +STATIC solver_dispatch_t match_solver(const char *); solver_dispatch_t solver_dispatchers[] = { { @@ -41,20 +42,51 @@ solver_dispatch_t solver_dispatchers[] = { } }; -STATIC solver_dispatch_t * +const char *solver_aliases[][2] = { + { "optimal", "h48h7k2" }, + { "eofb", "coord_EO_UF" }, + { "eorl", "coord_EO_UR" }, + { "eoud", "coord_EO_FD" }, + { "drud", "coord_DR_UF" }, + { "drrl", "coord_DR_RF" }, + { "drfb", "coord_DR_FD" }, + { "drudslice", "coord_DRSLICE_UF" }, + { "drrlslice", "coord_DRSLICE_LF" }, + { "drfbslice", "coord_DRSLICE_BU" }, + { "drud-eofb", "coord_DREO_UF" }, + { "drrl-eofb", "coord_DREO_RF" }, + { "drud-eorl", "coord_DREO_UR" }, + { "drfb-eorl", "coord_DREO_RU" }, + { "drrl-eoud", "coord_DREO_FR" }, + { "drfb-eoud", "coord_DREO_FD" }, + { "drudfin", "mcoord_DRFIN_UF" }, + { "drrlfin", "mcoord_DRFIN_LF" }, + { "drfbfin", "mcoord_DRFIN_BU" }, + { "htr-drud", "coord_HTR_UF" }, + { "htr-drrl", "coord_HTR_LF" }, + { "htr-drfb", "coord_HTR_BU" }, + { NULL, NULL } +}; + +STATIC solver_dispatch_t match_solver(const char *name) { const char *prefix; + solver_dispatch_t ret; int i; - if (name == NULL) - return NULL; + for (i = 0; solver_aliases[i][0] != NULL; i++) + if (!strcmp(name, solver_aliases[i][0])) + return match_solver(solver_aliases[i][1]); for (i = 0; solver_dispatchers[i].prefix != NULL; i++) { prefix = solver_dispatchers[i].prefix; - if (!strncmp(name, prefix, strlen(prefix))) - return &solver_dispatchers[i]; + if (!strncmp(name, prefix, strlen(prefix))) { + ret = solver_dispatchers[i]; + ret.solvername = name; + return ret; + } } - return NULL; + return solver_dispatchers[i]; } -- cgit v1.3