nissy-core

The "engine" of nissy, including the H48 optimal solver.
git clone https://git.tronto.net/nissy-core
Download | Log | Files | Refs | README | LICENSE

dispatch.h (1293B)


      1 typedef struct {
      2 	const char *prefix;
      3 	long long (*dataid)(const char *, char [static NISSY_SIZE_DATAID]);
      4 	long long (*gendata)(
      5 	    const char *, unsigned long long, unsigned char *);
      6 	long long (*checkdata)(
      7 	    const char *, unsigned long long, const unsigned char *);
      8 	long long (*solve)(oriented_cube_t, const char *, unsigned, unsigned,
      9 	    unsigned, unsigned, unsigned, unsigned, unsigned long long,
     10 	    const unsigned char *, unsigned, char *,
     11 	    long long [static NISSY_SIZE_SOLVE_STATS],
     12 	    int (*)(void *), void *);
     13 } solver_dispatch_t;
     14 
     15 STATIC solver_dispatch_t *match_solver(const char *);
     16 
     17 solver_dispatch_t solver_dispatchers[] = {
     18 {
     19 	.prefix = "h48",
     20 	.dataid = dataid_h48,
     21 	.gendata = gendata_h48_dispatch,
     22 	.checkdata = checkdata_h48,
     23 	.solve = solve_h48_dispatch,
     24 },
     25 {
     26 	.prefix = "coord_",
     27 	.dataid = dataid_coord,
     28 	.gendata = gendata_coord_dispatch,
     29 	.checkdata = checkdata_coord,
     30 	.solve = solve_coord_dispatch,
     31 },
     32 {
     33 	.prefix = NULL
     34 }
     35 };
     36 
     37 STATIC solver_dispatch_t *
     38 match_solver(const char *name)
     39 {
     40 	const char *prefix;
     41 	int i;
     42 
     43 	if (name == NULL)
     44 		return NULL;
     45 
     46 	for (i = 0; solver_dispatchers[i].prefix != NULL; i++) {
     47 		prefix = solver_dispatchers[i].prefix;
     48 		if (!strncmp(name, prefix, strlen(prefix)))
     49 			return &solver_dispatchers[i];
     50 	}
     51 
     52 	return NULL;
     53 }