dispatch.h (2457B)
1 typedef struct { 2 const char *solvername; 3 const char *prefix; 4 long long (*dataid)(const char *, char [static NISSY_SIZE_DATAID]); 5 long long (*gendata)( 6 const char *, unsigned long long, unsigned char *); 7 long long (*checkdata)( 8 const char *, unsigned long long, const unsigned char *); 9 long long (*solve)(oriented_cube_t, const char *, unsigned, unsigned, 10 unsigned, unsigned, unsigned, unsigned, unsigned long long, 11 const unsigned char *, unsigned, char *, 12 long long [static NISSY_SIZE_SOLVE_STATS], 13 int (*)(void *), void *); 14 } solver_dispatch_t; 15 16 STATIC solver_dispatch_t match_solver(const char *); 17 18 solver_dispatch_t solver_dispatchers[] = { 19 { 20 .prefix = "h48", 21 .dataid = dataid_h48, 22 .gendata = gendata_h48_dispatch, 23 .checkdata = checkdata_h48, 24 .solve = solve_h48_dispatch, 25 }, 26 { 27 .prefix = "coord_", 28 .dataid = dataid_coord, 29 .gendata = gendata_coord_dispatch, 30 .checkdata = checkdata_coord_dispatch, 31 .solve = solve_coord_dispatch, 32 }, 33 { 34 .prefix = "mcoord_", 35 .dataid = dataid_coord, 36 .gendata = gendata_coord_dispatch, 37 .checkdata = checkdata_coord_dispatch, 38 .solve = solve_multicoord_dispatch, 39 }, 40 { 41 .prefix = NULL 42 } 43 }; 44 45 const char *solver_aliases[][2] = { 46 { "optimal", "h48h7k2" }, 47 { "eofb", "coord_EO_UF" }, 48 { "eorl", "coord_EO_UR" }, 49 { "eoud", "coord_EO_FD" }, 50 { "drud", "coord_DR_UF" }, 51 { "drrl", "coord_DR_RF" }, 52 { "drfb", "coord_DR_FD" }, 53 { "drudslice", "coord_DRSLICE_UF" }, 54 { "drrlslice", "coord_DRSLICE_LF" }, 55 { "drfbslice", "coord_DRSLICE_BU" }, 56 { "drud-eofb", "coord_DREO_UF" }, 57 { "drrl-eofb", "coord_DREO_RF" }, 58 { "drud-eorl", "coord_DREO_UR" }, 59 { "drfb-eorl", "coord_DREO_RU" }, 60 { "drrl-eoud", "coord_DREO_FR" }, 61 { "drfb-eoud", "coord_DREO_FD" }, 62 { "drudfin", "mcoord_DRFIN_UF" }, 63 { "drrlfin", "mcoord_DRFIN_LF" }, 64 { "drfbfin", "mcoord_DRFIN_BU" }, 65 { "htr-drud", "coord_HTR_UF" }, 66 { "htr-drrl", "coord_HTR_LF" }, 67 { "htr-drfb", "coord_HTR_BU" }, 68 { NULL, NULL } 69 }; 70 71 STATIC solver_dispatch_t 72 match_solver(const char *name) 73 { 74 const char *prefix; 75 solver_dispatch_t ret; 76 int i; 77 78 for (i = 0; solver_aliases[i][0] != NULL; i++) 79 if (!strcmp(name, solver_aliases[i][0])) 80 return match_solver(solver_aliases[i][1]); 81 82 for (i = 0; solver_dispatchers[i].prefix != NULL; i++) { 83 prefix = solver_dispatchers[i].prefix; 84 if (!strncmp(name, prefix, strlen(prefix))) { 85 ret = solver_dispatchers[i]; 86 ret.solvername = name; 87 return ret; 88 } 89 } 90 91 return solver_dispatchers[i]; 92 }