aboutsummaryrefslogtreecommitdiff
path: root/src/solvers/coord/utils.h
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2025-03-25 14:09:14 +0100
committerSebastiano Tronto <sebastiano@tronto.net>2025-03-25 14:09:14 +0100
commit9154476ba6bf400c1eb379f0a3aa6caae2d06d4d (patch)
tree73bfb47ccb6cb31a7c91f9917b37a517f2146c24 /src/solvers/coord/utils.h
parentcc2dacd43eb7f5ed3a2917612b9a2a9232a61e59 (diff)
downloadnissy-core-9154476ba6bf400c1eb379f0a3aa6caae2d06d4d.tar.gz
nissy-core-9154476ba6bf400c1eb379f0a3aa6caae2d06d4d.zip
Added NISS to coord solver
Diffstat (limited to 'src/solvers/coord/utils.h')
-rw-r--r--src/solvers/coord/utils.h68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/solvers/coord/utils.h b/src/solvers/coord/utils.h
new file mode 100644
index 0000000..ab4aded
--- /dev/null
+++ b/src/solvers/coord/utils.h
@@ -0,0 +1,68 @@
1STATIC coord_t *parse_coord(size_t n, const char [n]);
2STATIC uint8_t parse_axis(size_t n, const char [n]);
3STATIC void parse_coord_and_axis(size_t n, const char [n], coord_t **, uint8_t *);
4STATIC int64_t dataid_coord(const char *, char [static NISSY_DATAID_SIZE]);
5
6STATIC coord_t *
7parse_coord(size_t n, const char coord[n])
8{
9 int i;
10
11 for (i = 0; all_coordinates[i] != NULL; i++)
12 if (!strncmp(all_coordinates[i]->name, coord, n))
13 return all_coordinates[i];
14
15 return NULL;
16}
17
18STATIC uint8_t
19parse_axis(size_t n, const char axis[n])
20{
21 if (!strncmp(axis, "UD", n) || !strncmp(axis, "DU", n)) {
22 return AXIS_UD;
23 } else if (!strncmp(axis, "RL", n) || !strncmp(axis, "LR", n)) {
24 return AXIS_RL;
25 } else if (!strncmp(axis, "FB", n) || !strncmp(axis, "BF", n)) {
26 return AXIS_FB;
27 }
28
29 return UINT8_ERROR;
30}
31
32STATIC void
33parse_coord_and_axis(
34 size_t n,
35 const char str[n],
36 coord_t **coord,
37 uint8_t *axis
38)
39{
40 size_t i;
41
42 for (i = 0; i < n; i++)
43 if (str[i] == '_')
44 break;
45
46 if (coord != NULL)
47 *coord = parse_coord(i, str);
48
49 if (axis != NULL)
50 *axis = i == n ? UINT8_ERROR : parse_axis(n-i-1, str+i+1);
51}
52
53STATIC int64_t
54dataid_coord(const char *ca, char dataid[static NISSY_DATAID_SIZE])
55{
56 coord_t *c;
57
58 parse_coord_and_axis(strlen(ca), ca, &c, NULL);
59
60 if (c == NULL) {
61 LOG("dataid_coord: cannot parse coordinate from '%s'\n", ca);
62 return NISSY_ERROR_INVALID_SOLVER;
63 }
64
65 strcpy(dataid, c->name);
66
67 return NISSY_OK;
68}

Generated with cgit - Back to sebastiano.tronto.net