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 }