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 }