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 (1467B)


      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_dispatch,
     30 	.solve = solve_coord_dispatch,
     31 },
     32 {
     33 	.prefix = "mcoord_",
     34 	.dataid = dataid_coord,
     35 	.gendata = gendata_coord_dispatch,
     36 	.checkdata = checkdata_coord_dispatch,
     37 	.solve = solve_multicoord_dispatch,
     38 },
     39 {
     40 	.prefix = NULL
     41 }
     42 };
     43 
     44 STATIC solver_dispatch_t *
     45 match_solver(const char *name)
     46 {
     47 	const char *prefix;
     48 	int i;
     49 
     50 	if (name == NULL)
     51 		return NULL;
     52 
     53 	for (i = 0; solver_dispatchers[i].prefix != NULL; i++) {
     54 		prefix = solver_dispatchers[i].prefix;
     55 		if (!strncmp(name, prefix, strlen(prefix)))
     56 			return &solver_dispatchers[i];
     57 	}
     58 
     59 	return NULL;
     60 }