aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nissy.c4
-rw-r--r--src/nissy.h4
-rw-r--r--src/solvers/coord/common.h17
-rw-r--r--src/solvers/coord/gendata.h2
-rw-r--r--src/solvers/coord/solve.h16
5 files changed, 26 insertions, 17 deletions
diff --git a/src/nissy.c b/src/nissy.c
index ed1d3f4..eb483a0 100644
--- a/src/nissy.c
+++ b/src/nissy.c
@@ -503,7 +503,6 @@ long long
503nissy_solve( 503nissy_solve(
504 const char cube[static NISSY_SIZE_B32], 504 const char cube[static NISSY_SIZE_B32],
505 const char *solver, 505 const char *solver,
506 const char *options,
507 unsigned nissflag, 506 unsigned nissflag,
508 unsigned minmoves, 507 unsigned minmoves,
509 unsigned maxmoves, 508 unsigned maxmoves,
@@ -569,11 +568,10 @@ nissy_solve(
569 parse_ret = parse_h48_solver(solver, &h, &k); 568 parse_ret = parse_h48_solver(solver, &h, &k);
570 if (parse_ret != NISSY_OK) 569 if (parse_ret != NISSY_OK)
571 return parse_ret; 570 return parse_ret;
572/* TODO give warning if options is not NULL or empty? */
573 return solve_h48(c, minmoves, maxmoves, maxsols, 571 return solve_h48(c, minmoves, maxmoves, maxsols,
574 opt, t, data_size, data, sols_size, sols, stats); 572 opt, t, data_size, data, sols_size, sols, stats);
575 } else if (!strncmp(solver, "coord_", 6)) { 573 } else if (!strncmp(solver, "coord_", 6)) {
576 return solve_coord_dispatch(c, solver + 6, options, nissflag, 574 return solve_coord_dispatch(c, solver + 6, nissflag,
577 minmoves, maxmoves, maxsols, opt, t, data_size, data, 575 minmoves, maxmoves, maxsols, opt, t, data_size, data,
578 sols_size, sols); 576 sols_size, sols);
579 } else { 577 } else {
diff --git a/src/nissy.h b/src/nissy.h
index 9c26292..6c5a3e6 100644
--- a/src/nissy.h
+++ b/src/nissy.h
@@ -257,9 +257,6 @@ Solve the given cube using the given solver and options.
257Parameters: 257Parameters:
258 cube - The cube to solver, in B32 format. 258 cube - The cube to solver, in B32 format.
259 solver - The name of the solver. 259 solver - The name of the solver.
260 options - Extra options for the solver. Some solver require additional
261 parameters, some do not. For example, a coordinate solver
262 may require an "axis" (UD, FB, RL) as a parameter.
263 nissflag - The flags for NISS (linear, inverse, mixed, or combinations). 260 nissflag - The flags for NISS (linear, inverse, mixed, or combinations).
264 minmoves - The minimum number of moves for a solution. 261 minmoves - The minimum number of moves for a solution.
265 maxmoves - The maximum number of moves for a solution. 262 maxmoves - The maximum number of moves for a solution.
@@ -293,7 +290,6 @@ long long
293nissy_solve( 290nissy_solve(
294 const char cube[static NISSY_SIZE_B32], 291 const char cube[static NISSY_SIZE_B32],
295 const char *solver, 292 const char *solver,
296 const char *options,
297 unsigned nissflag, 293 unsigned nissflag,
298 unsigned minmoves, 294 unsigned minmoves,
299 unsigned maxmoves, 295 unsigned maxmoves,
diff --git a/src/solvers/coord/common.h b/src/solvers/coord/common.h
index d827665..f21a903 100644
--- a/src/solvers/coord/common.h
+++ b/src/solvers/coord/common.h
@@ -6,6 +6,7 @@ coord_t *all_coordinates[] = {
6STATIC void append_coord_name(const coord_t *, char *); 6STATIC void append_coord_name(const coord_t *, char *);
7STATIC coord_t *parse_coord(const char *, int); 7STATIC coord_t *parse_coord(const char *, int);
8STATIC uint8_t parse_axis(const char *, int); 8STATIC uint8_t parse_axis(const char *, int);
9STATIC void parse_coord_and_axis(const char *, int, coord_t **, uint8_t *);
9 10
10STATIC void 11STATIC void
11append_coord_name(const coord_t *coord, char *str) 12append_coord_name(const coord_t *coord, char *str)
@@ -44,3 +45,19 @@ parse_axis(const char *axis, int n)
44 45
45 return UINT8_ERROR; 46 return UINT8_ERROR;
46} 47}
48
49STATIC void
50parse_coord_and_axis(const char *str, int n, coord_t **coord, uint8_t *axis)
51{
52 int i;
53
54 for (i = 0; i < n; i++)
55 if (str[i] == '_')
56 break;
57
58 if (coord != NULL)
59 *coord = parse_coord(str, i);
60
61 if (axis != NULL)
62 *axis = i == n ? UINT8_ERROR : parse_axis(str+i+1, n-i-1);
63}
diff --git a/src/solvers/coord/gendata.h b/src/solvers/coord/gendata.h
index d366466..9512b93 100644
--- a/src/solvers/coord/gendata.h
+++ b/src/solvers/coord/gendata.h
@@ -9,7 +9,7 @@ gendata_coord_dispatch(const char *coordstr, void *buf)
9{ 9{
10 coord_t *coord; 10 coord_t *coord;
11 11
12 coord = parse_coord(coordstr, strlen(coordstr)); 12 parse_coord_and_axis(coordstr, strlen(coordstr), &coord, NULL);
13 13
14 if (coord == NULL) { 14 if (coord == NULL) {
15 LOG("Could not parse coordinate '%s'\n", coord); 15 LOG("Could not parse coordinate '%s'\n", coord);
diff --git a/src/solvers/coord/solve.h b/src/solvers/coord/solve.h
index 190ac1f..75c6a4e 100644
--- a/src/solvers/coord/solve.h
+++ b/src/solvers/coord/solve.h
@@ -20,9 +20,8 @@ typedef struct {
20 20
21STATIC int64_t solve_coord(cube_t, coord_t *, uint8_t, uint8_t, uint8_t, 21STATIC int64_t solve_coord(cube_t, coord_t *, uint8_t, uint8_t, uint8_t,
22 uint8_t, uint64_t, int, int, uint64_t, const void *, uint64_t, char *); 22 uint8_t, uint64_t, int, int, uint64_t, const void *, uint64_t, char *);
23STATIC int64_t solve_coord_dispatch(cube_t, const char *, const char *, 23STATIC int64_t solve_coord_dispatch(cube_t, const char *, uint8_t, uint8_t,
24 uint8_t, uint8_t, uint8_t, uint64_t, int, int, uint64_t, const void *, 24 uint8_t, uint64_t, int, int, uint64_t, const void *, uint64_t, char *);
25 uint64_t, char *);
26STATIC bool solve_coord_appendchar(char *, uint64_t, uint64_t *, char); 25STATIC bool solve_coord_appendchar(char *, uint64_t, uint64_t *, char);
27STATIC int64_t solve_coord_appendsolution(dfsarg_solve_coord_t *); 26STATIC int64_t solve_coord_appendsolution(dfsarg_solve_coord_t *);
28STATIC int64_t solve_coord_dfs(dfsarg_solve_coord_t *); 27STATIC int64_t solve_coord_dfs(dfsarg_solve_coord_t *);
@@ -123,8 +122,7 @@ solve_coord_dfs(dfsarg_solve_coord_t *arg)
123STATIC int64_t 122STATIC int64_t
124solve_coord_dispatch( 123solve_coord_dispatch(
125 cube_t cube, 124 cube_t cube,
126 const char *coordstr, 125 const char *coord_and_axis,
127 const char *options,
128 uint8_t nissflag, 126 uint8_t nissflag,
129 uint8_t minmoves, 127 uint8_t minmoves,
130 uint8_t maxmoves, 128 uint8_t maxmoves,
@@ -140,16 +138,16 @@ solve_coord_dispatch(
140 coord_t *coord; 138 coord_t *coord;
141 uint8_t axis; 139 uint8_t axis;
142 140
143 coord = parse_coord(coordstr, strlen(coordstr)); 141 parse_coord_and_axis(
144 axis = parse_axis(options, strlen(options)); 142 coord_and_axis, strlen(coord_and_axis), &coord, &axis);
145 143
146 if (coord == NULL) { 144 if (coord == NULL) {
147 LOG("Could not parse coordinate '%s'\n", coordstr); 145 LOG("Could not parse coordinate from '%s'\n", coord_and_axis);
148 return NISSY_ERROR_INVALID_SOLVER; 146 return NISSY_ERROR_INVALID_SOLVER;
149 } 147 }
150 148
151 if (axis == UINT8_ERROR) { 149 if (axis == UINT8_ERROR) {
152 LOG("Could not parse axis from options '%s'\n", options); 150 LOG("Could not parse axis from '%s'\n", coord_and_axis);
153 return NISSY_ERROR_INVALID_SOLVER; 151 return NISSY_ERROR_INVALID_SOLVER;
154 } 152 }
155 153

Generated with cgit - Back to sebastiano.tronto.net