From 87a15e960e31365698df7e06cd3e6b851e17c1a5 Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Sun, 5 Mar 2023 10:13:01 +0100 Subject: I made a mess, but it works. Still need to implement new optimal solver. After that, a big redesign is due. --- src/solve.h | 50 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 46 insertions(+), 4 deletions(-) (limited to 'src/solve.h') diff --git a/src/solve.h b/src/solve.h index 9a284ff..b09c81b 100644 --- a/src/solve.h +++ b/src/solve.h @@ -2,10 +2,52 @@ #define SOLVE_H #include "moves.h" -#include "steps.h" -#include "trans.h" -AlgList * solve(Cube *cube, ChoiceStep *cs, SolveOptions *opts); -Alg * solve_2phase(Cube *cube, int nthreads); +#define MAX_SOLVERS 99 + +typedef struct dfsarg DfsArg; +typedef struct threader Threader; +typedef struct solver Solver; + +/* TODO: add solver and threader in DfsData, remove from dispatch args and similar */ + +struct dfsarg { + void * cubedata; + void * threaddata; + SolveOptions * opts; + int d; + bool niss; + Alg * current_alg; +}; + +struct threader { + void (*append_sol)(Alg *, void *); + void (*dispatch)(DfsArg *, AlgList *, Solver *, Threader *); + int (*get_nsol)(void *); +/* TODO: threader should have param, like solver? */ +}; + +struct solver { + Moveset * moveset; + bool (*move_check_stop)(void *, DfsArg *, Threader *); + Alg * (*validate_solution)(void *, Alg *); + bool (*niss_makes_sense)(void *, void *, Alg *); +/* TODO: move param to somewhere where it makes more sense */ + void * param; +/* TODO: the following should be part of a generic cube description */ +/* TODO: remove alloc? */ + void * (*alloc_cubedata)(void *); + void (*copy_cubedata)(void *, void *, void *); + void (*free_cubedata)(void *, void *); + void (*invert_cube)(void *, void *); + bool (*is_solved)(void *, void *); + void (*apply_alg)(void *, void *, Alg *); +/* TODO: remove dependence on Cube, preparation should be done before */ + void * (*prepare_cube)(void *, Cube *); +}; + +void dfs(DfsArg *, Solver *, Threader *); +/* TODO: remove dependence on Cube, preparation should be done before */ +AlgList * solve(Cube *, SolveOptions *, Solver **, Threader *); #endif -- cgit v1.3