aboutsummaryrefslogtreecommitdiff
path: root/src/solvers/dispatch.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/solvers/dispatch.h')
-rw-r--r--src/solvers/dispatch.h46
1 files changed, 39 insertions, 7 deletions
diff --git a/src/solvers/dispatch.h b/src/solvers/dispatch.h
index 013468c..7e647ce 100644
--- a/src/solvers/dispatch.h
+++ b/src/solvers/dispatch.h
@@ -1,4 +1,5 @@
1typedef struct { 1typedef struct {
2 const char *solvername;
2 const char *prefix; 3 const char *prefix;
3 long long (*dataid)(const char *, char [static NISSY_SIZE_DATAID]); 4 long long (*dataid)(const char *, char [static NISSY_SIZE_DATAID]);
4 long long (*gendata)( 5 long long (*gendata)(
@@ -12,7 +13,7 @@ typedef struct {
12 int (*)(void *), void *); 13 int (*)(void *), void *);
13} solver_dispatch_t; 14} solver_dispatch_t;
14 15
15STATIC solver_dispatch_t *match_solver(const char *); 16STATIC solver_dispatch_t match_solver(const char *);
16 17
17solver_dispatch_t solver_dispatchers[] = { 18solver_dispatch_t solver_dispatchers[] = {
18{ 19{
@@ -41,20 +42,51 @@ solver_dispatch_t solver_dispatchers[] = {
41} 42}
42}; 43};
43 44
44STATIC solver_dispatch_t * 45const 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
71STATIC solver_dispatch_t
45match_solver(const char *name) 72match_solver(const char *name)
46{ 73{
47 const char *prefix; 74 const char *prefix;
75 solver_dispatch_t ret;
48 int i; 76 int i;
49 77
50 if (name == NULL) 78 for (i = 0; solver_aliases[i][0] != NULL; i++)
51 return NULL; 79 if (!strcmp(name, solver_aliases[i][0]))
80 return match_solver(solver_aliases[i][1]);
52 81
53 for (i = 0; solver_dispatchers[i].prefix != NULL; i++) { 82 for (i = 0; solver_dispatchers[i].prefix != NULL; i++) {
54 prefix = solver_dispatchers[i].prefix; 83 prefix = solver_dispatchers[i].prefix;
55 if (!strncmp(name, prefix, strlen(prefix))) 84 if (!strncmp(name, prefix, strlen(prefix))) {
56 return &solver_dispatchers[i]; 85 ret = solver_dispatchers[i];
86 ret.solvername = name;
87 return ret;
88 }
57 } 89 }
58 90
59 return NULL; 91 return solver_dispatchers[i];
60} 92}

Generated with cgit - Back to sebastiano.tronto.net